别再用老旧架构了!单元化构建超强弹性和容错系统!

0 关键收获

  • 单元化架构提高了微服务的弹性和容错性。
  • 可观察性对于开发和运营单元化架构至关重要。
  • 单元路由器是单元基础架构的关键组件,它需要快速响应单元可用性和健康变化。
  • 要成功采用单元化架构,需要全面和综合的方法来实现可观察性。
  • 单元化架构利用与微服务相同的可观察性支柱,但需要定制以适应这种架构特有的元素。

在过去的几年中,单元化架构作为一种新兴的范式,公司如:

  • Slack(将最关键的用户服务从单体架构迁移到单元化架构)
  • Flickr(采用联邦方法在许多服务的分片或集群上存储用户数据)
  • Salesforce(设计了一个基于50个节点的自我包含功能的pod解决方案)
  • 以及Facebook(提出了由集群、元数据存储和Zookeeper中的控制器组成的服务单元称为单元的构建块)

他们使用这些架构来解决弹性和容错的挑战。受欢迎的原因包括故障隔离、可扩展性提高、维护简化、容错性增强、灵活性和成本效益。

在实现弹性和容错的旅程中,基于单元架构的倡导者依赖于可观察性,这在补充实现中发挥了关键作用。对于Interact来说就是这种情况,它是最早记录可观察性对保证健康的单元化架构至关重要的公司之一。Interact的工程团队使用可观察性来提供对系统行为的深入洞察,使他们能够主动发现问题,并在故障发生时促进更快的恢复。具体来说,他们使用了每个单元托管的最大客户端数量和每个单元每天的最大请求数量来创建新的基础架构以及现有架构。

本文深入探讨了采用单元化架构的弹性和容错优势,重点关注可观察性方面。

  • 第一部分回答了一个常见问题:如果微服务已经具有弹性和容错性,为什么还要使用单元化架构?
  • 有了这个解释,第二部分专注于可观察性以及分析单元化架构的输入和输出的考虑因素
  • 最后,它介绍了实现所需的最佳实践和收获,以便早期发现问题,快速诊断问题,并做出明智的决策,以增强弹性和容错性。

1 为啥还用单元化架构?

微服务已具有弹性和容错性,为啥还用单元化架构?微服务确实降低了单个错误可能使整个系统崩溃的风险,因为它们使用更小的独立部署单元。这种范式允许微服务中的故障不影响整个应用程序。然而,处理服务间通信的复杂性也降低了弹性和容错水平也是一个现实。虽然微服务非常适合处理以模块化和管理性为重点的大型企业应用程序,但在需要极端模块化、可扩展性和资源效率的场景中,单元化架构提供了优势。这就是为什么Tumblr,一个从初创公司到几个月内非常成功的公司,选择从单体架构迁移到单元化架构而不是微服务。可扩展性是他们的优先事项,因为他们不得不在处理每月流量大幅增加的同时发展他们的基础设施。

1.1 单元化策略:高可用性以满足快速增长的需求

选择基于微服务的架构需要仔细分析其优点和缺点之间的平衡。虽然它提供了改进的可扩展性、容错性和更容易的操作,但它也引入了实现和管理的复杂性。然而,单元化架构非常适合优先考虑高可用性、需要快速增长或能够缩放单个组件和隔离故障的系统。

单元化架构不是万能解决方案,而是一种与特定业务和技术需求一致的战略选择。下图说明基于微服务的架构如何将更大的系统分割成包含有界上下文业务领域的组件。

基于微服务的架构:

下图显示了单元化架构如何简化与这些服务之间的通信复杂性,其中每个单元都是相同的,并且表示一个独立缩放的整个栈

单元化架构:

关于上图,实现单元化架构有两种视角:

  • 一种是单元是不可变的组件,共同提供服务

    在第一种视角中,单元可以相互通信。

  • 另一种是每个单元都是相同的,并且代表一个整个服务

    第二种视角中,单元作为完整的单元独立构建、部署和管理,因为单元之间没有通信。

单元化架构可以提供改进的弹性和容错性,但操作员如何确定系统是否提供了这些好处?答案是可观察性。

2 观察单元化架构的考虑因素

单元化架构通过隔离、自主和复制的核心原则提供了构建弹性系统的健壮方法。每个单元独立操作,管理其资源并自主做出决策。数据和关键服务在单元内复制以增强可用性。

这些架构在多个区域或数据中心分布单元,以确保弹性和容错性,保护免受区域性中断的影响。连续的健康检查和监控可以及早发现故障,而断路器可以防止级联故障。负载均衡确保高效流量分配,优雅降级优先考虑在部分故障期间的重要功能。混沌工程通过模拟故障定期测试弹性,识别弱点。

