Dubbo 简介
大家好,从现在开始给大家分享 — Dubbo 专题。那么我们为什么要学习 Dubbo 呢?Dubbo 是什么东西呢?对于刚接触或刚开始工作的小伙伴可能有很多疑问。首先 Dubbo 是我们微服务开发的基础能力框架,在国内可以说是首屈一指的 RPC 框架,它不仅有完整的服务治理能力、服务注册发现能力、容错能力、集群能力等等,而且还提供丰富的可插拔的拓展能力。那什么是 RPC 以及市面上有哪些 RPC 框架呢?他们的性能优势如何呢?那么通过我们这个 Dubbo 专题系列进行详细的讲解。
前言
首先解释一下什么是 RPC ,RPC 其全称为 Remote Procedure Call 即远程过程调用。RPC 用于在远程计算机上调用函数过程(通常也可以在同一台机器上的进程之间使用它)。假设这个场景:服务 A、B 两个服务分别部署在两台服务器上,服务 A 需要调用服务 B 上的某个方法,此时因为这是在两台不同的服务器部署的服务,因此需要通过建立网络连接进行交互的这一过程就叫远程服务调用。 下图展示常见的两种 RPC 调用方式:
- RPC 跨进程调用:即在相同操作系统中不同进程间的服务调用
- PRC 跨系统且跨进程调用:即在不同操作系统间且跨进程远程服务调用
从通讯协议层面上讲可以分为:
-
基于 HTTP 协议:
1.1 SOAP (基于 XML 传输)
1.2 REST (基于 JSON 传输)
1.3 Hessian(基于二进制传输)
-
基于 TCP 协议:
2.1 Mina
2.2 Netty
从语言和平台层面可分为:
-
Java平台
1.2 RMI
-
.NET平台
2.1 Remoting
从调用过程可分为:
-
同步调用
-
异步调用
1. 什么是 Dubbo
Apache Dubbo 是由阿里巴巴开源的高性能,基于 Java 的 RPC 框架。像在许多 RPC 系统中一样, Dubbo 围绕定义服务的思想,可以通过指定其参数、方法和返回类型调用远程的方法。在服务器端,服务器实现此接口(说明:服务提供端提供服务所实现的接口规范)并运行 Dubbo 服务器以处理客户端调用。在客户端,客户端有一个服务端存根(说明:服务端提供的接口规范),通过这个存根就可以像调用本地方法一样调用远程服务端方法。
2. RPC 生态对比
**Tips:**以下对目前比较流行的 RPC 框架功能特性做一个简单横向对比。
Dubbo | Montan | rpcx | gRPC | Thrift | |
---|---|---|---|---|---|
语言环境 | Java | Java | Go | 跨语言 | 跨语言 |
分布式 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
多序列化框架 | 支持 | 支持 (当前支持Hessian2、Json,可扩展) | 支持 | 不支持 (只支持Protobuf) | 不支持 (Thrift格式) |
多种注册中心 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
管理中心 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
跨编程语言 | 不支持 | 不支持(支持Php Client和C server) | 不支持 | 支持 | 支持 |
-
Dubbo:阿里巴巴开源
-
Montan:新浪微博开源
-
rpcx:Golang net/rpc
-
gRPC:Google 开源
-
Thrift:Facebook 开源
3. Dubbo 发展历史
-
2.5.x-2.6.x 主要功能特性
1.1 服务注册/发现
1.2 健康检查
1.3 多协议支持
1.4 序列化服务
1.5 服务集群
1.6 失败执行策略
1.7 负载均衡策略
1.8 服务治理
1.9 服务监控
1.10 服务运行容器
1.11 直连提供者
1.12 服务代理
1.13 版本/分组管理
1.14 泛化调用
1.15 延迟暴露
1.16 本地存根
1.17 服务降级
1.18 路由规则配置
-
2.7.x 主要功能特性
2.1 应用粒度服务注册
2.2 HTTP/2 (gRPC) 协议支持
2.3 Protobuf 支持
2.4 性能优化,调用链路性能提升 30%
2.5 支持 TLS 安全传输链路
2.6 优化的消费端线程模型
2.7 新增更适应多集群部署场景的负载均衡策略
2.8 全新的应用开发 API (兼容老版本应用)
2.9 服务自省
2.10 异步编程模型 - 消费端/提供端异步
-
Dubbo3.0 规划
3.1 Dubbo 内核之 Filter 链的异步化
3.2 Reactive(响应式)支持
3.3 云原生 / ServiceMesh 方向的探索
3.4 融合并支持阿里内部
4. Dubbo 生态
**Tips:**下面是目前 Dubbo 框架支持的相关开源生态产品,包括了阿里自身开源维护的产品和其他国内外公司开源的产品。包括了:服务治理、注册中心、链路追踪、服务监控、 JVM 服务诊断、日志管理、服务网关等等。这些生态产品基本都是开箱即用。
5. Dubbo 国内发展前景
随着目前微服务架构的火热,基础架构技术选型基本如下几种形式:
- **Spring Cloud Netflix **微服务技术套件
- **Spring Cloud Alibaba **微服务技术套件
- SpringBoot、Dubbo、开源服务治理框架整合
**Spring Cloud Netflix **是由 Netflix 贡献的一套完整的微服务架构技术栈,目前很多组件 Netflix 官方已经不在官方支持同时在微服务架构中一个重要的问题:分布式事务未能提供解决方案。
Spring Cloud Alibaba是由阿里巴巴开源的一套微服务解决方案最近两年发展势头非常猛,也提供了比较完善的生态组件支持并且对分布式事务提供了解决方案(Seata)。
基于 SpringBoot、Dubbo 技术体系是过度到 Spring Cloud Alibaba、Spring Cloud Netflix 或者下一代微服务架构的中间产物。目前国内有不少公司采用这套架构来做,需要由公司架构师对整个技术栈进行架构设计和框架整合,自由发挥程度较高。
对比前面几种架构方案,在微服务架构中服务与服务间通讯基本基于两种通讯方式 (也可以是消息中间件):HTTP、RPC。我们在技术选型中对于内部服务基本采用 RPC 方式(高效、大数据传输等),而在国内 Dubbo 是首屈一指的RPC服务治理框架。
6. 版本说明
本系列以 Dubbo 最新版本2.7.x(目前最新版本:2.7.8)进行讲解。
7. 基本技能
初学者应该具备基本的 Java 编程能力、网络通讯编程能力、常见的设计模式和一定的项目编程实战能力。
8. 小结
在本小节中我们主要学习了什么是 RPC、了解什么是 Dubbo、Dubbo 的发展历史以及 Dubbo 国内生态环境等。
本节课程的重点如下:
-
理解 RPC
-
知道 Dubbo 是什么
-
了解 Dubbo 的发展历史
-
了解 Dubbo 国内发展前景