业务背景
随着业务的发展 和 架构的升级, 业务会越来越多的依赖公司内部提供的 中间件 ,如 rpc服务框架、分库分表框架、异步消息框架、公共工具包等等。
每个中间件都有自己的 jar包依赖体系,最常用的如: logback、log4j、httpclient 、common-lang 、guava、zookeeper 等等 ,
这些jar包依赖不仅会产生版本冲突,甚至会有jar包不兼容的情况出现,比如 log4j 和 logback , guava 和 common-collection ,等等。
随着时间推移,业务越来越复杂,依赖的中间件也越来越多,每当引入新的中间件时,jar包版本管理的风险也越来越大,甚至出现无法兼容的情况。
解决方案
中间件容器与 业务web容器隔离,jar包依赖互不影响。 不仅解决了令人头痛的jar包冲突、jar包不兼容问题,还释放了业务开发人员的压力和责任,
公司内部的中间件通过专门的运维人员来推动升级,将业务与中间件隔离,通过透明的方式提供服务。
实现原理
先来回顾一下jvm的classloader加载机制。
当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构:
bootstrap classloader
|
extension classloader
|
system classloader</