认识Dubbo
- Dubbo是阿里巴巴公司开源的一个高性能、轻量级的WEB和 RPC框架,可以和Spring框架无缝集成。
- Dubbo为构建企业级微服务提供了三大核心能力: 服务自动注册和发现、面向接口的 远程方法调用, 智能容错和负载均衡
- 官网:https://cn.dubbo.apache.org/zh-cn/
Dubbo可以做什么
按照微服务架构的定义,采用它的组织能够很好的提高业务迭代效率与系统稳定性,但前提是要先能保证微服务按照期望的方式运行,要做到这一点需要解决服务拆分与定义、数据通信、地址发现、流量管理、数据一致性、系统容错能力等一系列问题。Dubbo 可以帮助解决如下微服务实践问题
- 微服务编程范式和工具
Dubbo 支持基于 IDL 或语言特定方式的服务定义,提供多种形式的服务调用形式(如同步、异步、流式等) - 高性能的 RPC 通信
Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现,并支持序列化协议扩展,在实现上解决网络连接管理、数据传输等基础问题 - 服务监控与治理
Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。除此之外,您还可以用 Admin 控制台监控微服务状态,通过周边生态完成限流降级、数据一致性、链路追踪等能力 - 部署在多环境
Dubbo 服务可以直接部署在容器、Kubernetes、Service Mesh等多种架构下 - 活跃的社区
Dubbo 项目托管在 Apache 社区,有来自国际、国内的活跃贡献者维护着超 10 个生态项目,贡献者包括来自海外、阿里巴巴、工商银行、携程、蚂蚁、腾讯等知名企业技术专家,确保 Dubbo 及时解决项目缺陷、需求及安全漏洞,跟进业界最新技术发展趋势 - 庞大的用户群体
Dubbo3 已在阿里巴巴成功取代 HSF 框架实现全面落地,成为阿里集团面向云原生时代的统一服务框架,庞大的用户群体是 Dubbo 保持稳定性、需求来源、先进性的基础。
Dubbo的核心特性
- 灵活部署模式
一键拉起服务治理体系,屏蔽底层跨平台的微服务基础设施复杂度,支持虚拟机、Docker、Kubernetes、服务网格等多种部署模式 - 服务发现
Dubbo提供了高性能、可伸缩的服务发现机制,面向百万集群实例规模设计,默认提供Nacos、Zookeeper等注册中心适配并支持自定义扩展 - 流量管控
Dubbo提供的基于路由规则的流量管控策略,可以帮助实现全链路灰度、金丝雀发布、按比例流量转发、动态调整调试时间、设置重试次数等服务治理能力 - 通信协议
支持Http/2、gRPC、TCP、REST等任意通信协议,切换协议只需要修改一行配置,支持单个端口上的多协议发布 - 多语言SDK
提供 java、Golang. Rust. Node.js、Python 等多语言 SDK 实现,支持基于IDL的跨语言服务定义和基于Protobuf、Json的数据编码 - 可扩展性
一切皆可扩展,通过扩展(Filter、Router、Service、Discovery、Configuration等)自定义调用、管控行为、适配开源微服务生态 - 可观测性
多维度的可观测指标(Metrics、Tracing、Accesslog)帮助了解服务运行状态、Admin控制台、Grafana等帮助实现数据指标可视化展示。 - 认证鉴权
支持基于TLS的传输链路认证与加密通信以及基于请求身份的权限校验,帮助构建零信任分布式微服务体系。 - 服务网格(Service Mesh)
灵活的数据面(Proxy & Proxyless)部署形态支持,无缝接入lstio控制面治理体系 - 丰富生态
一站式微服务生态适配:注册中心、网关、限流降级、负载均衡、一致性事务、异步消息、Tracing等
Dubbo的工作原理
从抽象架构上分为两层:服务治理抽象控制面 和 Dubbo 数据面 。
服务治理抽象控制面
服务治理抽象控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin 控制台等,如果采用了 Service Mesh 架构则还包含 Istio 等服务网格控制面
Dubbo数据面
数据面代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作
- 服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程
- 服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程
从数据面视角,Dubbo帮助解决了微服务实践中的以下问题
- Dubbo作为服务开发框架约束了微服务定义、开发与调用的规范,定义了服务治理流程及适配模式
- Dubbo作为RPC通信协议实现解决了服务间数据传输的编解码问题
服务开发框架
- 微服务的目标是构建足够小的、自包含的、独立演进的、可以随时部署运行的分布式应用程序,几乎每个语言都有类似的应用开发框架来帮助开发者快速构建此类微服务应用,比如 Java 微服务体系的 Spring Boot,它帮 Java 微服务开发者以最少的配置、最轻量的方式快速开发、打包、部署与运行应用。
- 微服务的分布式特性,使得应用间的依赖、网络交互、数据传输变得更频繁,因此不同的应用需要定义、暴露或调用 RPC 服务,那么这些 RPC 服务如何定义、如何与应用开发框架结合、服务调用行为如何控制?这就是 Dubbo 服务开发框架的含义,Dubbo 在微服务应用开发框架之上抽象了一套 RPC 服务定义、暴露、调用与治理的编程范式,比如 Dubbo Java 作为服务开发框架,当运行在 Spring 体系时就是构建在 Spring Boot 应用开发框架之上的微服务开发框架,并在此之上抽象了一套 RPC 服务定义、暴露、调用与治理的编程范式
Dubbo 作为服务开发框架包含的具体内容如下
- RPC 服务定义、开发范式: 比如 Dubbo 支持通过 IDL 定义服务,也支持编程语言特有的服务开发定义方式,如通过 Java Interface 定义服务
- RPC 服务发布与调用 API: Dubbo 支持同步、异步、Reactive Streaming 等服务调用编程模式,还支持请求上下文 API、设置超时时间等。
- 服务治理策略、流程与适配方式等: 作为服务框架数据面,Dubbo 定义了服务地址发现、负载均衡策略、基于规则的流量路由、Metrics 指标采集等服务治理抽象,并适配到特定的产品实现。
Dubbo支持的通讯协议
- Dubbo 从设计上不绑定任何一款特定通信协议,HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等几乎所有主流的通信协议,Dubbo 框架都可以提供支持。 这样的 Protocol 设计模式给构建微服务带来了最大的灵活性,开发者可以根据需要如性能、通用型等选择不同的通信协议,不再需要任何的代理来实现协议转换,甚至你还可以通过 Dubbo 实现不同协议间的迁移。
- Dubbo 提供了两款内置高性能 Dubbo2、Triple (兼容 gRPC) 协议实现,以满足部分微服务用户对高性能通信的诉求,两者最开始都设计和诞生于阿里巴巴内部的高性能通信业务场景
- Dubbo2 协议: 是在 TCP 传输层协议之上设计的二进制通信协议
- Triple: 则是基于 HTTP/2 之上构建的支持流式模式的通信协议,并且 Triple 完全兼容 gRPC 但实现上做了更多的符合 Dubbo 框架特点的优化。
Dubbo 服务治理
- 服务开发框架解决了开发与通信的问题,但在微服务集群环境下,我们仍需要解决无状态服务节点动态变化、外部化配置、日志跟踪、可观测性、流量管理、高可用性、数据一致性等一系列问题,我们将这些问题统称为服务治理。
- Dubbo 抽象了一套微服务治理模式并发布了对应的官方实现,服务治理可帮助简化微服务开发与运维,让开发者更专注在微服务业务本身。
- 地址发现
Dubbo服务发现具备高性能、支持大规模集群、服务级元数据配置等优势,默认提供Nacos、Zookeeper、Consul等多种注册中心适配,与SpringCloud、Kubernetes Service模型打通,支持自定义扩展 - 负载均衡
Dubbo默认提供加权随机、加权轮询、最少活跃请求数优先、最短响应时间优先、一致性哈希和自适应负载等策略 - 流量路由
Dubbo支持通过一系列流量规则控制服务调用的流量分布与行为,基于这些规则可以实现基于权重的比例流量分发、灰度验证、金丝雀发布、按请求参数的路由、同区域优先、超时配置、重试、限流降级等能力 - 链路追踪
Dubbo官方通过适配OpenTelemetry提供了对Tracing全链路追踪支持,用户可以接入支持OpenTelemetry标准的产品如Skywalking、Zipkin等,另外很多社区如Skywalking、Zipkin等在官方也提供了对Dubbo的适配 - 客观测性
Dubbo示例通过Prometheus等上报Qps、RT、请求次数、成功率、异常次数等多维度的可观测指标帮助了解服务运行状态,通过接入Grafana、Admin控制台帮助实现数据指标可视化展示 - Dubbo Admin
Admn控制台提供了Dubbo集群的可视化图,通过Admin你可以完成集群的几乎所有的管控工作。
搭建Dubbo运行环境
1.搭建运行环境之前的基本概念
1.1注册中心
注册中心是 Dubbo 服务治理的核心组件,Dubbo 依赖注册中心的协调实现服务(地址)发现,自动化的服务发现是微服务实现动态扩缩容、负载均衡、流量治理的基础。Dubbo 的服务发现机制经历了 Dubbo2 时代的接口级服务发现、Dubbo3 时代的应用级服务发现
- Dubbo 作为一款微服务框架,最重要的是向用户提供跨进程的 RPC 远程调用能力。如上图所示,Dubbo 的服务消费者(Consumer)通过一系列的工作将请求发送给服务提供者(Provider)。
- 为了实现这样一个目标,Dubbo 引入了注册中心(Registry)组件,通过注册中心,服务消费者可以感知到服务提供者的连接方式,从而将请求发送给正确的服务提供者
1.2服务发现
服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 IP 地址的情况下实现通信。
实现服务发现的方式有很多种,Dubbo 提供的是一种 Client-Based 的服务发现机制,通常还需要部署额外的第三方注册中心组件来协调服务发现过程
- Zookeeper 注册中心
- Nacos 注册中心
- Multicast 注册中心
- Redis 注册中心
- 多注册中心
- Simple 注册中心
- https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/
服务注册与发现的过程
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
1.3Zookeeper 注册中心
Zookeeper 是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用
- ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。
- 它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
- ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
- 官网:https://zookeeper.apache.org/
- 软件下载地址:https://archive.apache.org/dist/zookeeper/
Zookeeper服务注册与发现的过程
- 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
- 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
- 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。
Windows环境下安装Zookeeper
-
下载zookeeper
https://archive.apache.org/dist/zookeeper/zookeeper-3.8.0/ -
解压缩zookeeper
解压到没有中文、没有空格的路径
如:D:\soft\apache-zookeeper-3.8.0-bin -
修改zoo.cfg配置,重新运行
将conf下的zoo_sample.cfg复制一份改名为zoo.cfg
修改zoo.cfg的配置信息: dataDir=…/data 数据存储的目录
修改zoo.cfg的配置信息 dataLogDir=…/logs 项目的日志目录
audit.enable=true
-
运行Zookeeper Server
进入Zookeeper所在的bin目录
双击zkServer.cmd
2.dubbo-admin
- dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。
- 但是为了让用户更好的管理众多的dubbo服务,官方提供了一个可视化的管理程序dubbo-admin。
- dubbo-admin控制台提供了 Dubbo 集群的可视化视图,通过 Admin 你可以完成集群的几乎所有管控工作。
- 安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理。
Windows下安装dubbo-admin 3-2
- 下载dubbo-admin
网址:https://github.com/apache/dubbo-admin - 解压缩dubbo-admin
解压到没有中文、没有空格的路径中
如:D:\dubbo-admin - 进入目录,修改dubbo-admin配置
进入bin\config目录,修改服务端口
修改zookeeper的服务地址 - 运行dubbo-admin
进入bin目录,双击startup.cmd
打开浏览器,输入localhost:7001 默认用户名和密码为root