1.什么是集群
以下引用来自维基百科:
计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多
个人总结:
集群就是同一业务,部署在多个服务器上(每一个服务器跑的都是相同的代码,干同一件事)
优点:
- 集群可以实现多个服务器工作,分担服务器的压力
- 如果某一台服务器宕机了,没关系,还有其他服务器顶上,不影响整个系统正常运作
什么是分布式
以下内容来源维基百科:
分布式系统是一组计算机,通过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标。
个人总结:
- 分布式就是一个业务拆分成多个子业务,部署在不同服务器上。
- 针对子业务的特点来配置相匹配的服务器。比如有些业务访问量多,可能需要性能较高的机器(如订单系统、高并发访问的网页),而访问量少的系统,匹配性能较低的机器(如后端管理系统)
优点:
- 耦合度降低,功能拆分,模块之间独立,便于扩展维护,复用性高
- 资源合理利用,每个功能匹配对应的性能机器,充分利用资源
介绍完分布式和集群,来说说CAP理论
CAP理论
概述
CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
个人总结:
- Consistency 一致性:
是指在一个分布式系统中,用户在更新完系统中某一值后,另一个用户可以及时得到该更新后的值,及所有节点在同一时间的数据完全一致。
其中,一致性有分为:1、强一致性,2、弱一致性,3、最终一致性
- Availability 可用性:
是指在一个分布式系统中,用户可以一直正常访问系统,且系统都是在正常时间内响应
其中,可用性有分为以下几类(图片由网上查找)
好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。一个分布式系统,上下游设计很多系统如负载均衡、WEB服务器、应用代码、数据库服务器等,任何一个节点的不稳定都可以影响可用性。
- Partition Tolerance分区容错性:
分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
分区容错性和扩展性紧密相关。在分布式应用中,可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,或者是机器之间有网络异常,将分布式系统分隔未独立的几个部分,各个部分还能维持分布式系统的运作,这样就具有好的分区容错性。
简单点说,就是在网络中断,消息丢失的情况下,系统如果还能正常工作,就是有比较好的分区容错性。
CAP证明:
参考资料:https://mp.weixin.qq.com/s/DUOsYUTuKM6mhahqiaWXCA
总结:
就是在分布式系统中,C、A、P三个特性无法同时满足,最多只能同时满足其中的两个。
解决方案:
- 选择CA舍弃P:可以向任意节点读写数据并确信他们数据相同,但只要分区出现,数据将不再同步(P不成立,就不能容忍分区出现,在分布式系统中这样就无意义了)
- 选择AP舍弃C:保证了系统的可用性,不过舍弃了一致性(这里指的一致性是指强一致性),大多情况下还是保证了最终一致性。
- 选择CP舍弃A:保证了一致性,为了时数据保持一致,必须经过同步实现,若网络或某些原因出现延时错误,会通过拒绝用户访问(舍弃可用性)等方式来实现数据同步。
应用场景:
- AP without C:比如淘宝、12306购票软件,都是使用这种策略,你可能遇到这种情况,比如页面显示还有库存,可是当你订单的时候却总是显示下单失败,这就是舍弃了一致性,(这里无法下订单的依据我觉得是因为下定单需要访问到数据库中该字段数据来确认,由于网络原因导致下不了单,无法返回确认信号,导致下单操作无法提交)。
- CP without A:比如一些分布式数据库储存系统,就是保证数据一致的情况下舍弃了可用性,毕竟数据库要确保数据的准确性是最重要的。
总而言之,选择怎样的方案,都要根据对应的场景需求,并没有绝对的答案。
结语:
在实现分布式系统一致性中,有一种叫Paxos算法的解决方案
这是关于该算法的介绍:
https://juejin.im/post/5afb95de6fb9a07ac363a410#heading-0