为什么要实现微服务链路追踪
一个完整的微服务系统一般由成百上千,甚至几万、几十万、几百万的服务实例构成。在这种规模下,如果出现问题,则准确跟踪问题点会十分困难。所以,需要用链路跟踪工具来监控微服务状态,当出现问题时能及时定位问题点,快速解决问题。
总体来说,实现微服务链路追踪主要有一下需求。
-
实现监控
万倍的监控系统可以提供及时、准确的性能报告,可以了解请求的路径、请求耗费的时间、网络延迟状况、单个业务逻辑耗费时间等指标。 -
决策
我们可以分析系统瓶颈、解决系统存在的问题,以及为当前和未来的决策提供基础数据。 -
避免技术债务
系统会根据业务需求不断地进行演变,如果过去遗留的问题没有处理好,则会对新的功能产生影响。如果没有跟踪技术,则会产生大量技术债务。技术债务的累计会对修改或升级带来更多的问题。 -
快速定位故障
如果要解决问题,则首先需要发现问题,然后定位问题的故障点、及时采取措施解决问题。发现、定位、解决问题都非常重要。如果任何一点没有能及时得到解决,则在发生故障后解决惠花费非常长的时间。
在微服务结构中,能在出现问题前预警问题,在出现问题后快速定位故障点非常重要。如果缺少这种快速定位故障点的机制,则关键业务停止或出现性能问题会对业务影响极大。一个完备的系统需要提供快速检测(预警)、隔离和修复问题的方式。
微服务链路跟踪的技术要求
在明确了链路追踪的必要性后,就可以设计和规划链路追踪技术了。一个好的链路追踪技术应该满足一下要求。
-
低消耗
跟踪系统本质是发现某个系统的性能或故障问题,所以它不能反过来影响被监控系统的性能,至少需要做到“链路跟踪的价值要比使用链路跟踪对性能的影响要大很多”,或者影响可以忽略,否则就没有使用链路系统的价值,因此低消耗是必需的。 -
应用透明
应用透明即要求链路追踪技术对业务系统是透明的,没有侵入性,不会影响开发人员业务,或者不会因为开发人员的疏忽而失效。可以把代码植入控制流、RPC库等公共组件中。 -
延展性
链路追踪系统应能满足业务系统的发展需求。当系统越来越庞大和复杂后,链路跟踪技术依然能快速地跟踪产生的数据,并及时地对数据进行统计和生成报表。 -
可控采样率
可以通过设置采样率来平衡性能消耗和采样质量。 -
可视化
具有可视化的控制台也是链路追踪的一个重要需求。