zoukankan      html  css  js  c++  java
  • CAP与BASE

    一、分布式系统设计的CAP理论:

    Consistency:整个分布式系统内的各节点里,数据必须保证强一致性。
    Avilability:整个分布式系统必须总能在有效的时间内给客户端正确的响应。
    Partitioning:整个分布式系统内部各节点若发生网络分区,系统仍能保证可用性和强一致性。

    通过论证,CAP三者不能同时兼得,最多只能兼得其二;

    理论上有CP、AP、CA三种选择;

    但在工程实践中,P是分布式系统要满足的前提,不能放弃,否则一旦网络分区,系统就可能不可用或数据不一致;

    所以实际可选的策略只有CP、AP两个;

    场景示例:用户提交订单,后台创建订单、然后向用户发送短信提醒。

    套上业务场景分别说明:

    1. CP:用户提交订单后,订单创建、短信发送都成功,才给用户界面返回成功提示。使用XA做事务协调者,保证强一致性;一致性要求,小并发。

    2. AP:订单创建成功后,立即返回给用户端,通常是异步地调用短信发送逻辑;避免过多的占用资源,尽量避免调用链路的阻塞;用户响应更快,体验更佳。

    短信这种非核心数据,难道就不管了吗,当然不是!

    二、BASE理论

    在【AP】策略下,如何【尽可能】地实现数据的一致性。

    Basically Available(基本可用):快速实现用户的基本价值与诉求。(“创建订单”后立即返回给用户端,就是基本可用的体现)
    Soft state(软状态):在业务操作没有最终完成前的中间状态。(订单创建后,短信记录未发或未发送成功前的过度状态)
    Eventually consistent(最终一致性):通过技术手段,过一段时间后才让数据保持完整的状态。

    最终一致性可以通过下列手段来达到:

    • 重试:通信失败,就重试,来保证一致。(MQ就提供了重试机制)
    • 数据校对:周期性地进行多端数据对账和匹配,发现未对齐的就补偿。
    • 人工介入:链路监控,可支持数据回放,排查出问题后人工补录。
    学习使我充实,分享给我快乐!
  • 相关阅读:
    t
    溢出
    https://stackoverflow.com/questions/45591594/fetch-does-not-send-headers
    显示在用户屏幕上的缩略图
    cache buffer
    LZW
    t
    指针悬挂
    使用Linux服务器来通过网络安装和激活Windows 7 —— 一些基本原理
    在C++中如何动态分配一个二维数组
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/15451041.html
Copyright © 2011-2022 走看看