如题,我初次接触分布式的存储部署方案,副本我的理解就是一主多从(在单个集群来讲)的概念,主节点承担写入操作,所有副本节点或称从库承担读操作。然后每个节点又可以进行分片存储?水平扩展到多台机子上?
是不是这意思?
我的理解还是很模糊的。希望哪个大神给我讲一下,讲清楚一点。
如题,我初次接触分布式的存储部署方案,副本我的理解就是一主多从(在单个集群来讲)的概念,主节点承担写入操作,所有副本节点或称从库承担读操作。然后每个节点又可以进行分片存储?水平扩展到多台机子上?
是不是这意思?
我的理解还是很模糊的。希望哪个大神给我讲一下,讲清楚一点。
分片是本来一个实例存了234提供业务读写,现在分为三个实例分别存了2、3、4分别提供业务读写
副本是本来一个实例存了234提供业务读写,现在为这个实例加了若干从节点,每个从节点都存了234,原节点为主提供写服务,也可以提供读服务,其他从节点实时同步主节点数据,并提供读服务。
两者都是为了分担业务压力而来,分片的读写都分散了,副本分担读压力。
2 回答2.5k 阅读✓ 已解决
2 回答3.4k 阅读
5 回答1.5k 阅读
2 回答1.1k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
不同的技术所说的“分片”可能并不是指的同样的东西,比如跟Oracle技术人员说“分片”,跟MongoDB技术人员说的“分片”就是两个不同的东西。我仅从MongoDB技术的角度做如下解释,注意这些内容对于其他技术不一定适用。
所谓分片,是把一份完整的数据按一定的条件划分成不同的几份,由不同的服务器来存储划分之后的内容,每份内容就叫做一个
片
。这个划分条件在MongoDB中叫做片键
。对于外界来说,显然不希望知道数据是从哪里来,分了多少片,因为对于应用来说,需要看到的是完整的一份数据,而不希望自己的业务逻辑中掺杂了”去哪里取这份数据”这样与业务无关的问题。所以在分片的同时,MongoDB提供了mongos
作为对外接口,使得数据在物理上分开存储和处理,在逻辑上还是完整的一份。有了分片将数据分布在不同的物理设备上,就引入了更多的设备为同一份数据服务。无论机率如何,每台设备都有一定的机会出现故障。假设每台机器出现故障的机会
x%
是一样的,随机参与服务的机器数量增多,整个集群出现故障的机会就会随着参与服务的设备数量n
增加而增加,所以对于集群整体而言,出现故障的机率就是x% * n
。也就是说,集群中的任何一个设备出现故障,整个集群就处于不健康的状态从而影响对外界的服务。这就是我们常说的为了解决这个问题就需要冗余,也就是这里所说的
副本
。它的目的在于,当集群中的一台设备出现问题的时候,会有一台跟他持有相同数据设备马上代替它的位置对外界提供服务,从而从外界看起来整个集群仍然是健康的。当然副本的存在同时也提供了一个额外的用处,就是读写分离。但是要记住读写分离只是副本的“副业”,它的“主业”是提供高可用。解释到这里你应该已经了解分片和副本各自的用处了,那么先有谁再有谁的问题能够理解了吗?不妨自己尝试分析一下。