「第二部:容器和微服务架构](16)微服务的回弹性和高可用性

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 「第二部:容器和微服务架构](16)微服务的回弹性和高可用性

处理意外故障是最难解决的问题之一,特别是在分布式系统中。开发人员编写的大部分代码都涉及异常处理,而这也是测试中花费最多时间的地方。这个问题比编写处理失败的代码更复杂。当运行微服务的机器出现故障时会发生什么情况?您不仅需要检测此微服务故障(这本身就是一个难题),而且还需要一些东西来重新启动您的微服务。


微服务需要对故障具有弹性,并且能够经常在另一台计算机上重新启动以获得可用性。这种弹性还可以归结为代表微服务保存的状态,微服务可以从中恢复此状态,以及微服务是否可以成功重新启动。换句话说,计算能力需要有弹性(进程可以随时重新启动)以及状态或数据的弹性(没有数据丢失,数据保持一致)。


在其他情况下,如在应用程序升级过程中发生故障时,弹性问题会变得更加复杂。使用部署系统的微服务需要确定它是可以继续前进到较新版本,还是可以回滚到以前的版本以保持一致的状态。需要考虑的问题包括是否有足够的机器可以继续前进,以及如何恢复以前版本的微服务。这需要微服务发出运行状况信息,以便整个应用程序和编排器可以做出这些决定。


此外,弹性还与基于云的系统的行为方式有关。如前所述,基于云的系统必须接受失败,并且必须尝试从失败中自动恢复。例如,在网络或容器故障的情况下,客户端应用程序或客户端服务必须具有重试发送消息或重试请求的策略,因为在许多情况下,云中的故障是部分的。本指南中的“实现弹性应用程序”一节介绍了如何处理部分故障。它通过使用诸如Polly之类的库来描述诸如指数退避重试或.NET Core中的断路器模式之类的技术,Polly提供了处理此主题的各种策略。


微服务中的健康管理与诊断


这看起来很明显,而且常常被忽略,但是微服务必须报告其健康状况和诊断。否则,从操作的角度看就没有什么洞察力了。跨一组独立服务关联诊断事件,并处理机器时钟偏差以了解事件顺序,这是一项挑战。正如您通过商定的协议和数据格式与微服务交互一样,需要标准化如何记录最终在事件存储中用于查询和查看的运行状况和诊断事件。在微服务方法中,关键是不同的团队在单一的日志格式上达成一致。需要有一种一致的方法来查看应用程序中的诊断事件。


健康检查


健康与诊断不同。运行状况是指微服务报告其当前状态以采取适当的操作。一个很好的例子是使用升级和部署机制来维护可用性。尽管由于进程崩溃或计算机重新启动,服务当前可能不正常,但该服务可能仍在运行。最不需要的是通过执行升级使情况变得更糟。最好的方法是先做一次调查,或者留出时间让微服务恢复。微服务中的健康事件可以帮助我们做出明智的决策,实际上,有助于创建自愈服务。


在本指南的“在ASP.NET核心服务中实现运行状况检查”部分中,我们将解释如何在您的微服务中使用新的ASP.NET运行状况检查库,以便它们可以向监视服务报告其状态以采取适当的操作。


您还可以选择使用一个优秀的开源库Beat Pulse,它可以在GitHub上作为NuGet包提供。此库还执行运行状况检查,但有一个转折点,它处理两种类型的检查:

  • 活动性:检查微服务是否活动,即它是否能够接受请求和响应。
  • 就绪性:检查微服务的依赖项(数据库、队列服务等)本身是否就绪,以便微服务可以执行它应该执行的操作。


使用诊断和记录事件流


日志提供有关应用程序或服务如何运行的信息,包括异常、警告和简单的信息消息。通常,每个日志都是一种文本格式,每个事件有一行,但异常也经常显示跨多行的堆栈跟踪。


在基于单片服务器的应用程序中,您可以简单地将日志写入磁盘上的文件(日志文件),然后使用任何工具对其进行分析。由于应用程序的执行仅限于固定服务器或VM,因此分析事件流通常不太复杂。然而,在一个分布式应用程序中,多个服务在一个编排器集群的多个节点上执行,能够关联分布式事件是一个挑战。


基于微服务的应用程序不应试图单独存储事件或日志文件的输出流,甚至不应尝试管理事件到中心位置的路由。它应该是透明的,这意味着每个进程只需将其事件流写入一个标准输出,该输出下面将由运行它的执行环境基础设施收集。这些事件流路由器的一个例子是Microsoft.Diagnostic.EventFlow,它从多个源收集事件流并将其发布到输出系统。这些可以包括开发环境或云系统(如Azure Monitor和Azure Diagnostics)的简单标准输出。还有很好的第三方日志分析平台和工具,可以搜索、警报、报告和监视日志,甚至是实时的,比如Splunk。


管理运行状况和诊断信息的编排器


创建基于微服务的应用程序时,需要处理复杂性。当然,一个microservice很容易处理,但是几十到几百个microservice类型和数千个microservice实例是一个复杂的问题。这不仅仅是为了构建您的微服务体系结构,您还需要高可用性、可寻址性、可恢复性、运行状况和诊断功能,如果您想要有一个稳定和内聚的系统。


图22 微服务平台是应用程序健康管理的基础


图22所示的复杂问题很难自己解决。开发团队应该专注于用基于微服务的方法解决业务问题和构建定制应用程序。他们不应该专注于解决复杂的基础设施问题;如果他们这样做了,任何基于微服务的应用程序的成本都将是巨大的。因此,有一些面向微服务的平台(称为编排器或微服务集群)试图解决构建和运行服务以及高效使用基础设施资源的难题。这减少了构建使用微服务方法的应用程序的复杂性。


不同的编排器听起来可能类似,但它们提供的诊断和运行状况检查在功能和成熟度方面有所不同,有时取决于操作系统平台,如下一节所述。


对于基于Spring Cloud和Kubernets的微服务平台,我们会在后续的章节详细介绍。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
10天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
9天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
23 1
服务架构的演进:从单体到微服务的探索之旅
|
7天前
|
消息中间件 监控 安全
后端架构演进:从单体到微服务####
在数字化转型的浪潮中,企业应用的后端架构经历了从传统单体架构到现代微服务架构的深刻变革。本文探讨了这一演进过程的背景、驱动力、关键技术及面临的挑战,揭示了如何通过微服务化实现系统的高可用性、扩展性和敏捷开发,同时指出了转型过程中需克服的服务拆分、数据管理、通信机制等难题,为读者提供了一个全面理解后端架构演变路径的视角。 ####
24 8
|
8天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
31 5
|
9天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理策略
随着云原生技术的不断成熟,微服务架构已成为现代应用开发的主流选择。本文探讨了在云原生环境下实施微服务治理的策略和方法,重点分析了服务发现、负载均衡、故障恢复和配置管理等关键技术点,以及如何利用Kubernetes等容器编排工具来优化微服务的部署和管理。文章旨在为开发者提供一套实用的微服务治理框架,帮助其在复杂的云环境中构建高效、可靠的分布式系统。
26 5
|
9天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
13天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
57 6
|
13天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
29 1
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
下一篇
无影云桌面