php - 如何理解分布式存储中的分片和副本两者之间的区别与联系?

查看:92
本文介绍了php - 如何理解分布式存储中的分片和副本两者之间的区别与联系?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如题,我初次接触分布式的存储部署方案,副本我的理解就是一主多从(在单个集群来讲)的概念,主节点承担写入操作,所有副本节点或称从库承担读操作。然后每个节点又可以进行分片存储?水平扩展到多台机子上?
是不是这意思?
我的理解还是很模糊的。希望哪个大神给我讲一下,讲清楚一点。

解决方案

不同的技术所说的分片可能并不是指的同样的东西,比如跟Oracle技术人员说分片,跟MongoDB技术人员说的分片就是两个不同的东西。我仅从MongoDB技术的角度做如下解释,注意这些内容对于其他技术不一定适用。
所谓分片,是把一份完整的数据按一定的条件划分成不同的几份,由不同的服务器来存储划分之后的内容,每份内容就叫做一个。这个划分条件在MongoDB中叫做片键。对于外界来说,显然不希望知道数据是从哪里来,分了多少片,因为对于应用来说,需要看到的是完整的一份数据,而不希望自己的业务逻辑中掺杂了去哪里取这份数据这样与业务无关的问题。所以在分片的同时,MongoDB提供了mongos作为对外接口,使得数据在物理上分开存储和处理,在逻辑上还是完整的一份。
有了分片将数据分布在不同的物理设备上,就引入了更多的设备为同一份数据服务。无论机率如何,每台设备都有一定的机会出现故障。假设每台机器出现故障的机会x%是一样的,随机参与服务的机器数量增多,整个集群出现故障的机会就会随着参与服务的设备数量n增加而增加,所以对于集群整体而言,出现故障的机率就是x% * n。也就是说,集群中的任何一个设备出现故障,整个集群就处于不健康的状态从而影响对外界的服务。这就是我们常说的

在分布式环境下故障是常态

为了解决这个问题就需要冗余,也就是这里所说的副本。它的目的在于,当集群中的一台设备出现问题的时候,会有一台跟他持有相同数据设备马上代替它的位置对外界提供服务,从而从外界看起来整个集群仍然是健康的。当然副本的存在同时也提供了一个额外的用处,就是读写分离。但是要记住读写分离只是副本的副业,它的主业是提供高可用。

解释到这里你应该已经了解分片和副本各自的用处了,那么先有谁再有谁的问题能够理解了吗?不妨自己尝试分析一下。

这篇关于php - 如何理解分布式存储中的分片和副本两者之间的区别与联系?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