微服务学习:微服务CAB理论

描述

C (Consistency /kənˈsɪstənsi/):一致性,即数据一致性,特指分布式系统中的数据一致性。
A(Availability /əˌveɪləˈbɪləti/):可用性,即服务的高可用,特指分布式系统中服务的高可用,某个服务瘫痪不影响整个分布式系统的正常运行。
P(Partition Tolerance):分区容错性(也有的叫分区耐受性),即网络故障,特值分布式系统中服务之间出现了网络故障,整个分布式系统任然保持可用性和一致性。

重点:在分布式系统中,网络故障,服务瘫痪,整个系统的数据仍然保持一致性

取舍策略

CAP三个特性只能满足其中两个

  1. CA:如果不要求P,则C和A是可以保证的。但放弃P的同时也就意味放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背了分布式系统设计的初衷的。
  2. CP:如果不要求A,相当于每个请求都需要在服务器之间保持强一致性,而P会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。设计成CP的系统其实不少,最典型的就是分布式数据库,如Redis等。对于这些分布式数据库来说,数据的一致性是最基本的要求,如果连这个标准都达不到,那么直接采用关系型数据库就好,没必要再浪费资源来部署分布式数据库。
  3. AP:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。典型的应用就如某米的抢购手机场景,可能前几秒你浏览商品的时候页面提示是有库存的,当你选择完商品准备下单的时候,系统提示你下单失败,商品以售完,这其实就是先在A方面保证系统可以正常的服务,然后再数据的一致性方面做了些牺牲,虽然多少会影响一些用户体验,但也不至于造成用户购物流程的严重阻塞。
    最常用的是AP与CP。

总结

「分区容错性」是分布式系统必然要面对的问题。只能在 C 和 A 之间进行取舍。但对于传统的项目就可能有所不同,拿银行的转账系统来说,涉及到金钱的对于数据一致性不能做出一丝的让步,C 必须保证,出现网络故障的话,宁可停止服务,可以在 A 和 P 之间做取舍。而互联网非金融项目普遍都是基于 AP 模式。总而言之,没有最好的策略,好的系统应该是根据业务场景来进行架构设计的,只有适合的才是最好的。

posted @ 2022-08-09 10:59  壹-ZL  阅读(143)  评论(0编辑  收藏  举报