可观察性是理解当前实现状态和内部工作状态的最先进工具。尽管没有它系统也可以工作,但收集、处理、聚合和显示实时定量指标可以提高弹性和容错性。这正是将其作为网站可靠性工程中的一个原则的原因之一。

2.1 可观察性是优秀架构的支柱

除了作为理解系统行为的策略外,可观察性对于实现良好架构的目标至关重要,特别是在运营卓越、可靠性和性能效率方面。图3说明了良好架构框架的共同支柱,并使它们的可观察性关系可见。在运营卓越方面,可观察性提供了理解系统性能、识别潜在问题以及做出优化决策所需的洞察。为了实现性能效率,可观察性使组织能够识别其系统中的瓶颈和低效,并采取行动提高性能并降低成本。最后,通过监控系统行为和及早发现异常,可观察性有助于防止故障并最小化停机时间。

良好架构框架 + 可观察性:

在观察单元化架构的过程中,第一步是定义目标并确定适合评估弹性和容错水平的指标,如平均故障间隔时间(MTBF)、平均修复时间(MTTR)、可用性和恢复时间目标(RTO)。一旦指标清晰,下一个活动是提供结合日志记录、指标收集、跟踪和事件跟踪的仪器机制,以收集相关数据。然后建立强大的基础设施,以高效地收集和聚合这些数据。此时,观察员通常将收集的数据存储在适当的存储库中,如时间序列数据库,并通过过滤、转换和丰富处理它。分析工具和可视化提供洞察力,识别模式,并检测异常。这些洞察力被整合到开发和操作工作流程中,建立反馈循环,推动系统设计和性能改进。最后,该过程根据反馈和不断演变的要求进行迭代细化。图4完整地说明了整个过程。

2.2 为单元化架构定制可观察性

基于单元架构的可观察性需要定制方法来解决这种分布式系统设计所呈现的独特挑战和机会。考虑到可观察性是关于监控、跟踪和日志记录,单元感知仪器包括在单元级别收集指标,即通常捕获资源利用率(CPU、内存、网络)、请求延迟、错误率和与每个单元功能相关的自定义业务指标。分布式跟踪是关于实现跟踪以跟踪跨单元边界的请求,提供对交互流的洞察,并确定瓶颈。最后,日志聚合应该来自各个单元到一个集中的系统,允许跨整个架构进行相关性和分析。

第二个考虑因素是创建针对每个单元的特定功能和KPI量身定制的单元级仪表板,使适当的监控和故障排除成为可能。有了这种配置,基于单元特定阈值和异常的单元特定警报确保及时通知影响单个单元的问题。

第三个与可观察性最佳实践相关的考虑因素是需要一个独特的项目,将来自各种单元级可观察性工具的数据集成到一个集中的平台中,以进行整体监控和分析。这使得利用集中平台跨单元相关事件和指标,揭示依赖关系和潜在的级联故障变得更加容易。

针对单元化架构的可观察性提出的框架:

最后一个考虑因素是单元隔离,它测试各个单元以识别特定于其功能的的性能瓶颈和故障模式。在这个考虑因素中,混沌实验预计将被设计和开发,以允许在单元级别进行受控中断(例如,网络延迟、资源限制),以评估弹性并识别弱点。

通过实施这些实践,组织可以获得对其基于单元架构行为的深入了解,实现主动监控、快速故障排除和改进的整体系统可靠性和性能。始终记住,单元本身的组成可能因业务而异,这可能是一个优势,因为多样性正是基于单元架构的好处之一。

3 路由层咋提供弹性、容错性和可观察性

除了单元和控制平面之外,单元路由在提供单元化架构的弹性和容错性方面至关重要。它的任务是根据分区键将请求分发到正确的单元,并向客户端呈现一个单一的端点。根据DoorDash的说法,这个组件提供了包括在服务跨可用性区域不均匀分布时保持流量平衡在内的多种好处。这使得动态设置pods之间的流量权重成为可能,消除了手动操作,并减少了单个或多AZ故障的影响范围,这在容错和降低流量延迟方面至关重要,因为呼叫服务连接到更近的被调用者。

为了实现网络中的容错,路由层使用了一些机制,这些机制已被记录为提供弹性的创新解决方案。其中之一是路径冗余,路由协议发现并维护到目的地的多条路径;通过这种方式,如果主路径失败,流量将自动通过备用路径重新路由。另一种策略是快速重新路由,旨在快速检测故障并收敛到新的路由解决方案,最小化停机时间和服务中断;经典的负载均衡在多条路径上分配流量,防止拥塞并优化网络资源利用。最后,故障检测和恢复,一旦检测到故障,路由协议触发恢复过程以找到备用路径。

3.1 路由层在架构可观察性中的作用

由于单元化系统是分布式的,路由层也显著影响可观察性。由于它是一个集中操作单元的组件,它是提供整个系统健康和性能洞察的最佳候选者。从这个组件观察架构允许在网络的各个点进行流量模式、延迟和错误观察。这使得操作员能够准确定位瓶颈、识别失败的组件,并优化路由决策以获得更好的性能。

