上QQ阅读APP看书,第一时间看更新
1.2.2 模块化设计
模块化设计,旨在以开源项目为内核,为更多的企业内部定制服务、商业产品的二次包装及插拔机制提供插拨机制与扩展点。开源项目的一致性升级至关重要,模块化设计,明确接口边界,使得扩展很容易跟上开源版本升级的节奏。对于商业包装和开源产品的迭代发展,这是必不可少的一环。
大型的开源项目,无一不是由大量的商业公司/商业目的推进,不可能由个人凭兴趣在业余时间完成。虽然SkyWalking在早期的一到两年是个人基于兴趣在推进,但随着社区的壮大和商业价值的体现,开放、包容、具有扩展性的架构是必不可少的特性。Apache SkyWalking作为Apache顶级项目,基于商业友好的Apache 2.0开源协议,在设计上也充分考虑了定制化及二次开发的可能性。
SkyWalking根据探针和服务端的不同特性,使用了两种不同的模块化机制。
Java探针端,Java使用了较为紧凑的实现,主要使用SPI将核心服务隔离成替换状态,用户可以像开发plugin一样,只需将新的服务实现放在plugin目录中,即可实现自动替换。
后端(OAP Server)使用YML定义的模块化。SkyWalking将模块化定义为模块(Module)和实现(Provider)两部分。模块为抽象概念,提供对外服务方法的定义和声明;Provider需要实现这些服务方法,同时声明此实现依赖的其他模块。值得注意的是,模块本身不声明依赖,依赖由实现(Provider)声明。这种模式允许用户替换和新增所需的模块,并进行组织。