复制机制

99 阅读2分钟

我正在参与掘金创作者训练营第6期,点击了解活动详情

复制机制在大规模数据储存中和分片机制有类似的效果,整体上能够对外表现出提高吞吐量的效果。为什么是整体呢?因为复制并不要求客户端请求资源时可以并行请求多个副本,这可以让单个客户端体会到什么是高速的大数据传输(理论上是每个服务的最大速度之和),只是这可能会给客户端和服务端都带来一些不必要的负担(过多的TCP连接数量),而不让不同的客户端交叉访问各自下载,从服务端整体看数据流出速度峰值理论上仍然是一致的。正是这些手段让我们平常下载东西的时候传输速度能保持一个相对不算太差的水平,但其实讽刺的是其实限制速度的最大问题是网络中间的节点和线路限制,成本太高,而这个原因又可以追溯到信息论。说得稍微有点偏了,但是这也是一直以来被各种吹嘘的元宇宙之类的技术需要解决的。

话说回来,在实际中复制机制的另一个作用似乎更被人看重:作为数据的备份,并在必要时取代原来的服务,直接作为数据源,这种手段也被叫做高可用。

最常用的复制机制是主从机制,从古早时期就存在了。它的从库不一定要对外提供读服务,写服务则肯定不提供,可能是在转正之后才提供服务。不过这不重要,这个机制最重要的一点是提出了状态机复制的概念。基于这个由出现了异步复制的机制,这将会导致数据延迟,两个机器上的数据需要间隔一段时间才能达到数据一致,也就是最终一致性。

主主机制这种复制机制,可以让两台机器同时对外可以提供读写服务。原理同样是状态机复制,但是要复杂的多,因为它不再是单向的复制,姑且可以参考Git的日志同步。

还有一种叫做集群模型,大多数集群模式更类似与一主多从,由master节点对外提供服务,它可以对外表现出强一致性。不过也有不这样的,比如说redis的集群,清新脱俗,实现的是去中心化的集群。