当前主流微服务框架
在认识了微服务之后,下面让我们看看当前的主流微服务框架的实现原理。下文主要介绍 Dubbo
与 Spring Cloud
,在此基础上,还会说明底层的通信协议。最后,将针对 Spring Boot
与 Spring Cloud
的关系做一个介绍。
Dubbo简介
Dubbo
是比较出名的框架,但这本书不会重点介绍,只做简单说明。
Dubbo框架
相信很多人都听说过 Dubbo
框架,它是开源分布式服务框架,致力于提供高性能和透明化的 RPC
远程服务调用方案,以及 SOA
服务治理方案。图 1.9 是 Dubbo
官网上的一幅框架图,我们还是根据图进行说明。

从图 1.9 中可以看出,Dubbo
主要分为四个部分(也有人说三个部分)。在框架中,提供者(Provider
)提供服务,并将服务注册进注册中心(Registry
),然后消费者(Consumer
)可以去注册中心订阅服务。同时,监控器(Monitor
)可以进行监控,监控对服务的调用次数与耗时。
Spring Cloud简介
先用一句话描述什么是 Spring Cloud
。Spring Cloud
提供全套的分布式系统解决方案,是一个 “全家桶”。它在 Spring Boot
的基础上简化了分布式系统基础设施的开发。如服务发现和服务注册、配置中心、负载均衡、断路器、消息总线、数据监控等,都可以利用 Spring Boot
做到一键启动和部署。
Spring Cloud
并没有做重复性劳动,它只是将开发得比较成熟的服务框架 “拿” 过来,通过 Spring Boot
进行再封装,屏蔽复杂的配置和实现原理,最终做成易部署和易维护的分布式系统开发工具包。Spring Cloud
具有以下特点。
-
做到了良好的开箱即用,可扩展性机制覆盖。
-
包括服务发现和服务注册。
-
服务地址路由。
-
软负载均衡。
-
断路器。
-
分布式消息传递。
HTTP与RPC简介
介绍了 Dubbo
与 Spring Cloud
之后,我们也已经知道 Dubbo
使用 RPC
进行服务之间的调用,以及 Spring Cloud
使用 HTTP
进行服务间通信。那么它们的特点和具体的使用场景是什么?
对比
HTTP
是超文本传输协议;RPC
是远程过程调用,RPC
包含传输协议和编码协议。RPC
也可以用 HTTP
作为传输协议,但一般是用 TCP
作为传输协议,用 JSON
作为编码协议。
RPC
主要用于系统间的服务通信。
使用场景
HTTP
接口的使用场景:接口不多、系统与系统交互较少,是解决信息孤岛问题初期常使用的一种通信手段,这种接口简单、直接、开发方便,而且可以利用现有的 HTTP
进行传输。
然而,如果是一个大型网站,内部子系统较多、服务也非常多,RPC
的好处就显示出来了。RPC
采用的是长连接机制,不必每次通信都进行 3 次握手,大大减少网络开销;其次,RPC
一般都有注册中心,以及丰富的监控管理,如发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。
RPC
主要针对大型企业,而 HTTP
主要针对小型企业,因为 RPC
效率更高,而 HTTP
开发迭代会更快。了解它们的使用场景,可以让我们在项目选型中根据需要更好地进行选择。
Spring Boot与Spring Cloud的关系
本书主要介绍微服务,而且是基于 Spring
的,这时就需要介绍 Spring Cloud
,并讲解 Spring Cloud
的每一个模块。
Spring Cloud
是一个微服务开发工具包,提供分布式系统的配置管理、服务发现、断路器、智能路由、微代理、控制总线等功能,可降低分布式开发的成本。
首先看 Spring Boot
是什么。Spring Boot
旨在简化创建产品级的 Spring
应用和服务,可简化配置文件,使用嵌入式 Web
服务器,含有诸多开箱即用微服务功能。Spring Boot
是 Spring
提供的一套快速配置,可以基于 Spring Boot
快速开发单个微服务。同时,Spring Boot
也是 Spring
的引导,用于启动 Spring
,使我们能够快速学习和使用 Spring
。
Spring Boot
与 Spring Cloud
看起来似乎没有联系,其实不然。Spring Cloud
基于 Spring Boot
,为微服务体系开发中的框架问题,提供了一整套的解决方案。
所以,Spring Cloud
是一个基于 Spring Boot
实现的云应用开发工具。Spring Boot
专注于快速、方便集成的个体,Spring Cloud
关注全局的服务治理框架;Spring Boot
使用默认大于配置的理念,集成方案已经默认选择,不配置也没问题,Spring Cloud
大部分是基于 Spring Boot
来实现的。
因此,微服务离不开 Spring Boot
,也离不开 Spring Cloud
。