目录
一、分布式系统
1.1 什么是分布式系统?
在传统项目中,通常是将一个项目打成war包,部署在tomcat中运行。当项目越来越大时,这种方式就不太适用了。此时,会将项目分解成不同的服务,这些服务部署在不同的计算机上,彼此之间通过网络相互协调工作。总之,一个硬件或软件组织分布在不同的网络计算机上,彼此之间通过消息传递进行通信和协调的系统即为分布式系统
1.2 分布式系统特点
分布性:整个项目在空间上是任意的
对等性:在分布式系统中,每个微服务都可能出现问题,这时就需要两个或以上完全相同的微服务,在一个出现问题时能够替换,保证系统能够正常运行
并发性:比多线程并发更高一个层次,从多进程,多JVM的角度,保证并发安全
缺乏全局时钟:由于分布式系统可以部署多个节点,每个节点都有自己的时钟系统
故障随时发生:由于分布,任何一个节点都可能出现问题,节点越多,出现故障的概率越大
1.3 分布式系统带来的问题
1、网络异常
分布式系统之间通过网络互相交互,而网络是不稳定的
2、网络分区
也称为脑裂,在一个系统中,本来应该有一个指挥官,但是由于网络故障等原因,导致部分区域又出现一个指挥官,二者互相冲突
3、三态
正常调用服务,要么成功,要么失败。当出现异常时,非常可能出现超时现象,此时,发起方并不知道请求是否成功或者失败
4、节点故障
分布式系统的某些节点可能会出现宕机或者“假死”现象
1.4 分布式系统理论
既然分布式系统有那么多问题,那么应该如何解决这些问题?依靠什么理论依据呢?
1、CAP理论
一致性C、可用性A、分区容错性P
一致性:和对等性差不多,在分布式系统中,数据在多个副本之间是否能够保证一致
可用性:系统提供服务必须一直处于可用状态,对于用户的请求总是在有限的时间内返回结果
分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够对外提供满足一致性和可用性的服务,不能出现脑裂的情况,除非整个网络环境都发生故障
主要在A和C中间寻求平衡
2、Base理论
即使无法做到强一致性,但分布式系统可以根据自己的业务特点,采用适当的方式使系统达到最终的一致性
基本可用:当分布式系统出现不可预见的故障时,允许损失部分可用性,保证系统的基本可用。eg双十一期间部分用户淘宝页面的卡顿或降级
软状态:运行系统中的数据存在中间状态,即系统的不同节点的数据副本之间的同步存在延时,并认为这种延时不会影响系统的可用性。eg、12306购票,请求会进入排队队列
最终一致性:所有数据在经过一段时间的数据同步后,最终会达到一致
1.5 分布式算法
2pc、3pc、paxos、zab算法
1.5.1 2pc
也称之为两阶段提交
第一阶段:执行事务,记录日志等
第二阶段:提交事务
一旦发现任何一个资源在第一阶段没有成功,则发送rollback
优点:原理简单,实现简单
缺点:
同步阻塞:在二阶段提交的过程,所有节点都在等待其他节点的响应,无法进行其他操作。这种同步阻塞极大的限制了分布式系统的性能。
单点问题:协调者在整个过程中很重要,一旦其出现问题,整个流程无法运转。并且,其他参与者将会处于一直锁定事务资源的状态,而无法继续完成事务操作。
数据不一致:当协调者向所有参与者发送commit请求之后,发生局部网络异常,或者协调者在尚未发送完所有的commit之前自身出现问题,导致最终只有部分参与者收到commit请求,这就会导致严重的数据不一致问题。
容错性不好:任意一个节点的失败都会导致整个事务的失败。
1.5.2 3pc
第一阶段:确认所有资源都是正常的
第二阶段:执行事务,写日志
第三阶段:commit(与2PC区别:在一段时间后资源默认commit)
优点:减少了单点故障概率,万一协调者出现问题,事务也会提交
缺点:还是存在这些问题,只是减少概率的出现