【问题标题】:Why are Distributed Systems considered complex?为什么分布式系统被认为是复杂的?
【发布时间】:2023-03-22 12:22:01
【问题描述】:

我刚刚进入分布式系统的概念及其优缺点。在我正在阅读的书中,它讨论了分布式系统的复杂性并且它们本质上是复杂的,它列出了以下作为复杂性的潜在原因;

  • 异质性
  • 异步通信
  • 部分故障

我难以理解的是这些概念实际上包含什么(即什么是部分故障以及部分故障的原因是什么?),以及它们在现代系统中是如何处理的?中间件能否成功解决系统中的所有这三个复杂性问题?

【问题讨论】:

    标签: asynchronous distributed-computing middleware


    【解决方案1】:

    这个问题可以用很多词来回答,但我会尽量把它归结为要点:

    异构性是集成试图解决的主要问题之一。这是大多数分布式系统的固有特征,它指的是当您必须集成多个系统时,它们通常会:

    • 在不同的平台、不同的网络中;
    • 它们在集成方面的能力不同;
    • 数据存在差异,甚至涉及同一业务领域的数据;
    • 使用和支持不同(有时甚至被遗忘或不受支持)的技术和标准;
    • 拥有不同的所有者(由不同的部门、公司控制)。

    以上所有因素都增加了越来越多的复杂性。

    异步通信解决了无状态通信的一些问题,但引入了其他一系列复杂性,如果实施不当,很容易导致问题。这主要是因为您只能保证消息将在另一端成功接收,但无法保证何时处理操作(如果有的话)。因此,与同步任务相比,执行相互依赖的异步任务的编排要困难得多。

    部分失败 - 当您的进程涉及多个相互依赖的写入操作时,您需要确保ACID 事务。在涉及多个系统的情况下必须这样做更加困难,因为在异构分布式环境中,您无法像在单个系统的边界内那样轻松地实现通用事务上下文。通常,您需要在服务中实现相反的操作(或者更糟糕的是,实现two-phase commit),以便能够补偿进程中所有先前的写入,以防其中一项任务出现问题。

    希望这能让事情变得更清楚!

    【讨论】:

      【解决方案2】:

      分布式系统如此复杂的原因很简单:时间

      在分布式系统中,状态的完美同步变得不可能,因为在消息离开一个服务器的点和它到达其预期目的地的点之间必须经过一些时间。除此之外,网络是一种更加不可靠的通信媒介,这意味着消息可能永远不会成功。

      缺乏完美的时间同步意味着不可能对事件的顺序做出绝对的假设。例如,在高度可用的分布式数据库中,如果写入同一资源的两个请求几乎同时到达两个不同的服务器,则无法确定这些事件的绝对顺序。因此,分布式系统必须使用逻辑时间和冲突解决的近似值来解决这些类型的事件顺序问题。

      【讨论】:

        【解决方案3】:

        部分失败 - 在事务涉及许多客户端(@2 或更多)的情况下,在发出一个锁的复杂性就像死锁的情况一样。当锁管理器尝试检测、避免或阻止系统可能部分失败导致整个进程回滚。

        【讨论】:

          猜你喜欢
          • 2017-03-20
          • 1970-01-01
          • 2010-10-01
          • 1970-01-01
          • 2020-05-19
          • 1970-01-01
          • 2012-09-27
          • 2021-09-09
          相关资源
          最近更新 更多