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