容器技术本身没有提供保证数据安全性和数据一致性的机制,数据安全性和数据一致性是我们在设计一个容器云平台的持久化存储时所需要着重解决的问题之一,需要利用后台的存储设备和相关软硬件技术来实现。
收起数据一致性问题并不是引入容器使用才导致的。数据一致性问题是任何分布式系统都面临的问题。
容器并不导致数据一致性问题,而是因为容器上运行了分布式的业务,比如一个事务跨了多个微服务;或者使用了分布式的资源,比如需要更新多个数据副本,才会导致数据一致性问题。
有关数据一致性问题的讨论已经持续了多年,相关的理论和实践经验也都同样适用于容器使用。在不同的语境下,分布式数据一致性有两种不同的含义,相应的关注内容和技术方案是不同的:
对于第一种情况,需要把对多个数据分片的操作放在一个ACID事务中进行操作,交易中间件中的2阶段提交就是针对此类需求的。具体到容器使用时,我们应当在划分微服务边界时,避免把一个事务内的操作划分到不同的微服务中。跨微服务的事务协调成本和难度相当高,我们应当尽量避免;而在一个微服务内的事务协调,可以借助事务交易中间件来帮忙。
对于第二种情况,如何进行多个数据分片之间的同步,可能是强一致性,也可能是最终一致性。对于强一致性,根据CAP原理,分布式系统的强一致性必须导致牺牲可用性为代价。具体到容器使用时,我们尽量避免用容器运行要求强一致性的场景,而尽量选择能接受最终一致性的工作负载,而底层的数据同步,可以借助基于raft协议的方案,例如etcd。
收起