您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

如何用一个端口同时暴露 HTTP1/2、gRPC、Dubbo 协议?

时间:2023-03-17 16:31:38  来源:今日头条  作者:闪念基因

本文我们将介绍 Apache Dubbo 灵活的多协议设计原则,基于这一设计,在 Dubbo 框架底层可灵活的选用 HTTP/2、HTTP/REST、TCP、gRPC、JsonRPC、Hessian2 等任一 RPC 通信协议,同时享用统一的 API 与对等的服务治理能力。同时,我们还介绍了 Dubbo 的单端口多协议能力,也就是在单个端口同时监听、处理多个协议,这对于简化多协议同时发布的场景非常有用。

不绑定 RPC 协议的设计原则

 

Aliware

Dubbo 框架不绑定任何通信协议,你可以根据业务场景选择 HTTP/2 通信协议,也可以选用 HTTP/REST、TCP(Dubbo2)、gRPC、JsonRPC、Hessian2 等官方支持的通信协议,如果以上协议都不能满足需求,还可以非常方便的通过定制方式接入自定义协议。如果你想在一个应用内使用多个协议,也可以非常容易的做到,比如一个接口使用 HTTP/2 通信,另一个接口使用 TCP 通信,一个应用内发布或调用多个使用不同协议的服务。

 

通过 Dubbo 框架的多协议支持,你可以做到:

  • 将任意通信协议无缝地接入 Dubbo 服务治理体系。Dubbo 体系下的所有通信协议,都可以享受到 Dubbo 的编程模型、服务发现、流量管控等优势。比如 gRPC over Dubbo 的模式,服务治理、编程 API 都能够零成本接入 Dubbo 体系。
  • 兼容不同技术栈,业务系统混合使用不同的服务框架、RPC 框架。比如有些服务使用 gRPC 或者 Spring Cloud 开发,有些服务使用 Dubbo 框架开发,通过 Dubbo 的多协议支持可以很好的实现互通。
  • 让协议迁移变的更简单。通过多协议、注册中心的协调,可以快速满足公司内协议迁移的需求。比如如从自研协议升级到 Dubbo 协议,Dubbo 协议自身升级,从 Dubbo 协议迁移到 gRPC,从 HTTP 迁移到 Dubbo 协议等。

官方接入的主流协议

 

Aliware

HTTP/2 (Triple)

Triple 协议是 Dubbo3 发布的面向云原生时代的通信协议,它基于 HTTP/2 并且完全兼容 gRPC 协议,原生支持 Streaming 通信语义,自 Triple 协议开始,Dubbo 还支持基于 Protobuf 的服务定义与数据传输。Triple 具备更好的网关、代理穿透性,因此非常适合于跨网关、代理通信的部署架构,如服务网格等。

Triple 协议的核心特性如下:

  • 支持 TLS 加密、PlAIntext 明文数据传输
  • 支持反压与限流
  • 支持 Streaming 流式通信

在编程与通信模型上,Triple 协议支持如下模式:

  • 消费端异步请求(Client Side Asynchronous Request-Response)
  • 提供端异步执行(Server Side Asynchronous Request-Response)
  • 消费端请求流(Request Streaming)
  • 提供端响应流(Response Streaming)
  • 双向流式通信(Bidirectional Streaming)

TCP (Dubbo2)

Dubbo2 协议是基于 TCP 传输层协议之上构建的一套 RPC 通信协议,由于其紧凑、灵活、高性能的特点,在 Dubbo2 时代取得了非常广泛的应用,是企业构建高性能、大规模微服务集群的关键通信方案。在云原生时代,我们更推荐使用通用性、穿透性更好的 Triple 协议。

gRPC

你可以用 Dubbo 开发和治理微服务,然后设置使用 gRPC 协议进行底层通信。但为什么要这么做那,与直接使用 gRPC 框架对比有什么优势?简单的答案是,这是使用 gRPC 进行微服务开发的常用模式,具体请往下看。

