Dubbo—核心优势

news2024/11/24 9:04:59

一、快速易用

无论你是计划采用微服务架构开发一套全新的业务系统,还是准备将已有业务从单体架构迁移到微服务架构,Dubbo 框架都可以帮助到你。Dubbo 让微服务开发变得非常容易,它允许你选择多种编程语言、使用任意通信协议,并且它还提供了一系列针对微服务场景的开发、测试工具帮助提升研发效率。

1、多语言 SDK

Dubbo 提供几乎所有主流语言的 SDK 实现,定义了一套统一的微服务开发范式。Dubbo 与每种语言体系的主流应用开发框架做了适配,总体编程方式、配置符合大多数开发者已有编程习惯。

比如在 Java 语言体系下,你可以使用 dubbo-spring-boot-starter 来开发符合 Spring、Spring Boot 模式的微服务应用,开发 Dubbo 应用只是为 Spring Bean 添加几个注解、完善 application.properties 配置文件。

 

sdk

2、任意通信协议

Dubbo 微服务间远程通信实现细节,支持 HTTP、HTTP/2、gRPC、TCP 等所有主流通信协议。与普通 RPC 框架不同,Dubbo 不是某个单一 RPC 协议的实现,它通过上层的 RPC 抽象可以将任意 RPC 协议接入 Dubbo 的开发、治理体系。

多协议支持让用户选型,多协议迁移、互通等变得更灵活。

protocols

3、加速微服务开发

3.1 项目脚手架

项目脚手架 项目脚手架让 Dubbo 项目创建、依赖管理更容易。 

比如通过如下可视化界面,勾选 Dubbo 版本、Zookeeper 注册中心以及必要的微服务生态选项后,一个完整的 Dubbo 项目模板就可以自动生成,接下来基于脚手架项目添加业务逻辑就可以了。

脚手架示例图

脚手架示例图

3.2 开发测试

相比于单体应用,微服务分布式的特性会让不同组织之间的研发协同变得困难,这时我们需要有效的配套工具,用来提升整体的微服务研发效率。

Dubbo 从内核设计和实现阶段就考虑了如何解决开发、测试与运维问题,比如 Dubbo RPC 协议均支持 curl 访问,让开发协作更简单;配合官方提供的生态工具,可以实现服务测试、服务 Mock、文档管理、单机运维等能力,并通过 Dubbo Admin 控制台将所有操作都可视化的展现出来。

 

二、超高性能

Dubbo 被设计用于解决阿里巴巴超大规模的电商微服务集群实践,并在各个行业头部企业经过多年的十万、百万规模的微服务实践检验,因此,Dubbo 在通信性能、稳定性方面具有无可比拟的优势,非常适合构建近乎无限水平伸缩的微服务集群,这也是 Dubbo 从实践层面优于业界很多同类的产品的巨大优势。

高性能数据传输

Dubbo 内置支持 Dubbo2、Triple 两款高性能通信协议。其中

  • Dubbo2 是基于 TCP 传输协议之上构建的二进制私有 RPC 通信协议,是一款非常简单、紧凑、高效的通信协议。
  • Triple 是基于 HTTP/2 的新一代 RPC 通信协议,在网关穿透性、通用性以及 Streaming 通信上具备优势,Triple 完全兼容 gRPC 协议。

以下是基于 Dubbo 3.2 版本得出的压测指标数据,您也可以通过 dubbo-benchmark 项目自行压测。

TCP protocol benchmark

对比 Dubbo 2.x 及早期 3.x 版本

  • 较小报文场景 createUser、getUser 下,提升率约 180%。
  • 极小报文 existUser(仅一个boolean值)下提升率约 24%
  • 较大报文 listUser 提升率最高,达到了 1000%!

 

Triple protocol benchmark

  • 较小报文场景 createUser、existUser、getUser 下,较 3.1 版本性能提升约 40-45%,提升后的性能与 gRPC 同场景的性能基本持平。
  • 较大报文场景 listUser 下较 3.1 版本提升了约 17%,相较于同场景下的 gRPC 低 11%。

 

了解更多

  • 通信协议
  • Benchmark 指标 (不定期更新)

