skywalking源码分析第二篇一oapserver启动

源码模块

  • 由server-starter和server-starter-es7调用server-bootstrap
  • server-starter和server-starter-es7的区别在于maven中引入的存储模块Module不同
server-starterserver-starter-es7
storage-elasticsearch-pluginstorage-elasticsearch7-plugin

在这里插入图片描述

概念

ModuleDefine与maven模块关系

  • ModuleDefine一般对应一个模块
  • ModuleProvider一般对应一个模块的子模块
  • 比如配置模块,server-configuration下多个模块对应configuration模块的不同provider实现
ModuleDefine名称application.yml 名称maven模块
ConfigurationModuleconfiguration: none:在这里插入图片描述

类名设计

名称作用
ApplicationConfigLoader负责加载application.yml
ApplicationConfiguration将application.yml转化为ApplicationConfiguration
ModuleManager管理所有的Module
ModuleDefine一个ModuleDefine代表一个模块,比如存储模块,UI查询query模块,JVM模块等等;不同的模块相互依赖或者不依赖构建整个oapServer功能
ModuleProviderModuleDefine的具体实现,比如StorageModule包含es存储实现,mysql实现等等
Service多个service构成一个完整的ModuleProvider,也就是将module的具体实现拆分成多个serviceImpl

application.yml

  • application中的一级对应ModuleDefine,比如storage对应StorageModule

public class StorageModule extends ModuleDefine {
public static final String NAME = “storage”;
}

  • application中的二级对应ModuleProvider,同时二级只允许在yml配置一个,否则多个Provider想成为Module的loadedProvider实现则启动失败

比如存储模块StorageModule,配置了一个elasticsearch实现,就无需再配置一个mysql实现

  • 三级及以上为配置信息
    在这里插入图片描述

ApplicationConfiguration

  • ApplicationConfigurationLoader解析application.yml生成的配置类
  • 引导启动程序会根据该配置以及SPI技术查询相关模块和模块提供者实现,并进行加载启动初始化工作
  • 一个ApplicationConfiguration包含所有的ModuleConfiguration
  • 一个ModuleConfiguration包含多个ProviderConfiguration

ProviderConfiguration实际只能配置一个作为LoadedProvider

在这里插入图片描述

组件关系

  • ModuleManager维护所有组件ModuleDefine
  • ModuleDefine含有一个加载的loadedModuleProvider
  • loadedModuleProvider持有ModuleDefine和ModuleManager
  • 由于不同Module可以存在依赖,所以需要反向持有ModuleManager
  • 同时ModuleProvider依赖ModuleDefine的一些功能定义.亦需要反向依赖
    在这里插入图片描述

Configuration与ModuleDefine关系

  • 加载阶段ModuleConfiguration可以有多个ProviderConfiguration
  • 比如存储模块,可以有esProvider mysqlProvider
  • 启动时ModuleConfiguration只能有一个ProviderConfiguration,比如存储模块指定为elasticSearch实现
  • 一个ModuleConfiguration对应一个ModuleDefine
    • 一个ProviderConfiguration对应一个ModuleProvider

只能有一个ProviderConfiguration也就是说application,yml每个一级只能配置一个二级

在这里插入图片描述
在这里插入图片描述

启动架构图

  • 两个starter模块依赖es7或者低版本es,启动时根据es版本决定启动who
  • 调用server-bootstrap启动
  • 解析application.yml生成ApplicationConfiguration
  • ModuleManager根据ApplicationConfiguration加载所有的ModuleDefine以及对应的loadedModuleProvider
  • 执行prepare,start,notifyAfterCompleted完成所有模块的启动
    在这里插入图片描述

总结

  • 通过启动架构图可以看出,整个server端依旧是微内核架构,所有的Module和Provider都可通过maven子模块实现
  • 不同模块之间尽量减少依赖,必须存在依赖的,内核会进行依赖关系检查
  • Module定义了service接口,Provider必须要实现这些service来构建完整的功能,同时内核也会检查service实现的完整性

扩展点: Module一maven一application关系图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值