当前主流微服务框架

在认识了微服务之后,下面让我们看看当前的主流微服务框架的实现原理。下文主要介绍 DubboSpring Cloud,在此基础上,还会说明底层的通信协议。最后,将针对 Spring BootSpring Cloud 的关系做一个介绍。

Dubbo简介

Dubbo 是比较出名的框架,但这本书不会重点介绍,只做简单说明。

Dubbo框架

相信很多人都听说过 Dubbo 框架,它是开源分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。图 1.9 是 Dubbo 官网上的一幅框架图,我们还是根据图进行说明。

image 2024 03 31 11 16 43 305
Figure 1. 图1.9 Dubbo框架图

从图 1.9 中可以看出,Dubbo 主要分为四个部分(也有人说三个部分)。在框架中,提供者(Provider)提供服务,并将服务注册进注册中心(Registry),然后消费者(Consumer)可以去注册中心订阅服务。同时,监控器(Monitor)可以进行监控,监控对服务的调用次数与耗时。

Dubbo的特点

  • 远程通信:对多种基于长连接的框架进行封装。

  • 集群容错:远程过程调用透明,在集群容错中主要有软负载均衡、失败容错、地址路由、动态配置等策略。

  • 自动发现:消费方能动态地查找服务提供方,地址透明。

优势

  • 使用 RPC 方式调用,调用性能更高。

  • 支持多种序列化协议。

  • Dubbo Admin 后台管理功能强大。

  • 在国内影响力比较大。

Spring Cloud简介

先用一句话描述什么是 Spring CloudSpring Cloud 提供全套的分布式系统解决方案,是一个 “全家桶”。它在 Spring Boot 的基础上简化了分布式系统基础设施的开发。如服务发现和服务注册、配置中心、负载均衡、断路器、消息总线、数据监控等,都可以利用 Spring Boot 做到一键启动和部署。

Spring Cloud 并没有做重复性劳动,它只是将开发得比较成熟的服务框架 “拿” 过来,通过 Spring Boot 进行再封装,屏蔽复杂的配置和实现原理,最终做成易部署和易维护的分布式系统开发工具包。Spring Cloud 具有以下特点。

  • 做到了良好的开箱即用,可扩展性机制覆盖。

  • 包括服务发现和服务注册。

  • 服务地址路由。

  • 软负载均衡。

  • 断路器。

  • 分布式消息传递。

HTTP与RPC简介

介绍了 DubboSpring Cloud 之后,我们也已经知道 Dubbo 使用 RPC 进行服务之间的调用,以及 Spring Cloud 使用 HTTP 进行服务间通信。那么它们的特点和具体的使用场景是什么?

RPC的特点

  • RPC 的核心并不在于使用什么协议。

  • RPC 可以在本地调用远程的方法,过程是无感的,调用是透明的,并不需要知道调用的方法是部署哪里。

  • RPC 可以解耦服务接口。

对比

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 BootSpring 提供的一套快速配置,可以基于 Spring Boot 快速开发单个微服务。同时,Spring Boot 也是 Spring 的引导,用于启动 Spring,使我们能够快速学习和使用 Spring

Spring BootSpring Cloud 看起来似乎没有联系,其实不然。Spring Cloud 基于 Spring Boot,为微服务体系开发中的框架问题,提供了一整套的解决方案。

所以,Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具。Spring Boot 专注于快速、方便集成的个体,Spring Cloud 关注全局的服务治理框架;Spring Boot 使用默认大于配置的理念,集成方案已经默认选择,不配置也没问题,Spring Cloud 大部分是基于 Spring Boot 来实现的。

因此,微服务离不开 Spring Boot,也离不开 Spring Cloud