构建可伸缩的微服务集群

业务增长带来了集群规模的快速增长,而集群规模的增长会对服务治理架构带来挑战:

  • 注册中心的存储容量瓶颈
  • 节点动态变化带来的地址推送与解析效率下降
  • 消费端存储大量网络地址的资源开销
  • 复杂的网络链接管理
  • 高峰期的流量无损上下线
  • 异常节点的自动节点管理

以上内容直接关系到微服务集群的稳定性,因此很容易成为影响集群和业务增长的瓶颈,集群规模越大,问题带来的影响面也就被进一步放大。很多开发者可能会想只有几个应用而已,当前不需要并不关心集群规模,但作为技术架构选型的关键因素之一,我们还是要充分考虑微服务集群未来的可伸缩性。并且基于对业界大量微服务架构和框架实现的调研,一些产品的性能瓶颈点可能很快就会到来(部分产品所能高效支持的瓶颈节点规模阈值都是比较低的,比如几十个应用、数百个节点)。

Dubbo 的优势在于近乎无限水平扩容的集群规模,在阿里巴巴双十一场景万亿次调用的实践检验,通过以下内容了解 Dubbo 构建生产可用的、可伸缩的大规模微服务集群背后的原理:

  • Dubbo3 服务发现
  • 流量管控

智能化流量调度

Dubbo3 内置了具备自适应感知集群负载状态、智能调节流量分布的限流与调度算法实现,从消费者、提供者两个不同视角智能调整流量分布,最大限度确保将流量调度到具有最佳处理能力的实例上,从而提升整个集群的吞吐量与稳定性。

自适应负载均衡

自适应负载均衡是从消费者视角考虑如何将请求分配到当前具有最优处理能力的机器实例。Dubbo3 新引入了两种负载均衡算法

  • 一种是基于公平性考虑的单纯 P2C 算法
  • 另一种是基于自适应的方法 adaptive,其试图自适应的衡量 provider 端机器的吞吐能力,然后将流量尽可能分配到吞吐能力高的机器上,以提高系统整体的性能。

自适应限流

与负载均衡运行在消费者端不同的是,限流功能运行在提供者端。其作用是限制提供端实例处理并发任务时的最大数量。从理论上讲,服务端机器的处理能力是存在上限的,因此当并发请求量达到或接近上限时,拒绝掉一部分请求反而是更好的选择。相比于人为提前设置静态最大并发值,自适应限流算法可以动态调整服务端机器的最大并发值,使其可以在保证机器不过载的前提下,尽可能多的处理接收到的请求。

admin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/893539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是低价治理服务

当商品的销售价低于品牌要求的建议价时,就会被认为是低价销售,销售的主体是店铺,那店铺的运营方就成了低价的主导者,低价行为大部分品牌都会跟进,低价店铺的信息品牌也会去收集,因为只有掌握了低价链接、低…

什么是 脏写,脏读,幻读,不可重复读?怎样能解决这四种问题?

我们通过如下语句先创建一个 student 学生表。我就以对学生表的操作来解释什么是脏写,脏读,幻读,不可重复读 创建完成之后随便插入一条数据 1. 脏写? 对于两个事务 SessionA,SessionB,如果SessionA修改了另…

无公网IP,公网SSH远程访问家中的树莓派教程

文章目录 前言 如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地…

Timeplate Definition

timeplate定义描述单个tester cycle,并指定所有event edges被放置在cycle的位置。 必须在引用之前定义所有的timeplates。一个procedure必须有至少一个timeplate定义,所有的时钟必须在timeplate定义中进行定义,timeplate的定义有以下格式&am…

C++ STL关联式容器(详解)

STL关联式容器 C STL关联式容器是什么? 在《C STL容器》一节中讲到,C 容器大致分为 2 类,即序列式容器和关联式容器。其中,序列式容器(包括 array、vector、list、deque 和 forward_list)已经在前面章节中…

【校招VIP】前端JS语言考点之Vue考察

考点介绍: Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具…

我的编程语言学习笔记

