dubbo-servicecomb: 实现 dubbo 技术向 spring cloud 平滑演进
本文提供一个参考技术方案,实现 dubbo 技术向 spring cloud 平滑演进。支持平滑演进的核心问题是要解决老微服务和新微服务之间的互通问题,并且在很长的一个开发周期内,老微服务和新微服务能够被统一管理。 技术架构方案还需要具备足够的弹性,能够支持业务持续迭代的进行功能开发,能够支持未来的服务合并和拆分。
该方案使用 dubbo-servicecomb。dubbo-servicecomb 帮助实现 dubbo 应用、spring cloud 应用统一注册和发现,并通过 dubbo REST 沟通 spring cloud 应用和 dubbo 应用,同时我们引入了 spring cloud gateway网关,网关在持续迭代演进的过程中扮演非常重要的角色,可以我的博客单体应用微服务改造实践中有详细的介绍。遗留系统还有很多前端的服务,该方案中假设前端应用采用spring boot+struts开发,不过没关系,采用tomcat、spring mvc等技术开发的前端应用依然适用于这个方案。前端应用的部署形态是非常灵活的,可以采用CDN的方式部署到其他region,有可以按照下面方案展示的那样,和所有微服务统一注册和管理。下图展示了该方案微服务的调用关系。
该方案的代码示例可以从github下载,项目由5个微服务组成:
price-provider: dubbo微服务,监听 dubbo 协议
order-consumer: dubbo微服务,监听 rest 协议
portal-consumer: spring cloud 微服务, 监听 rest 协议
spring-cloud-gateway: 应用网关
stucts-website: 前端服务,采用 spring boot+struct开发。
下图展示了部分微服务在开源注册中心里面注册的服务信息:
平滑演进的思路:
(1) 老版本的 dubbo 微服务 2.6.x、2.7.x 不再提供修改和重构。新服务使用 spring cloud 应用开发。dubbo 微服务的能力通过新增 dubbo rest 微服务对外开放。
(2) 如果新版本spring cloud微服务需要访问老版本的 dubbo 微服务,在 dubbo REST 里面增加一个 REST 接口,REST 接口调用老版本的 dubbo 微服务实现, spring cloud 应用调用 REST 接口来访问老版本的 dubbo 微服务。由于老版本的 dubbo 微服务不再提供修改和重构, 因此不需要考虑老版本的 dubbo 微服务访问 spring cloud 应用的场景, 能够减少重构的风险。
(3)老版本的 dubbo 微服务功能,可以循序渐进的采用spring cloud微服务重新实现,比如按照迭代计划一次实现几个接口。
- 点赞
- 收藏
- 关注作者
评论(0)