微服务架构的基础框架选择

96
文思li
2017.06.06 17:31* 字数 1847

第一次实施微服务架构时,我们应该选择哪个基础框架更好呢?

Spring Boot(Spring Cloud)?Dubbo?

目前,Spring Boot(Spring Cloud)在国内的知名度并不高,可能这与国内阿里巴巴开源服务治理框架Dubbo有一定的关系,除了Dubbo本身较为完善的中文文档之外,不少科技公司的架构师均出自阿里系,所以就目前情况看,短期国内还是Dubbo的天下,但Spring Boot(Spring Cloud)正在迎头赶上。

我们该如何分析选择呢?请看分析对比(不对和欠缺的地方欢迎大家拍砖):

1背景

Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。阿里巴巴近几年对开源社区的贡献引人注目的,为中国互联网人争足了面子,使得阿里巴巴在国人眼里已经从电商升级为一家科技公司了。

Spring Cloud,从命名我们就可以知道,它是Spring Source的产物,Spring社区的强大背书,可以说是Java企业界最有影响力的组织了,除了Spring Source之外,还有Pivotal和Netfix是其强大的后盾与技术输出。其中Netflix开源的整套微服务架构套件是Spring Cloud的核心。

小结:Netfix国外影响力大,阿里国内影响力大,英雄不问出处,平手。1:1

2社区活跃度

Dubbo的更新已经是几个月前,并且更新频率很低。而Spring Cloud的更新是十几分钟前,仍处于高速迭代的阶段。

小结:在社区活跃度上,Spring

Cloud优于Dubbo,这对于没有大量精力与财力维护这部分开源内容的团队来说,Spring Cloud会是更优的选择。1.5:1

3架构完整度

许很多人会说Spring

Cloud和Dubbo的对比有点不公平,Dubbo只是实现了服务治理,而Spring Cloud下面有17个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo只是Spring Cloud Netflix中的一个子集。但是在选择框架上,方案完整度恰恰是一个需要重点关注的内容。根据Martin Fowler对微服务架构的描述中,虽然该架构相较于单体架构有模块化解耦、可独立部署、技术多样性等诸多优点,但是由于分布式环境下解耦,也带出了不少测试与运维复杂度.根据微服务架构在各方面的要素,看看Spring Cloud和Dubbo都提供了哪些支持:


Dubbo对于上表中总结为“无”的组件不代表不能实现,而只是Dubbo框架自身不提供,需要另外整合以实现对应的功能,比如分布式配置:可以使用淘宝的diamond。

Dubbo服务注册中心Zookeeper,服务调用方式:HTTP,Java RMI,Dubbo自身的RPC。

Spring Cloud服务注册中心Eureka服务调用方式REST API。

RPC vs REST:

另外,由于Dubbo是基础框架,其实现的内容对于我们实施微服务架构是否合理,也需要我

们根据自身需求去考虑是否要修改。读Martin Fowler的microservices一文,其定义的服务间通信是HTTP协议的REST API。那么这两种有何区别呢?

先来说说,使用Dubbo的RPC来实现服务间调用的一些痛点:

1服务提供方与调用方接口依赖方式太强:我们为每个微服务定义了各自的service抽象接口,并通过持续集成发布到私有仓库中,调用方应用对微服务提供的抽象接口存在强依赖关系,因此不论开发、测试、集成环境都需要严格的管理版本依赖,才不会出现服务方与调用方的不一致导致应用无法编译成功等一系列问题,这也会直接影响本地开发的环境要求,往往一个依赖很多服务的上层应用.若没有严格的版本管理制度或开发一些自动化工具,这样的依赖关系维护管理很麻烦。

而REST接口相比RPC更为轻量化,服务提供方和调用方的依赖只是依靠一纸契约,不存在代码级别的强依赖。当然REST接口也有痛点,因为接口定义过轻,很容易导致定义文档与实际实现不一致导致服务集成时的问题,但是该问题只需要让每个服务的代码与文档一体化,就能解决。在分布式环境下,REST方式的服务依赖要比RPC方式的依赖更为灵活.

小结:Dubbo实现了服务治理的基础,但是要完成一个完备的微服务架构,还需要在各环节

去扩展和完善而Spring

Cloud依然发扬了Spring Source整合一切的作风,以标准化的姿态将一些微服务架构的成熟产品与框架揉为一体,并继承了Spring Boot简单配置、快速开发、轻松部署的特点,让原本复杂的架构工作变得相对容易上手一些。2:1

4文档质量

Dubbo的文档在国内开源框架中算是一流的,非常全,并且讲解的也非常深入,由于版本已经稳定不再更新,所以也不太会出现不一致的情况,另外提供了中文与英文两种版本,对于国内开发者来说,阅读起来更加容易上手。

Spring Cloud由于整合了大量组件,文档在体量上自然要比dubbo多很多,文档内容上还算简洁清楚,但是更多的是偏向整合,更深入的使用方法还是需要查看其整合组件的详细文档。另外由于Spring Cloud基于Spring Boot,很多例子相较于传统Spring应用要简单很多(因为自动化配置,很多内容都成了约定的默认配置),这对于刚接触的开发者可能会有些不适应,比较建议了解和学习Spring Boot之后再使用Spring Cloud,不然可能会出现很多一知半解的情况。

小结:2:1.5

从目前Spring Cloud的被关注度和活跃度上来看,很有可能将来会成为微服务架构的标准框架。

个人建议,小规模微服务架构Dubbo,企业级大规模的spring Boot

下一篇文章Spring Boot特性详解!

日记本