分布式数据存储
23、 CAP 理论
组成
- C(Consistency ,一致性) 所有节点在同一时刻的数据是相同的
- A(Availability ,可用性) 是指系统提供的服务一直处于可用状态,对于用户的请求可即时响应
- Partition Tolerance 是指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求
内容
CAP 理论指的就是,在分布式系统中 C、A、P 这三个特征不能同时满足,只能满足其中两个
选择策略
保CA 弃P | 保CP 弃A | 保AP 弃C | |
---|---|---|---|
满足特性 | 一致性、可用性 | 一致性、分区容错性 | 可用性、分区容错性 |
使用场景 | 单击 | 要求数据强一致性的场景,比如银行、金融等 | 要求及时响应用户,但对数据一致性要求较低的场景,比如电商中的商品查询等 |
组件或者系统 | 单点的传统关系型数据库DBMS等 | Redis,HBase,Zookeeper | Eureka,CoachDB(文档数据库),Cassandra(NoSQL数据库),DynamoDB(亚马逊key-value模式的存储平台) |
保CA弃P
在分布式系统中,现在的网络基础设施无法做到始终保持稳定,网络分区(网络不连通)难以避免。牺牲分区容错性 P,就相当于放弃使用分布式系统。
保CP 弃A
一个保证 CP 而舍弃 A 的分布式系统,一旦发生网络分区会导致数据无法同步情况,就要牺牲系统的可用性,降低用户体验,直到节点数据达到一致后再响应用户。
保AP 弃C
网络分区出现后,各个节点之间数据无法马上同步,为了保证高可用,分布式系统需要即刻响应用户的请求
24、 分布式数据存储系统之三要素
顾客(数据生产者 / 消费者)
顾客可以生产和消息数据,相当于分布式存储系统中的应用程序
数据分类
- 结构化数据:是数据关联较大、格式固定
- 半结构化数据:指非关系模型的,有基本固定结构模式的数据,其特征是数据之间
关系比较简单,如HTML - 非结构化数据:数据之间关联不大,没有固定模式的数据,如文本
导购(数据分片索引)
数据分片
数据分片技术,是指分布式存储系统按照一定的规则将数据存储到相对应的存储节点中,或者到相对应的存储节点中获取想要的数据
作用
- 降低单个存储节点的存储和访问压力
- 快速找到数据所在的存储节点,从而大大降低搜索延迟,提高用户体验。
方法
- 数据特征分片
- 数据范围分片
- 哈希分片
- 一致性哈希分片
数据复制
是将数据进行备份,以使得多个节点存储该数据
主备方式保证可靠性
货架(数据存储)
货架是用来存储数据的
分类
- 分布式数据库
- 通过表格来存储结构化数据
- MySQL Sharding、Microsoft SQL Azure、Google Spanner、Alibaba OceanBase
- 分布式键值系统
- 通过键值对来存储半结构化数据
- Redis、Memcache
- 分布式文件系统
- 通过文件、块、对象等来存储非结构化数据
- Ceph、GFS、HDFS、Swift
25、数据分布方式之哈希与一致性哈希
此处的数据分布主要是指 数据分片
设计原则
- 分布式均匀性
- 不同存储节点中存储的数据要尽量均衡,用户访问也要做到均衡
- 数据稳定性
- 当存储节点出现故障需要移除或者扩增时,数据按照分布规则得到的结果应该尽量保持稳定,不要出现大范围的数据迁移
- 节点异构性
- 不同存储节点的硬件配置可能差别很大,节点存储的数据和自己的硬件配置相匹配
- 隔离故障性
- 数据尽量存放在不同的故障域,比如不同的机房、不同的机架
哈希
- 核心思想
- 根据数据key值,通过哈希函数计算得到数据对应的存储节点
- 优缺点
- 只要哈希函数设置得当,可以很好的保证数据分布均匀性;
- 稳定性较差
- 使用场景
- 适合同类型节点且节点数量比较固定的场景
- 相关框架: Redis
一致性哈希
一致性哈希是指将存储节点和数据都映射到一个首尾相连的哈希环上,存储节点可以根据
IP 地址进行哈希,数据通常通过顺时针方向寻找的方式,来确定自己所属的存储节点
优缺点
- 保证数据稳定性
- 均匀性问题比较明显,对后继节点的负载会变大
使用场景
法比较适合同类型节点、节点规模会发生变化的场景
相关框架
Cassandra
带有限负载的一致性哈希
给每个存储节点设置了一个存储上限值来控制存储节点添加或移除造成的数据不均匀
优缺点
均匀性和稳定性都得到提升,
没有考虑节点异构性的问题,还是没做到数据的均匀分布
适合场景
比较适合同类型节点、节点规模会发生变化的场景
相关框架
Google Vimeo等公司的负载均衡项目,(Google Cloud Pub/Sub、HAProxy)
带虚拟节点的一致性哈希
核心思想
是根据每个节点的性能,为每个节点划分不同数量的虚拟节点,并将这些虚拟节点映射到哈希环中,然后再按照一致性哈希算法进行数据映射
和存储
优缺点
- 解决了节点异构性问题,还提高了系统的稳定性和均匀性
- 但引入的虚拟节点,增加了节点规模
适用场景
较适合异构节点、节点规模会发生变化的场景
相关框架
Memcached
26、分布式数据复制技术
数据复制技术实际就是指,如何让主备数据库保持数据一致的技术
同步复制技术
当用户请求更新数据时,主数据库必须要同步到备数据库之后才可给用
户返回,即如果主数据库没有同步到备数据库,用户的更新操作会一直阻塞
特点
保证了数据的强一致性,但牺牲了系统的可用性
适用场景
同步复制技术经常用于分布式数据库主备场景或对数据一致性有严格要求的场合,比如金融、交易之类的场景。
典型框架: MySQL 主从全同步复制
异步复制技术
当用户请求更新数据时,主数据库处理完请求后可直接给用户响应,
而不必等待备数据库完成同步,即备数据库会异步进行数据的同步,用户的更新操作不会因为
备数据库未完成数据同步而导致阻塞
特点
这种方式保证了系统的可用性,但牺牲了数据的一致性
适用场景
应用在对用户请求响应时延要求很高的场景,比如直接服务用户的网站或者APP后台的数据库或缓存
典型框架
MySQL 、Redis 、Oracle
半同步复制技术
用户发出写请求后,主数据库会执行写操作,并给备数据库发送
同步请求,但主数据库不用等待所有备数据库回复数据同步成功便可响应用户,也就是说主
数据库可以等待一部分备数据库同步完成后响应用户写操作执行成功。
常用方案
- 当主数据库收到多个备数据库中的某一个回复数据同步成功后,便可给用户响
应写操作完成; - 主数据库等超过一半节点(包括主数据库)回复数据更新成功后,再给用户
响应写操作成功。
适用场景
多数分布式系统采用版同步复制技术,既能对数据进行保护,又能有效提高系统性能
典型框架
MySQL、Zookeeper、Cloud SQL Server、Etcd、Oracle
知识扩展
- MySQL 数据库集群,就支持全同步复制、异步复制和半同步复制三种模式
- Oracle 数据库 三种模式
- 最大保护模式
- 要求主数据库必须完成至少一个备数据库的数据同步才可成功返回给客户端,采用的是半同步复制技术中的第一种方式
- 最大性能模式
- 对于写请求,只要主数据库执行成功即可返回给客户端,采用的是异步复制技术。这种方式极大地提高了系统的可用性,但一致性难以保证。
- 最大可用性模式
- 介于最大保护模式和最大性能模式两者之间。这种模式是指,系统在
通常情况下采用最大保护模式,但当主备之间出现网络故障时,切换为最大性能模式,
等到网络恢复后,备数据库再进行数据同步
- 介于最大保护模式和最大性能模式两者之间。这种模式是指,系统在