簡(jiǎn)介
SOFAArk 是一款基于 Java 實(shí)現(xiàn)的輕量級(jí)類隔離加載容器择吊,主要是為應(yīng)用程序提供類隔離和依賴包隔離的能力李根,由螞蟻金服公司開源貢獻(xiàn);基于 Fat Jar 技術(shù)几睛,簡(jiǎn)單的單模塊 Java 應(yīng)用或者 Spring Boot 應(yīng)用均可被打包成一個(gè)自包含可運(yùn)行的 Fat Jar房轿,稱之為 Ark 包;Ark 包內(nèi)嵌 SOFAArk 類隔離容器所森,通過(guò) java -jar 命令啟動(dòng) Ark 包囱持,SOFAArk 容器將優(yōu)先啟動(dòng),進(jìn)而由容器負(fù)責(zé)啟動(dòng)各 Ark 插件和應(yīng)用焕济。
主要框架圖
原理圖
框架圖
主要流程講解
容器啟動(dòng)流程
容器啟動(dòng)流程框圖
ark容器啟動(dòng)的主要流程
ark容器類圖
public class ContainerModule extends AbstractArkGuiceModule {
@Override
protected void configure() {
binder().bind(Pipeline.class).to(StandardPipeline.class);
Multibinder<ArkService> arkServiceMultibinder = Multibinder.newSetBinder(binder(),
ArkService.class);
arkServiceMultibinder.addBinding().to(PluginDeployServiceImpl.class);
arkServiceMultibinder.addBinding().to(BizDeployServiceImpl.class);
arkServiceMultibinder.addBinding().to(ClassloaderServiceImpl.class);
arkServiceMultibinder.addBinding().to(StandardTelnetServerImpl.class);
binder().bind(PluginManagerService.class).to(PluginManagerServiceImpl.class);
binder().bind(BizManagerService.class).to(BizManagerServiceImpl.class);
binder().bind(ClassloaderService.class).to(ClassloaderServiceImpl.class);
binder().bind(PluginDeployService.class).to(PluginDeployServiceImpl.class);
binder().bind(BizDeployService.class).to(BizDeployServiceImpl.class);
binder().bind(RegistryService.class).to(RegistryServiceImpl.class);
binder().bind(InjectionService.class).to(InjectionServiceImpl.class);
binder().bind(TelnetServerService.class).to(StandardTelnetServerImpl.class);
binder().bind(BizFactoryService.class).to(BizFactoryServiceImpl.class);
binder().bind(PluginFactoryService.class).to(PluginFactoryServiceImpl.class);
binder().bind(EventAdminService.class).to(EventAdminServiceImpl.class);
}
}
pipeline和pipelinestage纷妆,以及archive相關(guān)的類圖pipelinestage,以及archive相關(guān)的類圖
standarPipeline對(duì)應(yīng)的核心代碼
pipelineStage和arkService對(duì)應(yīng)的類圖
arkService和plugin掩幢,Biz相關(guān)接口圖
ClassLoader對(duì)應(yīng)的查找流程
ClassLoader流程
plugin插件發(fā)布服務(wù)的主要流程
對(duì)應(yīng)的pom文件配置:pom.xml文件配置
插件啟動(dòng)器類中發(fā)布服務(wù)
插件服務(wù)發(fā)布流程
Biz模塊注冊(cè)流程
Biz模塊注冊(cè)就是將對(duì)應(yīng)的Biz放入到BizManagerServiceImpl的bizRegistration中,其中key1為bizName上鞠,key2為版本號(hào)际邻,value為Biz,對(duì)應(yīng)的代碼如下:BizManagerServiceImpl Biz注冊(cè)流程
sofa-ark總結(jié)
- plugin 不能動(dòng)態(tài)發(fā)布芍阎,只有biz可以世曾。
- 所有biz 都是依賴 plugin 的功能。
- plugin 發(fā)布的服務(wù)谴咸,是plugin 相互之間可以引用轮听。
- biz 默認(rèn)情況下可以使用 plugin 的所有類骗露,直接new就行了
sofa-ark 暫時(shí)沒(méi)有解決的問(wèn)題
- 多個(gè)web應(yīng)用程序端口不能相同
- 應(yīng)用程序中沒(méi)有使用spring托管的線程不能關(guān)閉