一致性问题
分布式系统中的一致性指应用系统的一致性和数据的一致性。多个系统之间互相通信,就有可能遇到例如:
(1) 调用超时:系统A调用系统B超时,系统A得到超时反馈,但不确定系统B是否已经处理结束,就会造成不一致。
(2) 掉单:系统A和系统B分别为对方的上下游,如果系统A中存在一个订单,而系统B中不存在,就会导致掉单。
(3) 缓存与数据库的不一致:面对海量的访问请求,我们经常会需要在数据库前加一层缓存,这个缓存与数据库之间如何保证一致性。
CAP定理
CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多实现两点,三者不可兼得。CAP定理主要是针对分布式系统各节点之间的通信提出的定理。
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。
可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的请求。
分区容错性(P):分布式系统中的节点之间的通信有可能失败,在这种情况下,系统要能够容纳这种错误。
分布式系统中必然存在着分区,而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的。那么根据CAP定理,C与A我们只能择其一实现。那么为什么实现P的情况下,C与A不可兼得呢,我们来分析一下。
假设节点A与节点B,它们中的数据是一致的,然后我们发起请求,修改了节点A中的数据,节点B中的数据也要相应的更改,但是出现了网络延迟等问题,节点B中的数据没有更改,依然是旧数据。这时,请求节点B中的数据,但是数据还没有同步,那怎么办呢?如果我们要满足一致性,就应阻塞这次请求,等节点B中的数据得到更改,这样可用性就无法满足;而如果我们要满足可用性,那么我们就要返回节点B中的旧的数据,这样一致性就无法满足。所以我们就需要结合实际情况,做出取舍,是满足一致性还是满足可用性。
其他
其他还有比如分布式事务的问题,一个设计多个子系统的事务如何实现;还有分布式系统的缓存,搜索,日志,配置中心等,都与单块系统差别很大,就需要用到Redis、Elasticsearch等技术来解决。