• 数据库或者分布式文件系统如何维护数据的一致性


    分布式存储解决的是单机存储的性能, 单点故障问题, 容量一开始到还在其次, 但随着应用规模的发展, 要解决容量也得必须分布式了.

    • 分布式存储解决容量问题即可扩展性的方式, 就是数据分片. 可扩展性是分布式的已经解决的问题, 任何关于分布式存储的现存问题的讨论, 都不会再涉及可扩展性.
    • 数据分片也能部分的解决性能问题. 而解决性能问题的方法还包括数据复制.
    • 分布式存储解决单点故障问题的手段, 也许是唯一的手段, 就是复制.
    • 而复制会带来一致性问题.

    鉴于解决容量问题的手段并没有引入新问题, 因而如果要实现一种分布式存储机制, 需解决或者需平衡的是性能(或者说可用性), 单点故障(或者说分区容忍性), 及一致性

    基础结构

    分层,一般是两到三层

    • 最底层分布式文件系统, 解决数据分块,复制, 读写等需求
    • 往上是数据结构层, 解决数据模型, CAP取舍等
    • 再往上是更高层API, 解决诸如事物等问题

    实现关注点

    数据分布策略

    考虑因素包括读写场景, 即随机还是顺序, 包括如何保证负载均衡从而提高性能等

    • 哈希分布, 一致性哈希等
    • 顺序分布

    一致性策略

    • 强一致性: 强一致性(即时一致性) 假如A先写入了一个值到存储系统,存储系统保证后续A,B,C的读取操作都将返回最新值
    • 弱一致性: 假如A先写入了一个值到存储系统,存储系统不能保证后续A,B,C的读取操作能读取到最新值。此种情况下有一个“不一致性窗口”的概念,它特指从A写入值,到后续操作A,B,C读取到最新值这一段时间。
    • 最终一致性: 最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证如果在A,B,C后续读取之前没有其它写操作更新同样的值的话,最终所有的读取操作都会读取到最A写入的最新值。此种情况下,如果没有失败发生的话,“不一致性窗口”的大小依赖于以下的几个因素:交互延迟,系统的负载,以及复制技术中replica的个数(这个可以理解为master/salve模式中,salve的个数),最终一致性方面最出名的系统可以说是DNS系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。
  • 相关阅读:
    linux C总结篇(进程)
    进程与线程的区分
    递归的两种思路
    Linux下git与github的一般使用
    文件读写和文件指针的移动
    文件的创建,打开与关闭
    一个简单脚本
    linux 三剑客命令(grep,sed ,awk)
    常用正则表达式
    PAT:1002. A+B for Polynomials (25) 部分错误
  • 原文地址:https://www.cnblogs.com/csxf/p/3667358.html
Copyright © 2020-2023  润新知