此外,路由层可以被仪器化以收集详细的指标和日志,为故障排除和根本原因分析提供有价值的数据。例如,跟踪请求在多个单元中的路径可以揭示延迟发生或错误起源的位置。这种细粒度的可见性对于维护复杂的单元化应用程序的可靠性和效率至关重要。

总之,基于单元架构中的路由层不仅负责指导流量,还作为可观察性的关键组件。监控和分析流量模式提供了对系统行为的有价值洞察,使主动故障排除和优化成为可能。这确保了单元化系统保持弹性和可扩展性,并在不同的工作负载下表现最佳。

4 为单元化架构提供弹性、容错性和可观察性的最佳实践

基于单元架构的可观察性对于维护系统健康和性能至关重要。一个基本的最佳实践是集中日志记录,将来自所有单元的日志聚合到一个统一的存储库中。这种整合简化了故障排除和分析,使操作员能够快速识别和解决整个系统的问题。结构化日志格式进一步提高了这一过程,使日志数据的高效查询和过滤成为可能。

4.1 指标和监控

指标和监控是可观察性的同等重要组成部分。收集有关单元性能、资源利用率和错误率的详细指标为系统行为提供了宝贵的洞察。根据这些指标设置仪表板和警报,可以主动识别异常和潜在瓶颈。像Grafana这样的可视化工具可以有效地显示这些指标,更容易发现可能表明潜在问题的趋势和模式。

4.2 分布式跟踪

分布式跟踪是理解请求流经基于单元架构的另一个重要实践。通过跟踪跨多个单元移动的请求,操作员可以准确定位性能瓶颈、延迟问题以及微服务交互中的故障。像Jaeger、Zipkin或AWS X-Ray这样的分布式跟踪工具可以帮助可视化这些复杂的交互,使诊断和解决单元间通信中出现的问题变得更加简单。

4.3 警报和事件管理

警报和事件管理是全面可观察性策略的一个组成部分。根据日志和指标中的预定义阈值或异常配置警报,可以及时通知潜在问题。这些警报可以通过各种渠道发送,如电子邮件和短信,或集成到像PagerDuty这样的事件管理平台中。拥有明确定义的事件管理流程,确保对警报的快速和有组织的响应,最小化停机时间和对整个系统的影响。

4.4 可观察性的全面方法

除了这些核心实践之外,采用全面的可观察性方法也是有益的。这包括定期审查和完善日志记录、监控和跟踪配置,以适应不断演变的系统需求。此外,将事件事后分析的反馈纳入考虑,可以帮助识别可观察性策略改进的领域。通过不断提升可观察性,组织可以确保其单元化架构保持弹性、性能良好且易于管理。

5 总结

本文由“[单元化架构:如何构建可扩展和弹性系统]”文章系列的一部分。在这个系列中,我们展示了一个发现之旅,并提供了对单元化架构的许多关键方面的全面概述和深入分析,以及将这种方法应用于现有和新架构的实用建议。

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化

  • 活动&券等营销中台建设

  • 交易平台及数据中台等架构和开发设计

  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化

  • LLM Agent应用开发

  • 区块链应用开发

  • 大数据开发挖掘经验

  • 推荐系统项目

    目前主攻市级软件项目设计、构建服务全社会的应用系统。

参考:

  • 编程严选网

    本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453509.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

改变函数调用上下文:apply与call方法详解及实例

目录 改变函数调用上下文:apply与call方法详解及实例 一、什么是 apply 方法? 1、apply 语法 2、apply 示例 二、什么是 call 方法? 1、call 语法 2、call 示例 三、apply 和 call 的共同与差异 1、apply 和 call 的共同点 2、apply…

centos7-网络模式选择NAT连接时遇到的问题

今天花了我一上午的时间,必须要记录一下。 新创建的虚拟机,选择的centos7-NAT的网路连接模式。 科普一下: 我选择的NAT模式, 然后改了 vi /etc/sysconfig/network-scripts/ifcfg-ens33文件的 source ~/.bashrc和reboot之后 执行service n…

nginx 快速入门

配置文件 nginx.conf 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机 #这一行表示这个server块监听的端口是80,只要有请求访问了80端口,此server块就处理请求listen 80;# 表示这个server块代表的虚拟主机的名字…

优雅的入参校验,Valid常用校验

更好的阅读体验:优雅的入参校验,Valid常用校验 对于前端传递的参数,正常情况下后端是要进行一些必要的校验,最简单的做法是用 if 效果是可以,但不优雅。使用 Validator 代替 if,就会优雅很多 ps&#xff…

