1. 插件
目前很多框架,都采用框架 + 插件的模式开发。
如DataX、FlinkX通过插件支持众多异构数据源, Skywalking通过插件实现针对很多软件如redis、mysql、dubbo等方法执行信息采集。
本文针对 skywalking agent 插件加载流程进行源码解析,理解插件的接口定义、加载机制
针对skywalking agent的插件开发指导,请参考:https://github.com/apache/skywalking/blob/master/docs/en/guides/Java-Plugin-Development-Guide.md
1.1. 插件介绍
插件Plugin(Plug-in, addin, add-in, addon或add-on)是一种计算机应用程序,它和主应用程序(host application)互相交互,以提供特定的功能。
插件是一种可以热插拔的(动态安装和卸载),可以实现一定功能性并且对目前现有运行系统不会产生任何影响的一种松散耦合的设计模式,而且易扩展,可以让更多的开发者参与进来,让产品自身的功能更加丰富彩,它也可以通过动态的安装组合,实现不同的产品架构。
1.2. 插件机制
主应用程序提供给插件可以使用的服务,让插件在主应用程序中注册插件本身,以及和插件进行数据交换的协议。
插件依赖于主应用程序提供的这些服务,通常不能独立运行。相反地,主应用程序和插件是分离的,这就使得我们可以不改变主应用程序而动态增加或更新插件。
主应用程序提供一套插件接口规范及插件开发流程,允许第三方编写插件和主应用程序交互。