文档章节

Dubbo与Spring Cloud共存/迁移方案

边鹏_尛爺鑫
 边鹏_尛爺鑫
发布于 2018/04/24 10:45
字数 892
阅读 112
收藏 2

一、背景

        最近换了一家公司,公司使用的微服务架构是Dubbo,由于项目存在久远,所以多多少少遗留了一些开发和部署的问题。作为了一个早已经习惯了Spring Cloud开发的我来说,当下项目确实有太多的不便。加上Dubbo系统比较庞大,短期之内无法完成技术栈的迁移。因此需要“分步走”,即:初期实现两者共存,后期逐步绞杀Dubbo应用,最终实现技术栈的统一。

        p.s. 这里并没有贬低Dubbo的意思,仅是按照该场景讨论。

        

二、头脑风暴

        架构迁移、技术栈更换、项目重构时的第一步往往不是“改造”,而是“停止修改”。基于这个原则,个人不太倾向于去立即大幅重构Dubbo应用原先的代码。原因有二:首先是原则问题,更重要的是时间成本、技术风险很难得到控制。

        假如新编写的Spring Cloud应用去进行迁就,例如:

        完全不动Dubbo遗留系统,使用RestTemplateFeign编写DubboDubboX)的RESTful API客户端代理 —> 有一定的实现复杂度、Dubbo接口改造成RESTful API后,消费方都需要再次修改(开始是代理,后来不用代理,因此有二次修改的问题)。

        索性将Spring Cloud应用也整合Dubbo—>存在改造不完整、技术栈不统一、无法约束开发人员用哪种方式API、额外的复杂度的问题(越多的组件、越多的环节意味着越多的坑)。

        考虑到一般来讲,遗留系统的改造过程中一般都是新系统调用老系统,很少出现老系统大规模调用新系统的场景。因此,笔者列出几种仅需少量的代码编写成本即可实现Spring CloudDubbo短期/长期共存,并且侵入性较小,同时还允许我们改造遗留Dubbo系统的几种方案,算是抛砖引玉。期待朋友们提出更优雅、成本更小的方案。

三、方案

Sample1:借助Ribbon调用Dubbo应用。

优点:

        架构不依赖Eureka或其他服务注册组件,借助Ribbon去调用Dubbo微服务暴露的RESTful API

缺点:

        如果Dubbo微服务较多时,均需手动配置,不适合新式的部署环境(例如Docker,因为每次部署IP/端口可能都不同)

Sample2:借助Sidecar

        使用SidecarDubbo微服务必须实现健康检查(对于Spring Boot程序即:添加spring-boot-starter-actuator依赖)。

优点:

        这种方式下,Dubbo应用也可通过Sidecar调用Spring Cloud微服务的接口,Sidecar是连接Spring Cloud应用于Dubbo应用的桥梁。

可以通过Sidecar传播Dubbo微服务的健康状态到Eureka Server

缺点:

        在于每个Dubbo微服务节点必须额外部署一个Sidecar应用。

        在Dubbo微服务调用Spring Cloud微服务时,增加了调用链的长度。(需使用Sidecar转发)

Sample3:借助Eureka实现整合

        将Dubbo应用也注册到Eureka上。

优点:

        没有多余的组件(除了Dubbo的注册中心ZK)     没有什么局限

缺点:

        对于非Spring Boot的应用,改造有一定的成本。

        手动编码为Dubbo应用开放RESTful API,实际迁移过程可以借助cglib或者lombok之类的工具,实现从Dubbo接口道RESTful API的转换。

© 著作权归作者所有

共有 人打赏支持
边鹏_尛爺鑫
粉丝 29
博文 30
码字总数 24888
作品 0
成都
程序员
私信 提问
放弃 Dubbo,选择最流行的 Spring Cloud 微服务架构实践与经验总结

前言 在使用 Spring Cloud 之前,我们对微服务实践是没有太多的体会和经验的。从最初的开源软件云收藏来熟悉 Spring Boot,到项目中的慢慢使用,再到最后全面拥抱 Spring Cloud。 这篇文章给...

Java微服务
01/08
0
0
凉凉了,Eureka 2.x 宣布停更,Spring Cloud 何去何从?

今年 Dubbo 活了,并且被 Apache 收了。同时很不幸,Spring Cloud 下的 Netflix Eureka 组件项目居然宣布停止开发了。。 已经从 Dubbo 迁移至 Spring Cloud 上的人,你们还好吗? 闭源:htt...

Java技术栈
2018/07/11
0
2
中小企业对Spring Cloud微服务架构实践经验总结的一些思考

Spring Cloud 在国内中小型公司能用起来吗?从 2016 年初一直到现在,我们在这条路上已经走了一年多。 在使用 Spring Cloud 之前,我们对微服务实践是没有太多的体会和经验的。从最初的开源软...

Java大蜗牛
2018/08/13
0
0
凉凉了,Eureka 宣布闭源,Spring Cloud 何去何从?

今年 Dubbo 活了,并且被 Apache 收了。同时很不幸,Spring Cloud 下的 Netflix Eureka 组件项目居然宣布闭源了。。 已经从 Dubbo 迁移至 Spring Cloud 上的人,你们还好吗? 闭源:https:/...

Java技术栈
2018/07/11
13.2K
15
Nacos 计划发布v0.2版本,进一步融合Dubbo和SpringCloud生态

在近期的Aliware Open Source 成都站的活动上,阿里巴巴高级工程师邢学超(于怀)分享了Nacos v0.2的规划和进度,并对Nacos v0.3的控制台进行了预览。Nacos v0.2将进一步融入Duboo和Spring ...

中间件小哥
2018/09/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别

C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字...

天王盖地虎626
15分钟前
1
0
关于我这三年的架构历程(待完成)

从16年7月实习至今,快三年的开发经历中,经手了好几个项目。目前有幸作为一个项目的负责人,完成了一个项目的完全架构设计。因此想记录下这份架构设计中的点点面面。 总架构: 基于DNS的负载...

赵熠熠
16分钟前
0
0
springboot 使用 flyway 进行数据库版本管理

要在启动时自动运行Flyway数据库迁移,请将其添加 org.flywaydb:flyway-core到类路径中。 迁移是表单中的脚本V<VERSION>__<NAME>.sql(使用<VERSION>下划线分隔的版本,例如“1”或“2_1”)...

NotFound403
35分钟前
4
0
spring 5.1.5版本(二)

spring 5.1.5版本(一) spring 5.1.5版本(二) spring 5.1.5版本(三) 对象创建方式 方式一 applicationContext.xml <?xml version='1.0' encoding='UTF-8'?><beans xmlns="http://ww......

gwl_
37分钟前
0
0
CMake生成Mingw用的Make文件

CMake 在win下 默认会生成vc++的nmake用的make 当没安装时 就会报 -- Building for: NMake Makefiles -- The C compiler identification is unknown -- The CXX compiler identification is......

shzwork
54分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部