当前位置: 首页 > article >正文

Dubbo开发系列

 一、概述

 

以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面 和 Dubbo 数据面 。

  • 服务治理控制面。服务治理控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin 控制台等,如果采用了 Service Mesh 架构则还包含 Istio 等服务网格控制面。
  • Dubbo 数据面。数据面代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作。
    • 服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程
    • 服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程

 二、Dubbo 数据面

从数据面视角,Dubbo 帮助解决了微服务实践中的以下问题:

  • Dubbo 作为 服务开发框架 约束了微服务定义、开发与调用的规范,定义了服务治理流程及适配模式
  • Dubbo 作为 RPC 通信协议实现 解决服务间数据传输的编解码问题

1、服务开发框架

微服务的目标是构建足够小的、自包含的、独立演进的、可以随时部署运行的分布式应用程序,几乎每个语言都有类似的应用开发框架来帮助开发者快速构建此类微服务应用,比如 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 指标采集等服务治理抽象,并适配到特定的产品实现。

2、通信协议

Dubbo 从设计上不绑定任何一款特定通信协议,HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等几乎所有主流的通信协议,Dubbo 框架都可以提供支持。 这样的 Protocol 设计模式给构建微服务带来了最大的灵活性,开发者可以根据需要如性能、通用型等选择不同的通信协议,不再需要任何的代理来实现协议转换,甚至你还可以通过 Dubbo 实现不同协议间的迁移。

Dubbo Protocol 被设计支持扩展,您可以将内部私有协议适配到 Dubbo 框架上,进而将私有协议接入 Dubbo 体系,以享用 Dubbo 的开发体验与服务治理能力。比如 Dubbo3 的典型用户阿里巴巴,就是通过扩展支持 HSF 协议实现了内部 HSF 框架到 Dubbo3 框架的整体迁移。

Dubbo 还支持多协议暴露,您可以在单个端口上暴露多个协议,Dubbo Server 能够自动识别并确保请求被正确处理,也可以将同一个 RPC 服务发布在不同的端口(协议),为不同技术栈的调用方服务。

Dubbo 提供了两款内置高性能 Dubbo2、Triple (兼容 gRPC) 协议实现,以满足部分微服务用户对高性能通信的诉求,两者最开始都设计和诞生于阿里巴巴内部的高性能通信业务场景。

Dubbo2 协议是在 TCP 传输层协议之上设计的二进制通信协议
Triple 则是基于 HTTP/2 之上构建的支持流式模式的通信协议,并且 Triple 完全兼容 gRPC 但实现上做了更多的符合 Dubbo 框架特点的优化。
总的来说,Dubbo 对通信协议的支持具有以下特点:

  • 不绑定通信协议
  • 提供高性能通信协议实现
  • 支持流式通信模型
  • 不绑定序列化协议
  • 支持单个服务的多协议暴露
  • 支持单端口多协议发布
  • 支持一个应用内多个服务使用不同通信协议

 Dubbo 开发系列

1、Dubbo服务治理详解— 核心概念和架构

2、Dubbo—核心优势 

3、Dubbo 与 gRPC、Spring Cloud、Istio 的关系

4、Dubbo—Admin 整体架构与安装步骤

5、Dubbo 开发入门

6、 Dubbo Spring Boot Starter 开发微服务应用

7、Dubbo 融合 Nacos 成为注册中心

8、Dubbo—流量管控 

9、微服务事务管理(Dubbo) 

10、Dubbo指标埋点_dubbo监控指标 

11、Dubbo 环境隔离 

12、Dubbo 流量管控—权重比例 

13、Dubbo诊断与调优—请求耗时采样 


http://www.kler.cn/news/136758.html

相关文章:

  • Python URL编码
  • jQuery快速填充非form数据
  • javaWeb项目-ssm+jsp大学生校园兼职系统功能介绍
  • 物联网消息队列Emqx日志配置及日志追踪以及Centos7上的rc.local开机不执行、git提交的小问题
  • 【vuejs】富文本框输入的字符串按规则解析填充表单
  • 专业第三方的控价价值
  • 2023 羊城杯 final
  • 【测试功能篇 01】Jmeter 压测接口最大并发量、吞吐量、TPS
  • git容易出问题的命令
  • gzip 压缩优化大 XML 响应的处理方法
  • 1688阿里巴巴API 1688商品采集API 1688获取商品列表API 订单API
  • c++ std::variant用法
  • django自带的cache无法多进程共享
  • 互联网上门洗衣洗鞋店小程序开发;
  • Python-列表和元祖的区别
  • 《深度学习500问》外链笔记
  • 从零开始:Rust环境搭建指南
  • DolphinDB 基于 Glibc 升级的性能优化实战案例
  • 美国费米实验室SQMS启动“量子车库”计划!30+顶尖机构积极参与
  • 在 Windows 中关闭 Nginx 所有进程
  • Java 获取本地ip网卡信息
  • Linux系统中sz和rz命令详解(文件传输、上传、下载)
  • 使用k8s部署一个简单MySQL8服务,但是不能挂载
  • 二十三种设计模式全面解析-职责链模式的高级应用-日志记录系统
  • Linux文本处理工具awk用法总结
  • python 对比数据库,生成sql