GoFrame 框架设计-全链路跟踪设计
可观测性是很重要的,目前已经有比较不错的OpenTelemetry
标准,各个第三方组件以及厂商都按照这套标准库来暴露和对接观测数据将会更加简便。我们本次聊到的,是链路跟踪,它是可观测性中很重要的一项指标。
GoFrame
框架具有很高的前瞻性,在OpenTelemetry
标准草稿阶段便开始持续关注,并在发布OTEL
标准发布了alpha
版本时,框架便开始支持。目前OTEL
的Golang实现已经稳定。GoFrame
是目前众多"框架"中对OTEL
标准及实现支持得最好的框架。并且可观测性也是框架未来发展的重点特性。
一、项目实践的痛点
在项目实践中,实现链路跟踪往往会遇到以下常见的痛点。
1、组件没有严格执行标准
虽然已经有OTEL
标准,但是第三方组件没有严格执行。例如,在日志和ORM
组件中,没有严格约束传递ctx
上下文变量。
2、第三方组件杂乱无章
业务项目拼凑使用的第三方组件众多,有的组件没有实现链路跟踪支持,更别提OTEL
标准。例如,命令管理、配置管理、缓存管理、数据校验、定时任务等等常用组件,表象就是没有提供ctx
上下文变量传递。当使用到的组件不支持链路传递时,链路信息便丢失。
3、业务逻辑易丢失链路
业务项目中,链路跟踪没有检测手段,也就是写着写着,链路跟踪不小心就弄丢了。当战略设计在战术实施时遭遇到了猪队友,遇到问题需要定位时就GG。特别是在toB
业务中,遇到工单限时会很抓狂。
二、框架全链路跟踪
1、统一框架
由于GoFrame
是一款工程完备的基础框架,提供了项目所需的通用核心基础组件,因此在组件这块可以非常方便地实现标准。
2、标准落地
在框架的核心组件中均增加了对ctx
上下文变量的支持,并严格执行OTEL
标准,保障标准的顺利落地。
3、日志支持
GoFrame
框架的日志组件也支持并且严格执行OTEL
标准,因此只要使用框架的日志组件,那么也会自动打印链路相关信息。
4、规范检测
此外,框架通过开发工具提供工程规范检测功能,可以自动检测出业务项目中的链路丢失问题,进一步推进OTEL
标准落地,保障项目质量。
5、链路传递
链路的传递也需要统一组件。目前比较常见的协议是HTTP/GRPC
协议,因此框架也提供了HTTP Client/Server
以及GRPC Client/Server
组件来保障链路的传递。并且为保障易用性,屏蔽复杂的功能细节,这种链路传递是底层隐式实现的,使用者完全无感知的。