前言
--
我们之前对系统进行了拆分,将单一的应用,被拆分了很多的服务。RPC框架使用的是dubbo,但是这样就带来了其他的一些问题。比如,应用的不断增加,导致消耗的虚拟机也越来越多,这样导致的运维的成本也非常的高。
所以我们就想着使用 docker+dubbo 的方式来解决。
但是众所周知,dubbo与docker想要结合可不是那么容易的一件事情,所有怎么弄一个,整理了一个完整的流程。
解决思路与方案
--
为了更好的统一维护,dubbo需要在web容器里面运行,可以使用springboot或者tomcat。我们使用的是将dubbo服务全部改造,可以在tomcat中运行。原因有更多的是适应我们已有的架构,也可以选用springboot。
dubbo是将服务注册到注册中心的时候,是需要将主机的ip与port写到主持中心。我的解决思路是这样的,容器中注册上来的地址就是宿主的ip,并且宿主与容器映射的端口相互一致。
- 还有我们还是有mvc的应用,由于docker的端口映射都是只能映射一个,所有原有所有都是8080端口的都需要有一个改造方案。那么改造的链路就是,分配端口-》启动容器,端口映射-》修改nginx映射。
所以以上两点都是基于端口,集群的端口管理不再赘述
- 还有我们大量的依赖日志进行问题排查与数据收集,当宿主与容器非常的多的时候,查阅日志就变得非常的麻烦,于是我们就设计了一个日志收集方案。(ksearch是我们自研的查询平台)
- 还有就是需要n个宿主机的问题,我们现在有非常多的应用,所有我们的物理机也是蛮多的,所以我们需要有机器管理宿主机器的能力。
[站外图片上传中...(image-5c137a-1512119266558)]
后记
--
现在alibaba研发团队重新开始维护dubbo,之后dubbo对docker的支持也会更好。在没有成熟之前,这些方案还没有使用的线上环境。不过我相信容器化,是一种趋势。作为一个高龄程序猿,还是需要不断的接触新的事物,这是一个终生学习的时代。