总体设计
agent端 | oapserver端 | storage端 | ui端 |
---|---|---|---|
agent端负责trace链路的构建,metrics度量采集,数据采样上报oapserver,服务注册oapserver等 | oapserver 负责数据的流式处理,存储,查询,集群构建等 | storage负责存储适配,如es,DB等 | UI负责查询oapserver数据 |
架构设计
- agent端负责合集和上报数据
- oapserver有grpc服务接收agent信息
- 然后交给agent streaming 进行数据流式处理,最后交由存储模块进行存储
- 此外还涉及队列和缓存Module
- Naming Module设计用于构建k-v字典,比如由ip等信息构建一个id,形成(id-ip)kv键值对,agent与oapServer进行信息传递时,只通过id传递,然后有naming Module进行解析,减少网络带宽使用
- UI模块通过jetty进行数据查询
Agent端模块结构
- agent 模块主要负责拦截应用程序
- 并通过字节码入侵修改目标类织入拦截程序
- 其内部采用插件架构设计
OapServer端模块结构
- Server模块通过Module定义组件和Service接口
- Module通过ModuleProvider指定具体实现
- ModuleProvider完成对所有Service的实现
- 通过多个Module之间的相互依赖组合,提供完整的oapServer功能
总结
- skywalking在agent和oapserver端均采用微内核架构设计
- 导致其源码包非常多,但其实都是插件化的设计,很容易快速掌握全部源码模块的具体功能以及设计
扩展点
- 对Module,ModuleProvider等解释参见下文