「第二部:容器和微服务架构](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日志并进行多维度分析。
相关文章
|
3天前
|
Kubernetes Cloud Native JavaScript
云原生之旅:从容器到微服务的探索之路
【9月更文挑战第15天】本文将带你踏上云原生技术的探险之旅,从容器技术的核心概念出发,逐步深入到微服务架构的世界。文章不仅涵盖了云原生的理论基础,还通过实际案例展示了如何在真实世界中应用这些理念。无论你是初学者还是有经验的开发者,都能在这次旅程中获得宝贵的知识和启发。
|
3天前
|
Cloud Native Docker 微服务
云原生之旅:从容器化到微服务
【9月更文挑战第15天】在数字化转型的浪潮中,云原生技术如同一股清泉,为传统IT架构带来活力与创新。本文将深入浅出地探讨云原生的核心概念、关键技术及应用实践,带领读者踏上一段探索云原生世界的奇妙旅程。
34 9
|
8天前
|
Kubernetes Cloud Native Docker
探索云原生技术之旅:从容器到微服务
【8月更文挑战第42天】本文将带你踏上一场云原生技术的奇妙之旅,我们将从容器技术的基础出发,逐步深入到微服务架构的世界。你将了解到如何利用Docker和Kubernetes简化应用部署与管理,以及如何通过微服务设计原则构建可扩展、灵活的系统。准备好一起探索这些令人兴奋的技术了吗?让我们开始吧!
45 14
|
3天前
|
运维 Cloud Native 持续交付
云原生之旅:从容器化到微服务架构的探索
【9月更文挑战第16天】在数字化转型的浪潮中,云原生技术成为推动企业创新和效率提升的关键力量。本文将带你深入了解云原生的核心理念,从容器化技术的入门应用到微服务架构的设计实践,揭示如何利用这些先进技术构建更灵活、更可靠的系统。我们将通过具体案例,探讨云原生技术如何帮助企业实现快速迭代与持续交付,以及在这一过程中可能遇到的挑战和解决方案。
|
4天前
|
Kubernetes Cloud Native Docker
云原生技术之旅:从容器到微服务
【9月更文挑战第14天】随着云计算的蓬勃发展,云原生技术已成为现代软件开发的重要组成部分。本文将深入探讨云原生的核心概念,包括容器化、微服务架构以及它们如何共同推动企业快速创新。通过实际案例,我们将展示如何利用Kubernetes和Docker等工具构建和管理高效的云原生应用。无论你是初学者还是经验丰富的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在云原生时代乘风破浪。
20 5
|
6天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
16 3
|
9天前
|
运维 Kubernetes Cloud Native
云原生之旅:容器化与微服务架构的融合之道
在数字化转型的浪潮中,云原生技术以其高效、灵活的特性成为企业IT架构升级的重要选择。本文将探讨云原生的核心概念——容器化和微服务架构,并阐述它们如何相互融合,共同推动现代应用的开发与部署。通过深入浅出的解释,我们将揭示云原生如何助力企业快速适应市场变化,实现业务的持续创新和价值最大化。
|
2天前
|
缓存 负载均衡 数据管理
深入探索微服务架构的核心要素与实践策略在当今软件开发领域,微服务架构以其独特的优势和灵活性,已成为众多企业和开发者的首选。本文将深入探讨微服务架构的核心要素,包括服务拆分、通信机制、数据管理等,并结合实际案例分析其在不同场景下的应用策略,旨在为读者提供一套全面、深入的微服务架构实践指南。**
**微服务架构作为软件开发领域的热门话题,正引领着一场技术革新。本文从微服务架构的核心要素出发,详细阐述了服务拆分的原则与方法、通信机制的选择与优化、数据管理的策略与挑战等内容。同时,结合具体案例,分析了微服务架构在不同场景下的应用策略,为读者提供了实用的指导和建议。
|
5天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
32 5
|
16天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo