Dubbo 快速入门
Dubbo 快速入门
简介
Apache Dubbo 是一款高性能、轻量级的开源微服务框架。它提供了 RPC 通信 与 微服务治理 两大关键能力。
Dubbo 的核心功能
Dubbo 提供了六大核心能力:
- 面向接口代理的高性能 RPC 调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。
- 智能容错和负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
- 服务自动注册和发现:支持多种注册中心服务,服务实例上下线实时感知。
- 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如 Protocol、Transport、Serialization 被设计为扩展点,平等对待内置实现和第三方实现。
- 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
- 可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。
Dubbo 的优势
Dubbo 提供了一站式微服务解决方案,包括服务定义、服务发现、服务通信到流量管控等几乎所有的服务治理能力,并且尝试从使用上对用户屏蔽底层细节,以提供更好的易用性。
定义服务在 Dubbo 中非常简单与直观:
- 使用与某种语言绑定的方式(如 Java 中可直接定义 Interface)
- 使用 Protobuf IDL 语言的方式。
Dubbo 提供了丰富的通信模型:
- 消费端异步请求(Client Side Asynchronous Request-Response)
- 提供端异步执行(Server Side Asynchronous Request-Response)
- 消费端请求流(Request Streaming)
- 提供端响应流(Response Streaming)
- 双向流式通信(Bidirectional Streaming)
Dubbo 提供基于客户端的服务发现机制,可以采用多种方式启用服务发现:
- 使用第三方的注册中心组件,如 Nacos、Zookeeper、Consul、Etcd 等。
- 将服务的组织与注册交给底层容器平台,如 Kubernetes,这被理解是一种更云原生的方式
Dubbo 提供了多种流量控制手段,包括负载均衡、流量路由、请求超时、流量降级、重试等策略。基于这些基础能力可以轻松的实现更多场景化的路由方案,包括金丝雀发布、A/B 测试、权重路由、同区域优先等。
Dubbo 的扩展性良好:通过 Filter、Router、Protocol 等几乎存在于每一个关键流程上的扩展点定义,我们可以丰富 Dubbo 的功能或实现与其他微服务配套系统的对接,包括 Transaction、Tracing 目前都有通过 SPI 扩展的实现方案,具体可以参见 Dubbo 扩展性的详情,也可以在 apache/dubbo-spi-extensions 项目中发现与更多的扩展实现。
Dubbo 在支持微服务集群方面有着非常大的规模与非常久的实践经验积累,是最具有企业规模化微服务实践话语权的框架之一。
Dubbo3 的设计是面向云原生的:
- 首先是对云原生基础设施与部署架构的支持,包括 Kubernetes、Service Mesh 等。
- 另一方面,Dubbo 众多核心组件都已面向云原生升级,包括 Triple 协议、统一路由规则、对多语言支持。
Dubbo3 新特性
全新服务发现模型
相比于 2.x 版本中的基于接口
粒度的服务发现机制,3.x 引入了全新的基于应用粒度的服务发现机制, 新模型带来两方面的巨大优势:
- 进一步提升了 Dubbo3 在大规模集群实践中的性能与稳定性。新模型可大幅提高系统资源利用率,降低 Dubbo 地址的单机内存消耗(50%),降低注册中心集群的存储与推送压力(90%), Dubbo 可支持集群规模步入百万实例层次。
- 打通与其他异构微服务体系的地址互发现障碍。新模型使得 Dubbo3 能实现与异构微服务体系如 Spring Cloud、Kubernetes Service、gRPC 等,在地址发现层面的互通, 为连通 Dubbo 与其他微服务体系提供可行方案。
下一代 RPC 通信协议
定义了全新的 RPC 通信协议 – Triple,一句话概括 Triple:它是基于 HTTP/2 上构建的 RPC 协议,完全兼容 gRPC,并在此基础上扩展出了更丰富的语义。 使用 Triple 协议,用户将获得以下能力
- 更容易到适配网关、Mesh 架构,Triple 协议让 Dubbo 更方便的与各种网关、Sidecar 组件配合工作。
- 多语言友好,推荐配合 Protobuf 使用 Triple 协议,使用 IDL 定义服务,使用 Protobuf 编码业务数据。
- 流式通信支持。Triple 协议支持 Request Stream、Response Stream、Bi-direction Stream
云原生
Dubbo3 构建的业务应用可直接部署在 VM、Container、Kubernetes 等平台,Dubbo3 很好的解决了 Dubbo 服务与调度平台之间的生命周期对齐,Dubbo 服务发现地址 与容器平台绑定的问题。
在服务发现层面,Dubbo3 支持与 Kubernetes Native Service 的融合,目前限于 Headless Service。
Dubbo3 规划了两种形态的 Service Mesh 方案,在不同的业务场景、不同的迁移阶段、不同的基础设施保障情况下,Dubbo 都会有 Mesh 方案可供选择, 而这进一步的都可以通过统一的控制面进行治理。
- 经典的基于 Sidecar 的 Service Mesh
- 无 Sidecar 的 Proxyless Mesh
用户在 Dubbo2 中熟知的路由规则,在 3.x 中将被一套统一的流量治理规则
取代,这套统一流量规则将覆盖未来 Dubbo3 的 Service Mesh、SDK 等多种部署形态, 实现对整套微服务体系的治理。
快速开始
定义服务