服务调用链技术是微服务架构中对服务进行监控的重要环节,它可以帮助我们清晰地了解当前系统的运行情况,同时帮助我们定位问题,解决分布式网络下服务交互追踪的问题。
◆ APM 与调用链技术
在单体应用架构拆分为微服务架构后,一个用户请求会跨网络依次调用不同的服务节点进行分布式交互处理,最后将结果汇总处理,再将结果返回给用户。那么在整个处理的链条中,如果有任何一个节点出现了延迟或者超时等问题,都有可能导致最终结果出现异常。在很多场景下,一个功能可能需要多个技术团队、多种技术栈、多个跨地域网络中的不同服务协调完成。我们想要排查出链条中具体哪个服务节点出了问题,其实并不容易。所以微服务架构的一大挑战就是分布式网络交互带来的固有复杂性。
谈到分布式网络环境下的应用交互,就不得不提到分布式计算的八大误区,这些误区无疑都与我们对应用构架所在的基础设施 —— 网络认识不足有关。下面我们将这些误区从应用使用网络的视角,按照正确的理解总结如下:
- 网络是不可靠的,我们的应用可以随时发现网络的异常,并适应网络的不可靠。
- 网络存在延迟,应用系统需要通过网络监控工具了解网络状况,避免系统的异常行为。
- 带宽是有限的,应用的传输数据在逐渐增大,尽管应用系统无法控制生产环境下的网络带宽,但是我们需要模拟网络,监控并控制应用数据的传输上限。
- 网络是不安全的,应用需要在早期就将安全因素考虑到设计方案中。
- 网络的拓扑是变化的,网络设备(例如 DNS)、存储资源的迁移都需要在应用架构层面尽量做到对用户无感知。
- 系统存在多个管理员,应用需要向不同管理员提供可视化的应用管理界面,并帮助他们去管理应用。
- 数据传输是需要成本的,应用在网络上传播,无论如何都会耗费额外资源。数据序列化会耗费计算资源、网络传输上的延迟,这些都是数据传输的成本,都要求应用使用更加经济高效的解决方案。
- 网络是异构的,应用之间可能采用不同的网络协议,应用集成交互时最好采用通用协议。
总结来看,这些问题都是分布式网络下的陷阱。在微服务架构下,由于服务之间的交互对网络有如此强的依赖,我们需要时刻了解请求耗时、网络延迟、业务吞吐、系统运行等情况,所以,我们需要一个系统来分析当前系统的瓶颈,解决系统问题。而一套 APM 系统和调用链技术就可以帮助我们了解当前应用的状态。
◆ APM 与调用链的概念
APM 是一种应用性能管理 / 监控技术架构,用以将应用运行过程中的函数调用、网络调用等时间和性能进行指标化及可视化展现。
而调用链技术可以说是 APM 应用性能管理的子集。通过跟踪一次业务调用请求,记录业务在进程内部及进程之间的调用关系(调用信息包括时间、接口、结果)到日志中,然后根据日志信息进行分析处理,掌握分布式网络环境下请求的全链路跟踪还原及展示的技术。调用链技术综合了数据埋点、采集、数据聚合、数据展示等多项技术,可以根据不同层次和维护的分析,标识出服务调用异常,快速定位问题,从微观层面监控系统的运行状态,是一种细粒度的服务监控模式。
◆ 调用链技术的作用
- 快速定位问题:业务全链路监控就是要从业务的视角出发,监控整个业务流程的健康状况,无须多个系统切换,直观看到全局和上下游,方便快速发现、定位问题。这个作用前面一直在讲,在微服务架构下,问题定位就变得非常复杂了,一个请求可能会经过多个服务节点,使用调用链技术能让开发人员快速地定位到问题和问题所在的相应模块。
- 拓扑关系:当微服务拆分后,服务之间的调用关系也随之变得复杂,而调用链技术可以帮助我们准确地掌握服务之间的调用关系,并清晰地表现为网络拓扑图。
- 优化系统:优化系统也是调用链技术很重要的一个功能。因为我们记录了请求在调用链上每一个环节的信息,就可以通过这个来找出系统的瓶颈,做出针对性的优化。还可以分析调用链是否合理,是否调用了不必要的服务节点,是否有更近、响应更快的服务节点。通过对调用链的分析,我们就可以找出最优的调用路径,从而提高系统的性能。