原 Dubbo与Spring Cloud共

一、背景

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

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

二、头脑风暴

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

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

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

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

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

三、方案

Sample1:借助Ribbon调用Dubbo应用。

优点:

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

缺点:

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

Sample2:借助Sidecar

        使用Sidecar,Dubbo微服务必须实现健康检查(对于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的转换。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构沉思录

微服务等于Spring Cloud?一文告诉你微服务到底是什么。

首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。

632
来自专栏Java技术

小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐

十年间,负载均衡的前沿技术层出不穷,令用户眼花缭乱。经常在技术网站、文档中出现的“四层负载均衡”、“七层负载均衡”字眼有什么含义?有什么区别?对客户网络有哪些不...

741
来自专栏不止思考

不懂高性能的负载均衡设计?没关系,架构师带你飞

在软件系统的架构设计中,对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案。负载均衡本质上是用于将用户流量进行均衡减压的,因此在互联网的大流量项目中,...

732
来自专栏纯洁的微笑

不懂高性能的负载均衡设计?没关系,架构师带你飞

在软件系统的架构设计中,对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案。负载均衡本质上是用于将用户流量进行均衡减压的,因此在互联网的大流量项目中,...

642
来自专栏企鹅号快讯

9种高性能可用高并发的技术架构

1、分层 分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对简单并比较单一的职责,然后通过上层对下层的依赖和调度...

2228
来自专栏云社区全球资讯抢先看

9种高性能可用高并发的技术架构

1、分层 分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对简单并比较单一的职责,然后通过上层对下层的依赖和调度...

4900
来自专栏Java架构师学习

微服务Dubbo与Spring Cloud架构对比

微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架...

4407
来自专栏IT大咖说

支撑百度搜索引擎99.995%可靠名字服务架构设计

摘要 百度搜索引擎是全球最大的中文搜索引擎,致力于向人们提供"简单,可依赖"的信息获取方式。百度网页搜索部架构师郑然为我们分享支撑百度搜索引擎的可靠名字服务架构...

2785
来自专栏编程

9种高性能可用高并发的技术架构,让你成为架构师迈进一大步

分层架构是逻辑上的,在物理部署上,三层架构可以部署在同一个物理机器上,但是随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层结构分别部署在不同的服务器...

18410
来自专栏SDNLAB

Service Chain——如何黏合网络资源池

一、 网络资源池 1. 什么是“网络资源池”? 传统模式下,服务器、网络和存储是基于物理设备连接的,因此,针对服务器、存储的网络策略基于物理端口进行部署,设备及...

36413

扫码关注云+社区