最近罗胖的“小趋势”很火,这里我也蹭蹭热度,来一个“小理解”。
先聊聊分布式
其实对于分布式我原来一直是有些疑问的,是关于一致性的,一致性是分布式系统面临的问题,但一个系统如果没有一致性问题,那这个系统到底算不算分布式系统呢?比如说,最简单情况,一个电商系统,是由商品、交易、订单组成的,就是说我完成一个下单,需要调用这些个系统,但是这些系统都是使用的同一个DB,换句话说就是,系统层面进行了切分,但是资源是同一个。发现没有,这些系统之间有rpc、mq,甚至进行了分区(不同地区的机房)。到这里不要疑惑,我们每天接触的绝对是分布式系统,只不过它面临CAP问题只解决了C,AP问题仍在。当它想要区解决AP问题的时候,就会发现C不能保证了,这就是著名的CAP定理。
我的小疑惑
关于CAP的解释我这里就不再赘述了,我这里只想聊聊CAP中的“P”。好多文章里都翻译成了“分区容忍”,可能是我的理解能力有问题?总是对这个概念不能很清晰的理解。今天看到阮一峰老师的文章,将P翻译成“分区容错”,有点醍醐灌顶的感觉,容错代表容许错误,这时候已经发生了错误。
大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区错误就是,区间通信失败。我们清楚,网络是不可信的,所以分区错误肯定会发生。对于分区错误,最常见的解决办法是Replication,这样即使分区之间发生了异常,有会有其他的节点提供服务,增强了可用性,但是这样又会带来一致性问题。所以,也传说着这样一句话,P(分区容错)是一定要保证的(虽然绝大多数根本做不到(●’◡’●))。
解惑
然后我们思考下P的重要性,试思考下,如果不分区,可能会出现什么问题?很明显,如果发生任何外部因素,例如断电、电缆断掉等等,将导致你的系统不可用,这对于互联网行业来说是不能容忍的。在此基础上我们再考虑CA的问题。认真推导就会发现,在P的情况下,CA不可能同时保证。
然后我们聊聊关系型数据库,很多的文章都会说关系型数据库是CA模型,在大数据的情况下,关系型数据库面临最大的问题是扩展问题,扩展成多库存储,必然导致CA问题,而我们也清楚,分布式事务是很头疼的,而且至今也没有完美的解决方案。
推荐两篇不错的文章,https://www.jdon.com/bigdata/how-to-understand-cap.html,http://www.ruanyifeng.com/blog/2018/07/cap.html