前言
让时间积累真正的价值
最近投简历的时候,招聘上经常写着需要掌握SpringCloud,这让我的心凉了一半。 我甚至不知道分布式系统、微服务是什么。 不让我玩的节奏啊! 是时候好好理解分布式、spring cloud相关的内容了。
见文章:
集群和分布式系统
集体感染
集群是什么?
以下是我在网上找到的定义
集群是指由硬件或软件连接的多台计算机分散构成的计算机系统。 从某种意义上说,集群对外可以看作一台计算机。 集群中的计算机一般通过局域网连接,当然也有其他连接方法。
集群特征
多台计算机完成一项工作,效率更高
多台服务器共同完成同一任务,且一台服务器连接到另一台服务器。
在这里胡说八道,举个例子吧:
月生是当地有名的鞋匠,制鞋水平一流,受到附近的好评。 月生一个人做鞋。 不,电子商务兴起,月生的儿子在某个宝地上给月生开了店。 一开始还好,店里只有零星的名单。 这几乎没有影响月产。
月产鞋质量高,备受好评。 随着时间的推移,从网店收到的订单急剧增加,这让我很累。 发货晚了,投诉来了。 为了赶上月产没能熬夜。 有几次月生的朋友想找月生喝茶,但他抽不出空来。 为了解决这个问题,月生收了几个徒弟,和他一起做了鞋。 在月生的严格指导下,弟子们做的鞋跟月生做的鞋没有太大的差别。 这样月生就不用熬夜了,朋友想约月生叙叙旧,所以月生可以放下部下的工作去赴约。
结合上面的例子,当月自己做鞋的时候,就像我们在本地调试的时候一样,把web直接丢在tomcat里面就可以了。 所有请求都去我们本地的tomcat。 当月忙不完工作,叫徒弟们一起干就成簇了。 月生和弟子一起制作鞋子的效率比月生自己一个人制作的效率还要高。 当月出生有事离开时,徒弟也可以继续做。
方差
什么是分布式系统?
分布式系统是一组计算机,通过网络连接和信息通信形成一个系统。 节点计算机相互协调以实现相同的目标。
分布式系统的特点
将系统的功能分割为不同的节点,在使用时组合这些系统。 不同的机器执行不同的代码。
分布式系统的优点:
的部分节点出现了有问题的系统,但的其他功能仍然可用。
尝试修改一个业务时,最有业务的节点停止即可,不影响其他系统的运行。
可以单独提高耗时的业务节点,资源利用率高于群集。
为了理解方差的特征,接着上面的例子继续胡说。
随着时间的推移,月生发现擅长和不擅长的因弟子而异。 既有擅长剪裁布料的徒弟,也有不擅长缝纫的徒弟,也有擅长缝纫而不系鞋带的徒弟,还有些小偷想系鞋带。 月生突然发现,不同的徒弟擅长做不同的事,所以让不同的徒弟做自己最擅长的事! 单枪匹马地干。 月生让弟子们做符合自己特长的工作,弟子们只做自己最擅长的事。 这个变更让弟子也很高兴。 裁剪布料的徒弟本来就不喜欢缝制。 这样,弟子就不用做讨厌的事了,他变得爽快了,效率一下子提高了。
实践后,月生发现这样做有几个好处。 这样分工可以更灵活地调整工作量。 裁剪布料的速度比缝制的速度快。 一个徒弟负责裁剪,一个徒弟负责缝制,负责裁剪的徒弟就有空了。 叫了很多徒弟来缝纫就好了。 这样,效率又大幅提高了。
结合上面的例子,月生让不同的弟子做不同的工作就相当于分散型。 分散型的优点之一,就像月生让多个徒弟做缝纫这个工作一样,根据工作需要花工作时间灵活分配机器。
微服务
微服务是什么?
简而言之,微服务是一种小服务,功能非常简单,就像专注于一件事。 用户的请求通过服务之间的相互调用进行。 在实际开发中,微服务器由一个独立的小团队负责开发、部署和维护。
但是微服务也有缺点:
微服务器粒度更小,数量多,后期维护困难。
微服务和分散
微服务和分布式的概念非常相似。 它们都将功能分割为更小的单元,将这些单元组合使用。 微服务与单个系统的区别在于,微服务APP应用未必分布在不同的服务中,可以是相同的服务,且微服务的粒度比分布式系统细。
见文章:
CAP理论
要理解分布式系统,必须理解CAP理论。 CAP理论用于描述分布式系统的特性。
分布式系统最多满足两个特性:数据完整性、数据可用性和分区容错能力。
值得注意的是,分布式系统分区的分区容错(p )是必须存在的,否则分布式系统无异于退化为独立系统。
数据完整性。
一致性是指在数据更新操作后,所有节点上的数据完全一致。 在需要确保一致性的系统中,客户端和服务器端所需的工作不同。 客户端重点关注数据更新后的获取方法,服务器端重点关注如何将数据同步到其他节点,以确保数据的最终一致性。
我理解
一致性的时候需要着重注意并发读写对一致性的影响。可以这么说,如果没有并发读写,不需要一致性。从客户的角度来看,一致性分为3个级别:强一致性、弱一致性、最终一致性。
强一致性
让客户端更新数据以后,需要等全部数据同步到其他的存储节点才能允许其他客户端访问。注意,CAP里面说的不能保证拥有AP的同时拥有C说的就是强一致性。级别稍微低一点的一致性还是可以保证的。
弱一致性
容忍数据在更新以后,只能部分节点访问到或全部访问不到更新以后的数据,这就是弱一致性。
最终一致性
在客户端更新完成一定时间以后,客户端才能访问到数据。
可用性(Availability)
可用性指的是服务一直可用,而且是在规定的响应时间内。
对于一个可用的分布式服务器,非故障的节点必须对每个请求做出响应,衡量可用性的指标是停机时间的占比。
可用性分类
可用性占比(%)
年容忍停机时间
容错可用性
99.9999
<1min
极高可用性
99.999
<5min
故障自动恢复的可用性
99.99
<53min
高可用性
99.9
<8.8h
影响系统可用性的原因有很多种,负责均衡、程序代码、数据库服务、网络都能影响到服务器的可用性。
分区容错性(Partition-tolerance)
简单来说就是容忍分区网络不可达的情况。在某个节点故障的时候所有分布式系统雪白的咖啡能能够对外提供可用性、和数据一致性的的能力。
CAP的参考文章: