其他
如何平衡存储系统的一致性和可用性?
导读:本文从高可用视角来重新审视数据一致性问题,讨论如何在可用性和一致性上取得相对的平衡。
作者:李玥
来源:大数据DT(ID:hzdashuju)
以不同格式或数据结构存储多个副本。 在不同类型的外部存储中存储多个副本。 在本地磁盘或内存中缓存数据的副本。
仅仅是为了写代码的时候更方便地读取数据,就随意增加副本。比如,为了便于查询,将数据库中A表中的部分字段,在B表中也保存一份。 系统中存在多个外部存储,为了读写方便,在每个外部存储都保存一份数据副本。比如,集群的元数据保存在ZooKeeper中,为了方便管理控制台操作,也在MySQL中保存一份同样的数据。 不考虑系统的性能实际要求,为了让系统速度更快一些,在Redis和内存中缓存数据。
重试指的是,让失败的节点重新执行更新操作。如果重试成功,系统将重新回到一致的状态。 回滚指的是,让之前更新成功的节点执行回滚操作,回到更新前的状态,也可以让系统重新回到一致状态。
幂等性,可以保证多次重试同一个更新操作不会改变状态的正确性; 原子性,则可以避免在更新具有复杂数据结构的状态失败时,只更新了部分状态的尴尬局面。
基本可用是对可用性的妥协,指的是在故障时,系统以响应时间变长、部分功能不可用或者部分请求失败为代价,换取整个系统仍然可以提供基本的服务能力。 软状态和最终一致则是对一致性的妥协。具体地说,就是牺牲了原子性和隔离性,允许系统内出现外部可见的“中间状态”,但需要在短时间内恢复为一致状态,达成最终一致。
推荐语:基于实战案例系统讲解电商系统的存储设计,详细分析不同规模存储系统的构建方法。
干货直达👇
更多精彩👇
在公众号对话框输入以下关键词查看更多优质内容!
读书 | 书单 | 干货 | 讲明白 | 神操作 | 手把手大数据 | 云计算 | 数据库 | Python | 爬虫 | 可视化AI | 人工智能 | 机器学习 | 深度学习 | NLP5G | 中台 | 用户画像 | 数学 | 算法 | 数字孪生
据统计,99%的大咖都关注了这个公众号👇