前言 作为一名编程初学者,我深知学习编程需要不断积累和记录。在这篇博客文章中,我将分享一些我在学习C/C编程语言过程中记录的常用代码、特定函数、复杂概念以及特定功能。希望能与大家一起切磋进步! 常用代码: 1. 输入输出操作…

19----C/C++之加密解密带空格字符串的读入

本文主要通过一道题目来讲解C语言相关的简单加密和解密,以及如何读入带有空格的字符串 小试牛刀 题目描述 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密。我们给出一种最简单的加密方法,对给定的一个字…

【爬虫练习之glidedsky】爬虫-基础1

题目 链接 爬虫的目标很简单,就是拿到想要的数据。 这里有一个网站,里面有一些数字。把这些数字的总和,输入到答案框里面,即可通过本关。 思路 找到调用接口 分析response 代码实现 import re import requestsurl http://www.…

冠达管理:印花税是什么意思?港股取消印花税是利好还是利空?

在股票市场上,投资者买卖股票需求交纳必定的手续费用,比如,佣钱费用、过户费用、印花税等等,那么,印花税是什么意思?港股撤销印花税是利好仍是利空?下面冠达管理为大家准备了相关内容&#xff0…

QT处理日志文件

由于实际生产需要,软件系统的运行,会产生大量的日志文件,有时候一天就能产生超过百万条log记录,那么为了能够处理日志文件,查询并且找到我们想要的报错信息,因此不得不考虑怎么实现,打开大日志文…

excel日期函数篇2

1、DATE(year,month,day):根据年、月、日三个数值返回其表示的日期 2、DATEVALUE(date_text):返回由文本字符串表示的日期的十进制数字 处理时间的时候,如果得到的是字符串格式,要将其转换为日期进行相关操作。excel函数里是使用文…

MinGW编译运行报错RTTI symbol not found for class ‘XXX‘

最近在调试程序时莫名的出现图中报错: 还遇到过for class QObject,在此记录一下,排查后发现,原因都是有资源被重复释放导致的。

intelij idea 2023 创建java web项目

1.点击New Project 2.创建项目名称为helloweb ,jdk版本这里使用8,更高版本也不影响工程创建 点击create 3.新建的工程是空的,点击File-> Project Structure 4.点击Modules 5.点击加号,然后键盘输入web可以搜索到web模块&…

69 # 强制缓存的配置

强制缓存 强制缓存:以后的请求都不需要访问服务器,状态码为 200协商缓存:每次都判断一下,告诉是否需要找缓存,状态码为 304 默认强制缓存,不缓存首页(如果已经断网,那这个页面应该…

Python三行代码实现json转Excel

最近重保,经常需要通过Excel上报威胁事件。安全设备的告警很多都是json格式的,就需要将json转成Excel。 用Python将json转成excel也就三行代码的事,先将json串导入形成字典对象,再通过pandas转成DataFrame直接输出excel。 实现如下…

windows电脑系统自带的画图工具如何实现自由拼图

1.首先选中你要拼接的第一张图片,右键选着编辑,会自动打开自带的画图工具 然后就是打开第一张图片,如下图所示 接着就是将画布托大,如下图所示。 然后点击选择,选择下面的空白区域,选着区域的范围要比准备拼…

智能楼宇综合布线实训室建设方案

一、楼宇智能综合布线实训室方案概述 楼宇智能综合布线实训室方案旨在为学生提供一个真实的学习和实践环境,以培养他们在楼宇智能综合布线领域的实际操作能力和技能。以下是一个概述: 1. 培养目标:培养学生在楼宇智能综合布线方面的综合能力…

耳朵小戴哪种耳机,佩戴舒适度最好的骨传导蓝牙耳机分享

亲爱的小伙伴们!这些精心挑选的骨传导耳机绝对能给你带来全新的耳机体验。告别堵塞的耳道和细菌的困扰,让音乐与你完美融合!不管你是运动爱好者、音乐发烧友还是生活达人,这些骨传导耳机都能满足你的需求。快行动起来,…

Freertos学习

一、概念 实时操作系统,要求一个高的实时性,就不是像在一个死循环中放俩函数了。而是创建俩任务,也叫做俩进程,高速的轮流执行,提高实时性。 二、创建任务