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

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
视觉智能开放平台,分割抠图1万点
NLP自然语言处理_基础版,每接口每天50万次
简介: 【10月更文挑战第10天】

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 总结

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
13天前
|
运维 持续交付 API
从零构建微服务架构:一次深度技术探索之旅####
【10月更文挑战第28天】 本文记录了作者在从零开始构建微服务架构过程中的深刻技术感悟,通过实战案例详细剖析了微服务设计、开发、部署及运维中的关键要点与挑战。文章首先概述了微服务架构的核心理念及其对企业IT架构转型的重要性,随后深入探讨了服务拆分策略、API网关选型、服务间通信协议选择、容器化部署(Docker+Kubernetes)、以及持续集成/持续部署(CI/CD)流程的设计与优化。最后,分享了在高并发场景下的性能调优经验与故障排查心得,旨在为读者提供一套可借鉴的微服务架构实施路径。 ####
52 3
|
11天前
|
负载均衡 Dubbo 算法
集群容错架构设计
集群容错架构设计
22 1
集群容错架构设计
|
3天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
25 4
|
12天前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
13天前
|
前端开发 安全 关系型数据库
秒合约系统/开发模式规则/技术架构实现
秒合约系统是一种高频交易平台,支持快速交易、双向持仓和高杠杆。系统涵盖用户注册登录、合约创建与编辑、自动执行、状态记录、提醒通知、搜索筛选、安全权限管理等功能。交易规则明确,设有价格限制和强平机制,确保风险可控。技术架构采用高并发后端语言、关系型数据库和前端框架,通过智能合约实现自动化交易,确保安全性和用户体验。
|
20天前
|
监控 API 持续交付
构建高效后端服务:微服务架构的深度探索
【10月更文挑战第20天】 在数字化时代,后端服务的构建对于支撑复杂的业务逻辑和海量数据处理至关重要。本文深入探讨了微服务架构的核心理念、实施策略以及面临的挑战,旨在为开发者提供一套构建高效、可扩展后端服务的方法论。通过案例分析,揭示微服务如何帮助企业应对快速变化的业务需求,同时保持系统的稳定性和灵活性。
46 9
|
20天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
55 6
|
19天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
24 4
|
18天前
|
前端开发 API UED
深入理解微前端架构:构建灵活、高效的前端应用
【10月更文挑战第23天】微前端架构是一种将前端应用分解为多个小型、独立、可复用的服务的方法。每个服务独立开发和部署,但共同提供一致的用户体验。本文探讨了微前端架构的核心概念、优势及实施方法,包括定义服务边界、建立通信机制、共享UI组件库和版本控制等。通过实际案例和职业心得,帮助读者更好地理解和应用微前端架构。