内容
定义与介绍
- 将不同的组件分布在不同的服务器上,给用户提供一个可靠统一的服务。
- 分布:不同
- 用户:可靠,统一的服务
分布式系统的原则
- C一致性
- A可用性
- P分区容错性
实现一致性
- 强一致性
- 对多个数据源,多个数据库的所有的操作它是原子性完成的,然后它的数据是满足一致性的要求,以及隔离性,在分布式系统几乎不可能全部完成强一致性
- 弱一致性
- 当我的一个业务请求调用不同服务的时候,它是一个一个调用然后每一个服务的调用都是在这个事务内去满足一致性要求,对于一个用户来说他看到的结果是实际上他有可能看一个中间的结果,比如说他下单完了以后他有可能会看到扣费完成但是票还没有转移的一种状态,但是如果说他稍微等个几秒种或者说在一个很短的时间内,这个我所有的业务都能够正常的完成然后我的数据还是能达到一致性的要求
- 对于这个弱一致性来说有一个问题就是说,如果说出错了怎么办,一个业务操作先操作了一个服务然后再操作另外一个服务,但是在操作第二个服务的时候出错了,那我的第一个服务我应该怎么回滚,或者说我的整个业务我该怎么回滚,这个就是弱一致性比较难的地方,如果说我要考虑数据回滚、重试等等这些个机制的话,那我的这个分布式系统设计就会比较复杂
- 最终一致性
- 在弱一执行的基础上先允许出错,但是呢我可以通过一些重试机制或者通过些定时任务去扫描然后针对这种出错的情况直接进行取消,甚至通过人工干预的方式我能够让这些数据达到最终一致性
- 最终一致性大家很容易就能想象到,因为它不需要考虑很多数据的回滚,它的实现起来呢就会相对的容易,而它的性能就会比较好,因为我不需要考虑它的一致性或者同步性等一些操作,而且开发维护的成本也会比较低
- 所以在现在的分布式系统中大部分使用的还是通过这种最终一致性的方式去实现分布式事务
BASE理论
如何实现原则
- BASE: Basically Available (基本可用)、Soft state (软状态)和Eventually consistent (最终一致性 )
- 相当于CAP原则中的一致性和可用性的权衡结果