Dubbo是阿里巴巴开源的分布式服务框架,Dubbo是阿里巴巴内部的SOA服务化治 理方案的核心框架,每天为2000+个服务提供3,000,000,000+次访问量支持,并被广泛 应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使 用鸟。它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合 (或者最大限度地松耦合),主要分为以下角色如图所示。
图: dubbo服务框架
Provider:暴露接口的服务提供者
Consumer:调用远程服务的服务消费者
Registry:服务注册中心
Monitor:服务监控中心
服务运行流程是:首先微服务注册中心启动,加载服务提供者。微服务提供者在启动 时,向注册中心,尝试注册自己提供的服务,服务注册失败不启动。微服务消费者在启动 时,向注册中心查询自己所需的服务列表与服务提供者的元数据SI。注册中心返回服务 提供者地址列表及元数据给服务消费者,如果有服务提供者的状态变更,注册中心将推送 变更数据给消费者提醒此次服务变更。服务消费者发起服务调用后,从提供者地址列表中, 基于负载均衡算法选择一个提供者,如果调用失败,则重复此过程;直到调用成功或列表 为空。微服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次 统计数据到监控中心以便监控整个微服务运行状态。
(2)SpringCloud 框架
SpringCloud是基于SpringBoot组件进行集成的;SpringBoot是由Pivotal团队提供 的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架是 典型的“约定优先于配置”思想产物。使用了特定的方式来进行配置,从而使开发人员不 再需要定义样板化的配置。SpringBoot其实不是全新的框架,它整合了许多框架的使用方 式,并且简化框架需要的配置;甚至如果没有特殊需要的基础上,达到开箱即用Hl。
SpringCloud并不是某一个具体的框架,而是一系列框架的有序集合。充分利用 SpringBoot的开发便利性巧妙地简化了微服务基础设施的开发,如服务发现,服务注册、 配置中心、消息总线、负载均衡、断路器、数据监控等,都可以做到简易部署。SpringCloud 并没有开发新的组件,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框 架组合起来,通过SpringBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给 开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
如图所示SpringCloud组件图微服务的基础设施由Zuul网关,EurekaServer服务注册 中心,ConfigServer服务配置中心,FeinClient声明式调度中心与Sleuth服务追踪组件 共同构成。可以从组件图的构成看出SpringCloud在某种程度上为”注册 +springmvc=springcloud”这大大降低了开发的难度,提高了开发的易用性,便于后期的业 务升级和系统迭代。
从技术角度说;Dubbo实现了服务治理的基础,但是要完成一个完备的微服务架构, 还需要在各环节去扩展和完善以保证集群的健康,减轻开发、测试以及运维各个环节上增 加出来的压力,这样才能让各环节人员真正的专注于业务逻辑。而SpringCloud依然发扬 了 Spring Source整合一切的作风即,以标准化的姿态将一些微服务架构的成熟产品与框 架揉为一体,并继承了 Spring Boot简单配置、快速开发、轻松部署的特点,让原本复杂 的架构工作变得相对容易上手,而Dubbo只是实现了服务治理㈣。SpringCloud下面有17 个子项目分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,从这一点 来说,Dubbo只是Spring Cloud Netflix中的一个子集。从技术上说dubbo框架只是专注于 服务之间的治理,如果我们需要使用配置中心、分布式跟踪这些内容都需要自己去集成, 这样无形中使用dubbo的难度就会增加。Dubbo虽然也是一个非常优秀的服务治理框架 図,并且在服务治理、灰度发布、流量分发这方面做的比SpringCloud还好,但是长期更 新停滞。除过当当网在基础上增加了 REST支持外,已有两年多的时间几乎都没有任何更 新了。在使用过程中出现问题,提交到github的Issue也少有回复。而与之相反Spring Cloud 自从发展到现在,仍然在不断的高速发展,从github上提交代码的频度和发布版本的时 间间隔就可以看出,现在SpringCloud即将发布2.0版本,到了后期会更加完善和稳定。 这无疑使SpringCloud更具有整体性的框架优势。