微服务架构的可观察性设计模式

开发 架构
作为服务开发人员,我们应该实现几种模式,让服务管理和故障排除更容易。

可观察性是监控的超集。除了提供对隐式故障模式的详细洞察之外,它还提供了系统健康状况的高级概述。此外,可观察系统还提供了有关其内部运作的储备,能够发现更深层次的系统性问题。

一旦服务部署到生产环境中,我们想知道它每秒请求数、资源利用率等方面的执行情况。此外,如果出现问题,希望能得到即时警报,例如服务实例失败或者磁盘空间不足,最好是在影响用户体验之前得到警报。如果出现问题,我们需要能够排除故障并进行 RCA(根本原因分析)。

作为服务开发人员,我们应该实现几种模式,让服务管理和故障排除更容易。以下五种模式可以帮助我们设计可观察的服务:

  • 健康检查API: 提供一个返回服务健康状况的端点。
  • 日志聚合:您可以记录服务活动并将日志存储在集中式日志服务器中,该服务器提供警报和搜索功能。
  • 分布式跟踪:使用唯一ID 识别每个外部请求,并在请求服务之间流动时对其进行跟踪。
  • 异常跟踪:应将异常报告给异常跟踪服务,该服务对异常进行重复数据删除、提醒开发人员并跟踪它们是如何解决的。
  • 应用程序指标:诸如计数器和仪表之类的指标由服务维护并暴露给指标服务器。
  • 审计日志:跟踪用户操作

一、健康检查 API 模式

有时,服务可能正在运行但无法处理请求。新启动的服务实例可能仍在初始化并进行一些健全性检查,然后才能处理请求。部署基础架构在准备好处理 HTTP 请求之前,将其路由到服务实例是没有意义的。

也可能出现服务实例没有终止就失败的情况,例如所有的DB连接都用完了,无法访问数据库。部署基础设施不应将请求路由到失败但仍在运行的服务实例;如果服务实例无法恢复,则必须终止它,并创建一个新实例。服务实例必须能够告诉部署基础设施它是否能够处理请求。您可以使用实现健康端点的Spring Boot Actuator来为您的服务实现健康检查端点。

二、日志聚合模式

日志聚合模式可以进行故障排除。如果您想确定应用程序出了什么问题,日志文件是一个很好的起点。登录微服务架构可能具有挑战性,因为日志内容分散在不同服务的日志文件中。

日志聚合是解决方案。日志聚合服务将所有服务实例的日志发送到集中式日志服务器。当日志被日志服务器存储时,它们可以被查看、搜索和分析。还可以设置在日志中出现某些消息时触发警报。

日志基础设施负责聚合日志、存储日志,并使用它进行搜索。许多流行的工具都提供了日志聚合,例如Splunk、Fluentd、ELK stack、Graylog等。

三、分布式跟踪模式

假设您正在对 API 响应缓慢进行故障排除,这个 API 可能涉及多个服务。使用分布式跟踪可以深入了解应用程序正在做什么。分布式跟踪器类似于单体应用程序中的性能分析器。记录有关处理请求时进行的服务调用的信息。然后,您可以看到服务在处理外部请求期间如何交互,以及在每个服务上花费了多少时间。

每个外部请求都被分配一个唯一的 ID,并在它从一个服务流向另一个提供可视化和分析的集中式服务器上进行跟踪。分布式追踪服务器包括Zipkin、Jaeger、OpenTracing、OpenCensus、New Relic等。

四、异常跟踪模式

服务记录异常,帮忙确定原因很重要。异常表示存在问题或程序错误。日志用于查看异常,甚至可以配置日志服务器,方便在异常时提醒运维人员。然而有几个缺点需要注意:

  • 日志文件由单行日志条目组成,而异常有多行。
  • 在日志文件中,没有跟踪异常解决的机制。需要手动将异常复制/粘贴到问题跟踪器中。
  • 目前没有办法自动将重复的异常视为一个异常。

异常跟踪服务是一种非常好的异常跟踪方法。服务向集中式服务报告异常,该服务对异常进行重复数据删除、生成警报和异常管理。可以使用Honeybadger和Sentry等实现异常跟踪服务。

五、应用度量模式

监控和警报是生产环境的关键组件。监控系统从其技术堆栈的所有部分收集提供有关应用程序运行状况的关键信息的指标。这些指标的范围从基础架构级别的指标(例如 CPU、内存和磁盘利用率)到应用程序级别的指标(例如服务请求延迟和处理的请求数量)。

度量标准是服务开发人员的责任,有两种方式。首先必须检测服务,收集有关行为指标。其次,必须将这些服务指标以及来自 JVM 和应用程序框架的指标公开给指标服务器。应用程序指标服务可以像 AWS CloudWatch 服务或Prometheus服务器一样轮询端点以检索指标。Grafana是一种数据可视化工具,可用于在 Prometheus 中查看指标。

六、审计日志模式

每个用户的操作都被审计日志记录下来。通常,审核日志用于提供客户支持、确保合规性和检测可疑活动。审计日志条目记录用户的身份、他们执行的操作以及涉及的业务对象。审计日志通常存储在数据库表中。

审计日志可以通过几种不同的方式实现:

  1. 将审计日志代码添加到业务逻辑:每个服务方法都可以创建一个审计日志条目并将其保存到数据库中。
  2. 面向切面的编程 (AOP):可以使用 AOP 框架(如 Spring AOP)定义拦截每个服务方法调用并保留审计日志条目的建议。
  3. 利用事件溯源:默认情况下,事件溯源提供了用于创建和更新操作的审计日志。

根据定义,可观察性模式不是关于日志、指标或跟踪,而是关于在调试期间由数据驱动并使用反馈来迭代和改进产品。

责任编辑:姜华 来源: 今日头条
相关推荐

2022-08-08 13:55:47

通信设计模式微服务

2022-08-14 07:04:44

微服务架构设计模式

2022-08-07 22:11:25

微服务架构

2022-04-23 16:58:24

微服务微服务架构

2022-05-16 13:31:22

微服务架构云原生微服务

2022-09-06 10:46:34

服务网格可观测性微服务

2023-06-12 16:45:20

数据管理

2024-06-03 00:00:10

微服务Python

2021-06-27 17:18:23

网络可观察性网络网络运营

2021-06-06 22:39:48

网络安全监控网络攻击

2024-11-07 08:00:00

2020-12-19 10:53:08

微服务架构设计模式软件开发

2024-06-11 00:11:00

2021-11-14 22:14:08

人工智能机器学习工具

2021-01-26 09:11:16

数字体验DEM网络可观察性

2019-08-02 08:50:47

API架构微服务

2021-09-14 11:26:22

微服务架构模式

2021-01-04 16:00:24

微服务架构数据

2021-07-12 11:24:00

流利说可观察性平台阿里云

2023-08-24 08:00:00

开发Java可观察性
点赞
收藏

51CTO技术栈公众号