重学SpringBoot3-Spring Data JPA简介

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-Spring Data JPA简介 1. 什么是 Spring Data JPA?2. Spring Data JPA 的核心概念2.1. 实体(Entity)2.2. Repository&…

SpringBoot整合mybatisPlus实现批量插入并获取ID

背景:需要实现批量插入并且得到插入后的ID。 使用for循环进行insert这里就不说了,在海量数据下其性能是最慢的。数据量小的情况下,没什么区别。 【1】saveBatch(一万条数据总耗时:2478ms) mybatisplus扩展包提供的:…

吴恩达深度学习(9)

经典的神经网络: 残差网络(ResNet) 太深的神经网络容易出现梯度消失与梯度爆炸等问题。 跳跃连接,能从一层中得到激活并将其传递给下一层,甚至更深的网络层。利用这个可以训练网络层很深很深的残差网络(R…

Go 1.19.4 命令调用、日志、包管理、反射-Day 17

1. 系统命令调用 所谓的命令调用,就是通过os,找到系统中编译好的可执行文件,然后加载到内存中,变成进程。 1.1 exec.LookPath(寻找命令) 作用: exec.LookPath 函数用于在系统的环境变量中搜索可…

海思hi3536c配置内核支持USB摄像头

linux内核版本:linux-3.18.20 配置步骤 进入Device Drivers 选择Multimedia support,并进入 选择Media USB Adapters,并进入 如下图,选择这几项: 保存退出,重新编译内核下载 内核更新后&#xff0c…

DIFFEDIT: DIFFUSION-BASED SEMANTIC IMAGE EDIT- ING WITH MASK GUIDANCE

https://arxiv.org/pdf/2210.11427 问题引入 针对的问题是输入text prompt完成对图片的编辑,基于的是T2I model;本文的方法不需要额外提供mask来将任务变为inpaint任务,而是可以自动的根据text prompt来提取出需要编辑区域的mask methods

支付域——支付背景

摘要 支付体系作为现代金融的重要组成部分,承担着资金流转与经济交易的关键职能。随着科技的发展,全球支付方式迅速演变,尤其是在中国,移动支付、互联网支付等新兴方式已广泛应用。传统的现金、银行卡支付逐渐被数字支付所取代,支付宝、微信支付等第三方支付机构成为主流…

计算机网络:数据链路层 —— 扩展共享式以太网

文章目录 共享式以太网共享式以太网存在的问题在物理层扩展以太网扩展站点与集线器之间的距离扩展共享式以太网的覆盖范围和站点数量 在链路层扩展以太网网桥的主要结构网桥的基本工作原理透明网桥自学习和转发帧生成树协议STP 共享式以太网 共享式以太网是当今局域网中广泛采…

Leetcode|24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II

24. 注意:涉及头节点的修改或者删除时,最好设置一个虚拟的头结点,方便简化代码,不必进行是否为头节点的的判断,简化code class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode* dummyHead new Li…

Adobe Acrobat DC 打印PDF文件,没有打印出注释的解决方法

adobe acrobat在打印的时候,打印不出来注释内容(之前一直可以,突然就不行),升级版本、嵌入字体等等都试过,也在Google找了半天和问了GPT也么找着办法。 无奈之下,自己通过印前检查,…

ASP.NET Core8.0学习笔记(二十一)——EFCore关系配置API

一、关系配置API概述 当我们需要指定一个字段作为外键,而这个外键又不符合以上四种约定时,就需要在IEntityTypeConfiguration实现类(对应的配置类)中使用Fluent API直接配置外键。理论上可以通过API直接指定一个属性,…

HTTP快速入门

HTTP报文结构 HTTP 协议主要由三大部分组成: ● 起始行(start line):描述请求或响应的基本信息; ● 头部字段(header):使用 key-value 形式更详细地说明报文; ● 消息正…

vue 页面导出gif图片 img 导出gif 超简单~

1.首先需要新建一个文件件 新建gif文件夹。这两个文件在文章最后面需要可自提 2.出gif分为两种情况 第一种情况 页面是img标签,直接导出图片作为gif 第二种情况 页面是div标签,需要导出div里面的图片作为gif 2.1页面是img标签,直接导出图…

[论文阅读]Distilling ChatGPT for Explainable Automated Student Answer Assessment

Distilling ChatGPT for Explainable Automated Student Answer Assessment http://arxiv.org/abs/2305.12962 简要概述 文章的背景是 教育领域的学生答题评估,传统的评估需要高成本的人工,随着CHATGPT的发展,研究人员发现这种能够有效处理…

嵌入式QT中基本工程模板分析

大家好,今天主要来分享一下,如何分析一下QT的工程代码文件。 第一:QT工程分析

CentOS安装NVIDIA驱动、CUDA以及nvidia-container-toolkit

0.提前准备 0.1.更新yum源(以阿里为例) 0.1.1 备份当前的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 0.1.2 下载新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base…