• DDIA读书笔记第八章——分布式系统的麻烦


    分布式系统中的两个主要问题:网络和时钟

    故障与部分失效

    分布式系统中的节点一定会失败,而且大多数时间是部分失效:即大部分组件是正常工作的,少部分失效。
    并且分布式系统中确定组件失效也极其困难
    用不可靠的组件构建可靠系统

    不可靠的网络

    1、异步网络
    2、只能通过超时来判断组件是否失效,但是超时时间很难确定,太长:系统RTO恢复过长;太短:容易造成错误检测,在高负载下可能进一步加重系统负载,造成雪崩

    不可靠的时钟

    使用普通硬件,很难得到一个准确的始终
    时钟漂移

    分布式系统中依赖时钟同步

    有序事件的时间戳

    系统依赖时间戳来决定有序事件的执行顺序,但是如果时钟漂移,会导致执行顺序错乱。这也是LLW的冲突解决策略,发生于多领导者写入或者无主写入。
    可以用逻辑时钟、全局时钟生成器、高精尖硬件时钟(google truetime API)等三种方式来解决

    全局快照的同步始终

    在创建快照时,后续的MVCC依赖于创建快照的准确时间,来确定后续读写的版本

    进程暂停

    进程在执行任何一条语句时可能会停顿(尤其是虚拟化的容器中,可以 挂起(suspend) 虚拟机(暂停执行所有进程并将内存内容保存到磁盘)并恢复(恢复内存内容并继续执行)。这个暂停可以在进程执行的任何时候发生,并且可以持续任意长的时间))。
    这样在分布式系统中依赖时间判断采取执行的动作就可能会有很多并发问题

    知识、真相与谎言

    既然分布式系统中网络不可靠、时钟不可靠,那么怎么得到一个相对可靠的真相:多数派

    领导者和锁

    分布式系统中的很多场景需要要求某些东西唯一:
    1、中心化结构中的领导者
    2、分布式锁

    分布式锁

    假如A服务获取到锁,并开启一个session,如果A进程停顿,导致session过期,之后,锁被B服务获取到,此时A服务停顿结束,认为它仍然持有锁,即系执行,就会错误。
    解决方法是“防护令牌”:A除了session,还有token,每次A执行时,需要校验token,token与锁的有效性绑定

  • 相关阅读:
    29. 一道简单背包题
    电脑重装系统后如何给系统磁盘扩容空间
    Redis -- 基本知识说明
    机器学习 | 模型评估和选择 各种评估指标总结——错误率精度-查准率查全率-真正例率假正例率 PR曲线ROC曲线
    20220725树状数组入门反思
    python分支结构的花样玩法(一)
    VMware设置Linux网络
    Java修仙传之神奇的ES(基础使用)
    【洛谷】P2803 学校选址II
    北京冬奥一项AI黑科技即将走进大众:实时动捕三维姿态,误差不到5毫米
  • 原文地址:https://blog.csdn.net/yh88623131/article/details/127502493