如何平衡存储系统的一致性和可用性?
作者:李玥
以不同格式或数据结构存储多个副本。 在不同类型的外部存储中存储多个副本。 在本地磁盘或内存中缓存数据的副本。
仅仅是为了写代码的时候更方便地读取数据,就随意增加副本。比如,为了便于查询,将数据库中A表中的部分字段,在B表中也保存一份。 系统中存在多个外部存储,为了读写方便,在每个外部存储都保存一份数据副本。比如,集群的元数据保存在ZooKeeper中,为了方便管理控制台操作,也在MySQL中保存一份同样的数据。 不考虑系统的性能实际要求,为了让系统速度更快一些,在Redis和内存中缓存数据。
重试指的是,让失败的节点重新执行更新操作。如果重试成功,系统将重新回到一致的状态。 回滚指的是,让之前更新成功的节点执行回滚操作,回到更新前的状态,也可以让系统重新回到一致状态。
幂等性,可以保证多次重试同一个更新操作不会改变状态的正确性; 原子性,则可以避免在更新具有复杂数据结构的状态失败时,只更新了部分状态的尴尬局面。
基本可用是对可用性的妥协,指的是在故障时,系统以响应时间变长、部分功能不可用或者部分请求失败为代价,换取整个系统仍然可以提供基本的服务能力。 软状态和最终一致则是对一致性的妥协。具体地说,就是牺牲了原子性和隔离性,允许系统内出现外部可见的“中间状态”,但需要在短时间内恢复为一致状态,达成最终一致。
延伸阅读👇
干货直达👇
这10个功能模块,手把手教你从零设计电商系统
关键词
分布式系统
问题
系统中
更新操作
情况下
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。