gRPC 是谷歌开源的基于 HTTP/2 的通信协议,如同我们在产品对比[1]文档中提到的,gRPC 的定位是通信协议与实现,是一款纯粹的 RPC 框架,而 Dubbo 定位是一款微服务框架,为微服务实践提供解决方案。因此,相比于 Dubbo,gRPC 相对欠缺了微服务编程模型、服务治理等能力的抽象。

在 Dubbo 体系下使用 gRPC 协议 (gRPC over Dubbo Framework) 是一个非常高效和轻量的选择,它让你既能使用原生的 gRPC 协议通信,又避免了基于 gRPC 进行二次定制与开发的复杂度 (二次开发与定制 gRPC,是很多企业规模化实践后证实不可避免的环节,Dubbo 框架替开发者完成了这一步,让开发者可以直接以最简单的方式使用 gRPC)。

REST

微服务领域常用的一种通信模式是 HTTP + JSON,包括 Spring Cloud、Microprofile 等一些主流的微服务框架都默认使用的这种通信模式,Dubbo 同样提供了对基于 HTTP 的编程、通信模式的支持。

其他通信协议

除了以上介绍的几种协议之外,你还可以将以下协议运行在 Dubbo 之上。对 Dubbo 而言,只需要修改一行简单的配置,就可以切换底层服务的通信协议,其他外围 API 和治理能力不受影响。

  • Hessian2
  • Thrift
  • JsonRPC

单端口多协议

 

Aliware

自 Dubbo 3.2 版本开始,Dubbo 提供了单个端口上的协议复用能力,通过调整 Protocol 配置即可实现。

比如在开启 HTTP/2 (Triple) 协议 或 gRPC 协议后,如我们同时启动端口复用,还可以在相同的端口上为服务增加 TCP (Dubbo2) 协议、Qos 协议的支持。这些所有流量的入口都在一个统一 port 端口, Dubbo 框架负责在端口之上识别不同的 RPC 协议,并进行处理器分发,从而实现单个端口上的协议复用。

对于需要处理多个协议的场景,端口复用非常有价值。它可以用于服务的协议迁移,并且可以节约端口以及相关的资源,减少运维的复杂性等。

实现原理

以下是端口复用实现的原理图

 

  • 在服务的创建阶段,通过从 Config 层获取到服务导出的协议配置从而创建不同的 Protocol 对象进行导出。在导出的过程中,如果不是第一次创建端口复用的 Server,那么 Exchanger 会将 Protcol 层传递的数据保存到 Server,用于后续处理该协议类型的消息。
  • 当客户端的消息传递过来后,首先会通过 Server 传递给 ProtocolDetector,如果完成了识别,那么就会标记该客户端为对应的协议。并通过 WireProtocol 配置对应的处理逻辑,最后交给 ChannelOperator 完成底层的 IO 框架和对应的 Dubbo 框架的处理逻辑的绑定。
  • 以上的协议识别完成之后,Channel 已经确定了如何处理远程的客户端消息,通过对应的 ServerPipeline 进行处理即可(在处理的过程中也会根据配置信息决定消息的处理线程)。

使用场景

以下是几种常见的使用场景。

  • 最常用的是用于服务发现。这允许应用程序通过网络发现服务,然后使用同一端口与它们通信,有助于降低网络通信的复杂性,并使其更易于管理。
  • 可以用于负载平衡。这允许应用程序在多个远程服务或服务集群之间平衡负载,有助于提高服务的可扩展性、可靠性和可用性。
  • 可以用于服务监控。这允许应用程序监视远程服务的运行状况,并在服务出现故障或变得不可用时发出警报,有助于确保服务的可用性并减少停机时间。

参考用例:

https://Github.com/apache/dubbo-samples/tree/master/dubbo-samples-port-unification

使用方式

在同一主机上部署多个服务或需要通过负载均衡器访问多个服务。

关于 Dubbo 支持的配置方式 配置说明[2]

服务多协议导出

ext-protocol 参数支持配置多个不同的协议,协议之间通过","进行分隔。

xml 配置


 
<dubbo:protocol name="dubbo" port="-1" ext-protocol="tri,"/>


