导读:本文摘自于SkyWalking创始人吴晟撰写的《Apache SkyWalking实战》一书,详细讲述了SkyWalking的架构设计与优势 。
吴晟:Apache基金会会员,Apache SkyWalking创始人、项目VP和PMC成员,Apache孵化器PMC成员,Apache ShardingSphere PMC成员,Apache APISIX (incubating) PPMC成员,Apache ECharts (incubating)和Apache DolphinScheduler (incubating)孵化器导师,Zipkin成员和贡献者,CNCF OpenTracing核心维护者 。
1. SkyWalking的架构设计
如图所示,SkyWalking官方架构图对SkyWalking的整体架构进行了非常直观的描述 。SkyWalking由以下4个核心部分构成 。

文章插图
SkyWalking官方架构图
- 探针 。探针(对应图中Tracing和Mestrics部分)可以是语言探针,也可以是其他项目的协议 。
- OAP平台(Observability Analysis Platform),或称OAP Server 。它是一个高度组件化的轻量级分析程序,由兼容各种探针的Receiver、流式分析内核和查询内核三部分构成 。
- 存储实现(Storage Implementors) 。SkyWalking的OAP Server支持多种存储实现,并且提供了标准接口,可以实现其他存储 。
- UI模块(SkyWalking) 。通过标准的GraphQL协议进行统计数据查询和展现 。
- 面向协议设计
- 模块化设计
- 轻量化设计
面向协议设计是SkyWalking从5.x开始严格遵守的首要设计原则 。SkyWalking包含下列对外协议 。
【Apache顶级项目,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进行无缝监控 。
查询协议使用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查询:追踪明细查询 。
- 告警查询 。
模块化设计
模块化设计,旨在以开源项目为内核,为更多的企业内部定制服务、商业产品的二次包装及插拔机制提供插拨机制与扩展点 。开源项目的一致性升级至关重要,模块化设计,明确接口边界,使得扩展很容易跟上开源版本升级的节奏 。对于商业包装和开源产品的迭代发展,这是必不可少的一环 。
推荐阅读
- |什么样的和田玉牌子才算的上顶级?
- 将军峰大元帅,四川洪雅将军乡茶叶农业标准化项目经过验收
- 6个顶级可视化Python库
- 2020年顶级深度学习框架:PyTorch与TensorFlow
- 智能硬件不止树莓派,八款优秀智能硬件开源项目推荐
- Java分布式项目,你使用的哪种注册中心?为啥?
- 开化龙顶茶来源传说,开化龙顶茶特色园项目被列入国家产业试点,开化龙顶茶
- 电池|生姜竟然也能造电池?这一项目可能需要一个“王多鱼”
- 红茶的采制及加工技术,浙江加大工夫红茶科研项目力度
- Apache中.htaccess文件利用的总结与新思路拓展
