绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
微服务故障排除方面的佳实践
2022-01-21 15:03:26

作者:Brendan Creane 编译:沈建苗

人们听到“微服务”时,常常想到Kubernetes,这是一种声明式容器编排系统。由于具有声明性,Kubernetes将微服务视作实体,这在故障排除方面带来了一些难题。不妨看看为什么在Kubernetes环境下为微服务排除故障可能具有挑战性,以及一些相应的佳实践。

想了解为什么为微服务排除故障可能具有挑战性,不妨看一个例子。

如果您在Kubernetes中有一个应用程序,就可以将它部署为pod,利用Kubernetes对其进行扩展。该实体是您可以监控的pod。若使用微服务,您不应该监控pod;相反,应该监控服务。所以您可能拥有整体式工作负载(部署为pod的单个容器)并对其进行监控,但如果您的服务由几个不同的pod组成,就需要了解这些pod之间的相互关系,才能明白服务是如何运行的,以及进行监控,如果不这么做,您认为的事件可能不是真正的事件(即可能对服务的运作并不重要)。

说到监控微服务,您需要在服务层面、而不是在pod层面进行监控。如果您尝试在pod层面进行监控,将与编排系统发生冲突,并且可能出岔子。

01

为微服务排除故障时

常见问题的根源


为微服务排除故障时,网络、基础架构和应用程序等问题都很常见。

网络

网络层面的问题难调试。如果问题出在网络上,您需要查看套接字层统计信息。底层网络拥有将A点连接到B点的套接字,因此您需要在网络层面查看往返时间,看看数据包是否在传输、是否存在路由问题等。

基础架构

pod重新启动时,基础架构问题会显露出来(Kubernetes中的崩溃循环)。发生这种情况的原因有很多。比如说,如果您的服务中有一个pod无法访问Kubernetes数据存储,Kubernetes会重新启动它。您需要跟踪支持该服务的那些pod的状态。如果您看到数次或频繁的pod重新启动,这就成了问题。

另一个常见的基础架构问题是Kubernetes API服务器过载,需要很长的时间才能响应。每当需要执行某个操作,pod都要与API服务器通信——因此,如果API服务器过载,这就成了问题。

第三个基础架构问题与域名系统(DNS)有关。在Kubernetes中,您的服务由名称来标识,名称则由DNS服务器来解析。如果这些解析很慢,您会开始看到问题。

应用程序

有几个常见的应用程序问题可能导致重新启动和错误。比如说,如果您的服务负载均衡未起作用,比如说由于您的URL发生了变化或者负载均衡系统没有执行正确的操作,就可能会导致某一个pod过载,从而导致它重新启动。

如果您的URL构建不正确,您会收到响应代码“404页面未找到”。如果服务器过载,您会收到500错误。这些是应用程序问题,只不过表现为基础架构问题。


02

微服务故障排除方面的佳实践


以下是有效识别和排除微服务问题的两个佳实践。

1. 在服务层面聚合数据

您需要使用一款工具来提供在服务层面聚合的数据(即日志),以便可以查看出现了多少次pod重新启动和错误代码等。这与当今大多数DevOps工程师使用的方法不同;在后一种方法中,每次pod重新启动都是单独的警报,导致工程师陷入到可能只是正常操作或Kubernetes自我纠正的警报中。

一些DevOps工程师可能想知道是否可以使用服务网格来聚合数据。虽然服务网格内置了可观察性工具,但您要小心:由于涉及大量数据,许多服务网格会采样数据;它们为您提供了原始数据,并提供了标签,以便您自行聚合数据。您真正需要的是一种工具,为您仅提供服务所需的数据以及服务层面的报告机制。

2.使用机器学习

在试图识别和解决微服务问题时,您需要监控属于服务的每个pod在如何运行。这意味着监控延迟、进程重启次数和网络连接错误等度量指标。有两种方法可以做到这一点:

设置阈值——比如说,如果有20多个错误,就设置警报。在像Kubernetes这样的动态系统中,这种方法有点原始,尤其是在使用微服务的情况下。

确立基准——使用机器学习来研究度量指标随时间的推移而如何变化,构建机器学习模型,以预测该指标在未来有怎样的表现。如果指标偏离基准,您会收到一则警报,指明哪些参数导致机器学习算法认为存在问题。

我建议别尝试设置阈值——你会被大量警报所淹没,这会导致警报疲劳。相反,应使用机器学习。久而久之,机器学习算法可以在问题出现之前发出警报。

参考:https://www.kubernetes.org.cn/9812.html



分享好友

分享这个小栈给你的朋友们,一起进步吧。

微服务专区
创建时间:2020-07-01 15:22:43
微服务是一种架构风格,是以开发一组小型服务的方式来作为一个独立的应用系统,每个服务都运行在自已的进程中,服务之间采用轻量级的HTTP通信机制 ( 通常是采用HTTP的RESTful API )进行通信。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • markriver
    专家
戳我,来吐槽~