<bean id="greetingService" class="org.apache.dubbo.demo.provider.GreetingServiceImpl"/>


<dubbo:service delay="5000" version="1.0.0" group="greeting" timeout="5000" interface="org.apache.dubbo.demo.GreetingService" ref="greetingService" protocol="dubbo"/>

API 配置


 
ProtocolConfig config = new ProtocolConfig(CommonConstants.TRIPLE, -1);


config.setExtProtocol(CommonConstants.DUBBO+",");

yaml 配置

dubbo:

  Application:

    name: dubbo-springboot-demo-provider

  protocol:

    name: tri

    port: -1

    ext-protocol: dubbo,

properties 配置


 
dubbo.protocol.name=tri
dubbo.protocol.ext-protocol=dubbo,
dubbo.protocol.port=20880

Qos 接入

Qos 模块导入

<dependency>

    <groupId>org.apache.dubbo</groupId>

    <artifactId>dubbo-qos</artifactId>

</dependency>

完成 Qos 模块的导入之后,相关的配置项可参考 Qos 操作手册[3]进行配置。

默认情况下,基于端口复用的 Qos 服务在模块导入后是启动的。

Qos 使用

将 Qos 协议接入到端口复用的场景下,需要在建立连接之后,客户端先向服务端发送消息,对比将 Qos 协议通过单个端口提供服务,端口复用版的 Qos 协议在处理 te.NET 连接的情况下需要用户执行一些操作,完成协议识别(二选一)。

  1. 直接调用命令
    直接调用 telnet 支持的命令也可以完成识别,在用户不熟悉的情况下可以调用 help 指令完成识别

 

2. 发送 telnet 命令识别
通过 telnet 命令建立连接之后,执行以下几个步骤:

    1. 使用 crtl + "]" 进入到 telnet 交互界面(telnet 默认的 escape character)
    2. 调用 "send ayt" 向服务端发送特殊识别字段(为 telnet 协议的一个特殊字段)
    3. 回车完成消息发送并进入到 dubbo 的交互界面

 

服务引用


dubbo-samples-port-unification[4]中的例子作为基础, 引用不同协议的服务和非端口复用情况下的配置是一致的,下面通过 Consumer 端的 InvokerListener 输出调用过程中的 URL 信息。


 
ReferenceConfig<GreetingService> reference = new ReferenceConfig<>();
reference.setInterface(GreetingService.class);
reference.setListener("consumer");
reference.setProtocol(this.protocol);
// reference.setProtocol(CommonConstants.DUBBO);
// reference.setProtocol(CommonConstants.TRIPLE);

 

总结

 

Aliware

对于微服务实践中经常会遇到的多协议通信的场景,Dubbo 不绑定协议的设计让用户可以灵活的选择通信协议,整个协议选择过程对上层 API 编码与运维治理完全透明;对于要在一个集群内同时处理多个协议的场景,Dubbo 的多协议支持也可以从容应对,而单端口的多协议复用支持进一步简化了这一过程。

在接下来的一篇文章中,我们将详细介绍如何在 Dubbo 框架中开发 gRPC 协议通信的服务,极大的简化了 gRPC 微服务开发成本,避免了二次开发,为原生 gRPC 提供了统一的编程 API 与开箱即用的服务治理能力。

相关链接:

[1]产品对比

https://cn.dubbo.apache.org/zh-cn/overview/what/xyz-difference/

[2]配置说明

https://cn.dubbo.apache.org/zh-cn/overview/mannual/JAVA-sdk/reference-manual/config/

[3]Qos 操作手册

https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/qos/overview/

[4]dubbo-samples-port-unification

https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-port-unification

作者:华钟明

来源:微信公众号:阿里巴巴中间件

出处
:https://mp.weixin.qq.com/s/3Qr6diH6WJSwv8HIma7-eA



