加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

一文告诉你如何构建健壮的分布式系统

发布时间:2022-05-04 11:06:37 所属栏目:系统 来源:互联网
导读:我之前在这个博客上写过什么是分布式系统,以及它们如何以不得不处理更复杂的系统设计为代价为我们提供巨大的可扩展性。让我们讨论一下如何使分布式系统对随机故障具有弹性,随着系统变大,这种随机故障会变得越来越普遍。 系统理论告诉我们,系统中相互关联
  我之前在这个博客上写过什么是分布式系统,以及它们如何以不得不处理更复杂的系统设计为代价为我们提供巨大的可扩展性。让我们讨论一下如何使分布式系统对随机故障具有弹性,随着系统变大,这种随机故障会变得越来越普遍。
 
  系统理论告诉我们,系统中相互关联的部分越多,发生大故障的可能性就越大。因此,要构建一个弹性系统,我们需要减少连接数量。如果无法做到这一点,我们需要实施“临时”切断与故障部分的连接的方法,以便错误不会级联到其他部分。
 
  每个组件都必须假设每个其他组件都会在某个时候发生故障,并决定当这些故障发生时它会做什么。
 
  最后,我们需要在系统中建立一些缓冲区——一些放松的方法,如果不消除对它的要求,以便有松弛来处理意外情况。
 
  1 最小化组件间依赖
  分布式系统的组件相互通信以获取数据或功能。在这两种情况下,我们都可以通过将数据/功能推送到调用组件而不是远程访问来减少连接需求。
 
  构建大规模分布式系统迫使我们放弃标准软件工程的许多“最佳实践”。要记住的关键是,当我们采用分布式系统的复杂性来实现可扩展性时,我们还需要尽可能地控制“分布”。
 
  1.1 重复数据
  如果我们经常从另一个组件访问一些数据,我们可以在我们的组件中复制它,而不必在运行时检索它。这可以大大减少运行时依赖并帮助改善我们组件的延迟。
 
  经常访问但有一定规律性变化的数据可以通过定期缓存刷新来临时缓存。更改频率更低或从不更改的数据(例如客户姓名)可以直接存储在我们的组件中。如果/当这些数据发生变化时,我们可能需要做一些额外的工作,但是这种增加的小开销通常是值得的,因为它可以提高弹性。
 
  1.2 非规范化数据
  非规范化是在组件内发生的一种特殊形式的重复。如果我们使用关系数据存储,我们可以通过在主实体中复制数据来降低查看多个实体的成本。本地化分散数据以获得更好性能的原则也适用于此。
 
  1.3 库
  为了减轻另一个组件的功能依赖性,我们可以将远程组件打包为库并将其嵌入到我们的组件中。这并不总是可能的(它可能是用其他语言编写的,或者太大而不能成为一个库)并且会带来一系列问题(功能的变化需要跨多个组件进行库升级),但是如果功能很关键并且经常被大规模访问,这是打破组件间连接并使其成为本地的可行方法。

  2 在系统中建立缓冲区
  2.1 异步通信
  消息总线之类的异步通信通道允许调用远程组件,而无需非常严格的 SLA 依赖。通过让被调用组件准备好而不是立即使用消息,系统对增加的工作负载的需求变得更加灵活。
 
  2.2 弹性配置
  可扩展性最终归结为充分利用可用硬件。但是,如果看到规模增长,让系统缓口气的一个简单方法是分配更多硬件。虽然这仅在我们能够承受的成本范围内是可行的,但它为我们提供了抵御不可预测的负载变化的最后一道防线。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读