Apache SkyWalking实战
上QQ阅读APP看书,第一时间看更新

1.2.1 面向协议设计

面向协议设计是SkyWalking从5.x开始严格遵守的首要设计原则。SkyWalking包含下列对外协议。

1. 探针协议

探针协议分为四大类。

·语言探针上报协议。此协议包括语言探针的注册、Metrics数据上报、Tracing数据上报、命令下行,以及Service Mesh中使用的Telemetry协议。所有基于语言(Java、.NET、Node.js、PHP、Go等)的探针都需要严格遵守此协议定义。此协议从v6版本开始全部以gRPC服务方式对外提供。

·语言探针交互协议。因为分布式追踪,探针间需要借助HTTP Header、MQ Header等应用间通信管道进行交互。此协议定义交互格式。所有基于语言(Java、.NET、Node.js、PHP、Go等)的探针都需要严格遵守此协议定义。此协议从v2开始执行与v1不同的编码方法,加入了强制Base64的要求。将从SkyWalking 8开始执行的全新v3协议,简化了编码,提供了更多特性,比如透传业务信息、探针交互能力等。

·Service Mesh协议。此协议是SkyWalking针对Service Mesh抽象的专有协议,任何Mesh类的服务都可以通过此协议直接上行Telemetry数据,用于计算服务Metrics和拓扑图。

·第三方协议。针对大型的第三方开源项目,尤其是Service Mesh核心平台Istio和Envoy,提供核心协议适配,支持针对Istio+Envoy的Service Mesh进行无缝监控。

2. 查询协议

查询协议使用GraphQL格式定义的查询协议。多数读者可能更熟悉RESTful格式的查询,但SkyWalking考虑到更好的扩展性、更加灵活的组合查询模式,选择了由Facebook在2012年开源的GraphQL。GraphQL在开源和商业项目中已经得到了广泛运用。协议格式的预定义和多种查询组合使用提供了UI和第三方系统良好的集成能力。熟悉SkyWalking历史的读者会知道,SkyWalking在6.0.0-GA之后的版本,更换了全新的RocketBot UI作为默认UI,这个过程得益于GraphQL的灵活性,后端协议和实现可以完全不变。社区中已有大量公司基于此协议包装了云平台产品的UI。

查询协议分为以下6类。

·元数据查询:查询在SkyWalking注册的服务、服务实例、Endpoint等元数据信息。

·拓扑关系查询:查询全局或者单个服务或Endpoint的拓扑图及依赖关系。

·Metrics指标查询:线性指标查询。

·聚合指标查询:区间范围均值查询及TopN查询等。

·Trace查询:追踪明细查询。

·告警查询。

除了上述两大类协议外,部分模块也存在一些模块内协议,如导出的数据格式协议、告警协议、动态配置服务协议等。这些协议与执行模块的默认实现有关,属于SkyWalking默认对外集成协议的范围,考虑到模块化设计,这些协议本身也是可以替换的,这里就不一一描述了。