Tags:协议   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
被滥用的竞业协议,正在围困普通人
按下发送键的那一刻,函道的手是颤抖的。在与国内某互联网企业竞业限制纠纷案终审开庭的前一晚,他发表了一篇斟酌了三天的文章。文中,他自述了如何被企业发起竞业限制及与企业竞...【详细内容】
2024-03-25  Search: 协议  点击:(18)  评论:(0)  加入收藏
一代神器WiFi万能钥匙宣布支持Wi-Fi 7协议:广告位减少70%
快科技3月15日消息,近日尚网网络宣布旗下WiFi万能钥匙升级,新版本已完成安卓平台全量更新,iOS平台预计3月下旬完成功能覆盖。据介绍,通过“一减两升”的操作,为用户提供顺畅、省...【详细内容】
2024-03-15  Search: 协议  点击:(33)  评论:(0)  加入收藏
SSL协议是什么?关于SSL和TLS的常见问题解答
SSL(安全套接字层)及其后继者TLS(传输层安全)是用于在联网计算机之间建立经过身份验证和加密的链接的协议。尽管SSL协议在 1999年已经随着TLS 1.0的发布而被弃用,但我们仍将这些...【详细内容】
2024-02-06  Search: 协议  点击:(69)  评论:(0)  加入收藏
从零开始了解网络协议:TCP/IP详解
从零开始了解网络协议:TCP/IP详解 在当今数字化的时代,网络协议已经成为我们生活中不可或缺的一部分。作为互联网的基础,网络协议规定了数据如何在不同的网络设备之间传输。TC...【详细内容】
2024-02-01  Search: 协议  点击:(59)  评论:(0)  加入收藏
大模型平台都在用的SSE协议是怎么样的?
在现代Web应用程序中,实时通信对于许多场景都是至关重要的。为了实现实时数据传输,开发人员可以选择不同的协议和技术。本文将介绍SSE(Server-Sent Events)协议的基本知识,并与We...【详细内容】
2024-01-03  Search: 协议  点击:(77)  评论:(0)  加入收藏
促进直播夜经济 禁止签订“最低价协议” 2023年直播电商十大政策
2023年,直播电商业态在经历多重监管后,逐渐走向合规道路。2月份,中共中央、国务院印发《质量强国建设纲要》,要求规范发展直播电商;杭州、上海也发布相关合规指引,禁止签订“最低...【详细内容】
2023-12-26  Search: 协议  点击:(48)  评论:(0)  加入收藏
利用离婚协议就能转移财产、逃避债务?法院:无效!
身边的事今年5月26日,汕头市某建筑工程有限公司(以下简称“建筑公司”)与陈某合同纠纷一案诉至新野县法院,建筑公司申请冻结了陈某的银行卡。经法院调解,双方达成一致意见,由被告...【详细内容】
2023-12-20  Search: 协议  点击:(28)  评论:(0)  加入收藏
robots.txt是什么,robots协议怎么写配置,robots文件怎么写,robots协议的用途
详解robots协议文件的相关问题,主要谈谈robots.txt是什么、配置怎么写、有什么作用;以及,怎么给自己的网站合理配置robots.txt规则。什么是robots.txt协议简单地说,robots协议就...【详细内容】
2023-12-20  Search: 协议  点击:(108)  评论:(0)  加入收藏
欧盟人工智能法案达成协议
7月7日,在瑞士日内瓦“人工智能造福人类全球峰会”上,参会者与机器人互动。 新华社记者 连 漪摄近日,在经历了36个小时“马拉松式”谈判后,欧洲议会、欧盟委员会和27个成员国的...【详细内容】
2023-12-18  Search: 协议  点击:(45)  评论:(0)  加入收藏
网络工程师必备:理解VRRP协议及其容错功能
在当今的计算机网络环境中,网络可靠性已成为一项关键要求。为了满足这一要求,虚拟路由冗余协议(VRRP)提供了一种有效的解决方案。本文将详细介绍VRRP协议的工作原理、配置方法以...【详细内容】
2023-12-11  Search: 协议  点击:(100)  评论:(0)  加入收藏
▌简易百科推荐
手机就可以修改WiFi密码,进行网络提速,还能防止别人蹭网
随着网络的普及和使用频率的增加,很多人可能遇到了一些网络管理上的问题,比如忘记了WiFi密码、网络速度缓慢、或者发现有不明设备在家中蹭网。相信朋友们也曾遇到过吧?但是,你知...【详细内容】
2024-04-03  老毛桃    Tags:WiFi密码   点击:(6)  评论:(0)  加入收藏
手机WiFi信号满格却接收消息延迟?这里有妙招帮你解决!
在现代社会,手机已经成为了我们生活中不可或缺的一部分。无论是工作、学习还是娱乐,手机都扮演着重要的角色。然而,有时我们会遇到一些令人烦恼的问题,比如明明手机WiFi信号满格...【详细内容】
2024-04-03  蔡前进    Tags:手机WiFi   点击:(5)  评论:(0)  加入收藏
SASE技术应用落地的五个关键趋势
在Gartner 最新发布的《2023网络技术成熟度曲线》报告中认为,SASE技术已经开始走出最初的技术炒作期,将逐步迈向新一轮的实用落地阶段。在Gartner发布的《Hype Cycle for Ente...【详细内容】
2024-04-01    安全牛  Tags:SASE   点击:(10)  评论:(0)  加入收藏
提示“该网站安全证书存在问题,连接可能不安全”如何解决
在你输入网址并浏览网页时,如果你的浏览器弹出一个警告,提示“网站的安全证书存在问题”,或是显示一个红色的锁标志,这些都是网站不安全的警示。这些提示通常是由HTTPS协议中的S...【详细内容】
2024-03-18  倏然间    Tags:网站安全证书   点击:(8)  评论:(0)  加入收藏
如何有效排除CAN总线错误
控制器局域网(CAN)控制器局域网(CAN)是现代车辆中电子元件无缝运行的基础。在远程信息处理领域,CAN总线系统的效率至关重要,其能够实现支撑当今汽车技术的复杂功能。然而,CAN总...【详细内容】
2024-02-20    千家网  Tags:CAN   点击:(46)  评论:(0)  加入收藏
网络连接受限或无连接怎么办?这里提供几个修复办法
可能错误提示 连接受限或无连接:连接具有有限的连接或无连接。你可能无法访问Internet或某些网络资源。 连接受限。排除和解决“连接受限或无连接”错误此错误可能由计算机上...【详细内容】
2024-02-06  驾驭信息纵横科技    Tags:网络连接受限   点击:(43)  评论:(0)  加入收藏
如何将Mac连接到以太网?这里有详细步骤
在Wi-Fi成为最流行、最简单的互联网连接方式之前,每台Mac和电脑都使用以太网电缆连接。这是Mac可用端口的标准功能。如何将Mac连接到以太网如果你的Mac有以太网端口,则需要以...【详细内容】
2024-02-03  驾驭信息纵横科技    Tags:Mac   点击:(66)  评论:(0)  加入收藏
简易百科之什么是端口映射
端口映射,也称为端口转发,是一种网络通信中的技术手段,通过将内网中的一个端口上的数据流量转发到另一个端口,使得外部网络能够访问到内部网络中的特定服务。在实现上,端口映射通...【详细内容】
2024-01-26    简易百科  Tags:端口映射   点击:(155)  评论:(0)  加入收藏
ip因频繁登陆已被禁止访问 无法显示图片 怎么办
首先,我们要明白,部分网站为了有效遏制数据爬取和非法攻击,保证访问速度和普通用户查询,会在系统中增加网络安全设备,加强安全防护机制,并提前设置安全访问规则。因此,一旦用户的行...【详细内容】
2024-01-20  何福意思    Tags:ip   点击:(63)  评论:(0)  加入收藏
电脑连上wifi却上不了网怎么办
当电脑连接上 WiFi 却无法上网时,可能会让人感到困惑和沮丧。这个问题通常会有多种可能的原因,包括网络配置问题、路由器故障、无线适配器问题等。在面对这个问题时,可以尝试以...【详细内容】
2024-01-16  编程资料站    Tags:wifi   点击:(69)  评论:(0)  加入收藏
站内最新
站内热门
站内头条