记一次在 MOSN 对 Dubbo、Dubbo-go-hessian2 的性能优化

java8看不到源码-dubbo-go-hessian2:与[dubbo-hessian-lite](https://github.com/a java8 看不到源码歌海森 注意:解码时,java 版本的 hessian 会默认跳过并忽略不存在的字段。 从 v1.6.0 版本开始,dubbo-go-hessian2 也会跳过不存在的字段,而 v1.6.0 之前的版本会返回错误。 它是一个 golang hessian 库,由 . 由于 , , , , , v1.6.0 有很大的性能改进和一些错误修复。 功能列表 Java 和 Go 之间的 Hessian 类型映射 跨语言消息定义要小心,应避免以下情况: 定义只存在于特殊语言中的对象 使用各种 java 异常(使用错误代码/消息代替) 所以我们可以维护一个跨语言类型映射: 粗麻布型 java类型 golang类型 空值 空值 零 二进制 字节[] []字节 布尔值 布尔值 布尔值 日期 日期 时间.时间 双倍的 双倍的 浮动64 整数 整数 整数32 长 长 int64 细绳 字符串 细绳 列表 java.util.List 片 地图 java.util.Map 地图 目的 自定义定义对象 自定义定义结构 其他常用类型 大十进制 java.math.BigDecimal git 立即下载

背景

蚂蚁金服内部对 Service Mesh 的稳定性和性能要求是比较高的,内部 MOSN 广泛用于生产环境。在云上和开源社区,RPC 领域 Dubbo 和 Spring Cloud 同样广泛用于生产环境,我们在 MOSN 基础上,支持了 Dubbo 和 Spring Cloud 流量代理。我们发现在支持 Dubbo 协议过程中,经过 Mesh 流量代理后,性能有非常大的性能损耗,在大商户落地 Mesh 中也对性能有较高要求,因此本文会重点描述在基于 Go 语言库 dubbo-go-hessian2 、Dubbo 协议中对 MOSN 所做的性能优化。

  • dubbo-go-hessian2:https://github.com/apache/dubbo-go-hessian2

  • MOSN:https://github.com/mosn/mosn

性能优化概述

根据实际业务部署场景,并没有选用高性能机器,使用普通 Linux 机器,配置和压测参数如下:

  • Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz 4核16G;

  • pod 配置 2c、1g,jvm 参数 -server-Xms1024m-Xmx1024m;

  • 网络延迟 0.23ms, 2台 Linux 机器,分别部署 server+MOSN, 压测程序 rpc-perfomance;

rpc-perfomance:https://github.com/zonghaishang/rpc-performance

经过3轮性能优化后,使用优化版本 MOSN 将会获得以下性能收益(框架随机512和1k字节压测):

  • 512字节:MOSN+Dubbo 服务调用 tps 整体提升55-82.8%,rt 降低45%左右,内存占用 40M;

  • 1k数据:MOSN+Dubbo 服务调用 tps 整体提升51.1-69.3%,rt 降低41%左右,  内存占用 41M;

性能优化工具 pprof

磨刀不误砍柴工,在性能优化前首先要找到性能卡点,找到性能卡点后,另一个难点就是如何用高效代码优化替代 slow code。因为蚂蚁金服 Service Mesh 是基于 Go 语言实现的,我们首选 Go 自带的 pprof 性能工具,我们简要介绍这个工具如何使用。如果我们 Go 库自带 http.Server 时并且在 main 头部导入 import_"net/http/pprof",Go 会帮我们挂载对应的 handler, 详细可以参考 godoc 。

godoc:https://pkg.go.dev/net/http/pprof?tab=doc

因为 MOSN 默认会在 34902端口暴露 http 服务,通过以下命令轻松获取 MOSN 的性能诊断文件:

然后继续用 pprof 打开诊断文件,方便在浏览器查看,在图1-1给出压测后 profiler 火焰图:

在获得诊断数据后,可以切到浏览器 Flame Graph(火焰图,Go 1.11以上版本自带),火焰图的 X 轴坐标代表 CPU 消耗情况,Y 轴代码方法调用堆栈。在优化开始之前,我们借助 Go 工具 pprof 可以诊断出大致的性能卡点在以下几个方面(直接压 Server 端 MOSN):

  • MOSN 在接收 Dubbo 请求,CPU 卡点在streamConnection.Dispatch;

  • MOSN 在转发 Dubbo 请求,CPU 卡点在 downStream.Receive;

可以点击火焰图任意横条,进去查看长方块耗时和堆栈明细(请参考图1-2和1-3所示):

性能优化思路

本文重点记录优化了哪些 case 才能提升 50%+ 的吞吐量和降低 rt,因此后面直接分析当前优化了哪些 case。在此之前,我们以 Dispatch 为例,看下它为啥那么吃性能 。在 terminal 中通过以下命令可以查看代码行耗费 CPU 数据(代码有删减):

通过上面 listDispatch 命令,性能卡点主要分布在 159 、 171 、 172 、 181 、和 190 等行,主要卡点在解码 Dubbo 参数、重复解参数、Tracer、反序列化和 Log 等。

1. 优化 Dubbo 解码 GetMetas

我们通过解码 Dubbo 的 body 可以获得以下信息,调用的目标接口(interface)和调用方法的服务分组(group)等信息,但是需要跳过所有业务方法参数,目前使用开源的 hessian-go 库,解析 string 和 map 性能较差, 提升 hessian 库解码性能,会在本文后面讲解。

优化思路:

在 MOSN 的 ingress 端(MOSN 直接转发请求给本地 java server 进程), 我们根据请求的 path 和 version 去窥探用户使用的 interface 和 group, 构建正确的 dataId 可以进行无脑转发,无需解码 body,榨取性能提升。

我们可以在服务注册时,构建服务发布的 path、version 和 group 到 interface、group 映射。在 MOSN 转发 Dubbo 请求时可以通过读锁查 cache+ 跳过解码 body,加速 MOSN 性能。

因此我们构建以下 cache 实现(数组+链表数据结构), 可参见优化代码 diff :

优化代码 diff:https://github.com/mosn/mosn/pull/1174/commits/9020ee9995cd15a7a4321a375a9506cf94dc70a8#diff-f5ff30debd68b8318c8236a0b5ccde07R6

通过服务注册时构建好的 cache,可以在 MOSN 的 stream 做解码时命中 cache, 无需解码参数获取接口和 group 信息,可参见优化代码 diff :

优化代码 diff:https://github.com/mosn/mosn/pull/1174/commits/9020ee9995cd15a7a4321a375a9506cf94dc70a8#diff-73d1153005841c788c91116915f460a5R188

在 MOSN 的 egress 端(MOSN 直接转发请求给本地 java client 进程),  我们采用类似的思路, 我们根据请求的 path 和 version 去窥探用户使用的 interface 和 group, 构建正确的 dataId 可以进行无脑转发,无需解码 body,榨取性能提升。

2. 优化 Dubbo 解码参数

在 Dubbo 解码参数值的时候 ,MOSN 采用的是 Hessian 的正则表达式查找,非常耗费性能。我们先看下优化前后 benchmark 对比, 性能提升50倍!!!

优化思路:

可以消除正则表达式,采用简单字符串解析识别参数类型个数, Dubbo 编码参数个数字符串实现 并不复杂, 主要给对象加L前缀、数组加[、primitive 类型有单字符代替。采用 Go 可以实现同等解析, 可以参考优化代码 diff :

优化代码 diff:https://github.com/mosn/mosn/pull/1174/commits/9020ee9995cd15a7a4321a375a9506cf94dc70a8#diff-73d1153005841c788c91116915f460a5R245

3. 优化 hessian go 解码 string 性能

在图1-2中可以看到 hessian go 在解码 string 占比 CPU 采样较高,我们在解码 Dubbo 请求时,会解析 Dubbo 框架版本、调用 path、接口版本和方法名,这些都是 string 类型,hessian go 解析 string 会影响 RPC 性能。

我们首先跑一下 benchmark 前后解码 string 性能对比,性能提升 56.11%!!!  对应到 RPC 中有5%左右提升。

优化思路:

直接使用 utf-8 byte 解码,性能最高,之前先解码 byte 成 rune, 对 rune 解码成 string 及其耗费性能。增加批量string chunk copy, 降低 read 调用,并且使用 unsafe 转换 string(避免一些校验),因为代码优化 diff 较多,这里给出优化代码 PR 。

优化代码 PR:https://github.com/apache/dubbo-go-hessian2/pull/188

Go SDK 代码 runtime/string.go#slicerunetostring(rune 转换成 string), 同样是把 rune 转成 byte 数组,这里给了我优化思路启发。

4. 优化 hessian 库编解码对象

虽然消除了 Dubbo 的 body 解码部分,但是 MOSN 在处理 Dubbo 请求时,必须要借助 hessian 去 decode 请求头部的框架版本、请求 path 和接口版本值。但是每次在解码的时候都会创建序列化对象,开销非常高,因为 hessian 每次在创建 reader 的时候会 allocate 4k 数据并 reset。

我们可以写个池化内存前后性能对比, 性能提升85.4%!!! , benchmark 用例 :

benchmark:https://github.com/zonghaishang/dubbo-go-hessian2/blob/9b418c4e2700964f244e6b982855b4e89b45990d/string_test.go#L161

优化思路:

在每次编解码时,池化 hessian 的 decoder 对象,新增 NewCheapDecoderWithSkip 并支持 reset 复用 decoder。

5. 优化重复解码 service 和 methodName 值

xprotocol 在实现 xprotocol.Tracing 获取服务名称和方法时,会触发调用并解析2次,调用开销比较大。

优化思路:

因为在 GetMetas 里面已经解析过一次了,可以把解析过的 headers 传进去,如果 headers 有了就不用再去解析了,并且重构接口名称为一个,返回值为二元组,消除一次调用。

6. 优化 streamId 类型转换

在 Go 中将 byte 数组和 streamId 进行互转的时候,比较费性能。

优化思路:

生产代码中, 尽量不要使用 fmt.Sprintf 和 fmt.Printf 去做类型转换和打印信息。可以使用 strconv 去转换。

7. 优化昂贵的系统调用

MOSN 在解码 Dubbo 的请求时,会在 header 中塞一份远程 host 的地址,并且在 for 循环中获取 remoteIp,系统调用开销比较高。

优化思路:

在获取远程地址时,尽可能在 streamConnection 中 cache 远程 ip 值,不要每次都去调用 RemoteAddr。

8. 优化 slice 和 map 触发扩容和 rehash

在 MOSN 处理 Dubbo 请求时,会根据接口、版本和分组去构建 dataId,然后匹配 cluster, 会创建默认 slice 和 map 对象,经过性能诊断,导致不断 allocate slice 和 grow map 容量比较费性能。

优化思路:

使用 slice 和 map 时,尽可能预估容量大小,使用 make(type, capacity) 去指定初始大小。

9. 优化 Trace 日志级别输出

MOSN 中不少代码在处理逻辑时,会打很多 Trace 级别的日志,并且会传递不少参数值。

优化思路:

调用 Trace 输出前,尽量判断一下日志级别,如果有多个 Trace 调用,尽可能把所有字符串写到 buf 中,然后把 buf 内容写到日志中,并且尽可能少的调用 Trace 日志方法。

10. 优化 Tracer、Log 和 Metrics

在大促期间,对机器的性能要求较高,经过性能诊断,Tracer、MOSN Log 和 Cloud Metrics 写日志(IO 操作)非常耗费性能。

优化思路:

通过配置中心下发配置或者增加大促开关,允许 API 调用这些 Feature 的开关。

11. 优化 route header 解析

MOSN 中在做路由前,需要做大量的 header 的 map 访问,比如 ldc、antvip 等逻辑判断,商业版或者开源 MOSN 不需要这些逻辑,这些也会占用一些开销。

优化思路:

如果是云上逻辑,内部 MOSN 的逻辑都不走。

12.  优化 featuregate 调用

在 MOSN 中处理请求时,为了区分内部和商业版路由逻辑,会通过 featuregate 判断逻辑走哪部分。通过 featuregate 调用开销较大,需要频繁的做类型转换和多层 map 去获取。

优化思路:

通过一个 bool 变量记录 featuregate 对应开关,如果没有初始化过,就主动调用一下 featuregate。

未来性能优化思考

经过几轮性能优化 ,目前看火焰图,卡点都在 connection 的 read 和 write,可以优化的空间比较小了。但是可能从以下场景中获得收益:

  • 减少 connection 的 read 和 write 次数(syscall);

  • 优化 IO 线程模型,减少携程和上下文切换等;

作为结束,给出了最终优化后的火焰图 ,大部分卡点都在系统调用和网络读写,  请参考图1-4。

关于作者

诣极,开源 Apache Dubbo PMC。目前就职于蚂蚁金服中间件团队,主攻 RPC 和 Service Mesh 方向。《深入理解 Apache Dubbo 与实战》图书作者。

github: https://github.com/zonghaishang

其他

pprof 工具异常强大,可以诊断 CPU、Memory、Go 协程、Tracer 和死锁等,该工具可以参考 godoc,性能优化参考:

  • https://blog.golang.org/pprof

  • https://www.cnblogs.com/Dr-wei/p/11742414.html

  • https://www.youtube.com/watch?v=N3PWzBeLX2M

本文归档在 sofastack.tech。

华为主题包HWT从入门到排障:下载、导入、修改与兼容性指南 手机主题是很多用户个性化设备的起点,华为手机的主题文件以HWT格式封装,本质上是一种结构特殊的ZIP压缩包,内部包含壁纸、图标、字体和XML配置。了解HWT的目录结构与系统版本兼容性,能帮助用户避开导入失败、秒回默认等常见问题。本文从HWT的基本原理讲起,梳理了安全下载渠道、三种导入方式、应用失败的系统性排查思路,并介绍了解包修改壁纸与字体的方法。无论是普通用户还是进阶玩家,掌握这些技术细节都能更从容地在EMUI与HarmonyOS环境下管理自己的主题资源。 阅读详情

相关推荐

常见机械臂模型不用找!Mujoco这儿都有!

高质量的模型集合,franka panda,so-arm100,ur之类的机械臂都有。常见机械臂模型不用找!Mujoco这儿都有!大概346M,网速不行的可以下载zip。

darcsdn 992

记一次对 dubbo-go-hessian2 的性能优化

dubbo-go-hessian2是一个用 Go 实现的 hessian 协议 v2.0 版本的序列化库。从项目名称里可以看到主要用在dubbo-go这个项目里。hessian 协...

Go中国 432

DataGridView 右键菜单复制(公共)

dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler( (sender1, e1) => { if (e1.Button == MouseButtons.Right) {

沁心渃水 2832

分布式服务架构学习(六):实现自己的序列化工具引擎(五)-序列化Hessian实现

Hession是一个支持跨语言传输的二进制序列化协议,相对于Java默认的序列化机制,Hessian具有更好的性能与易用性,而且支持多种不同的语言。其中,AbstractSerializerFactory、AbstractHessianOutput、AbstractSerializer、AbstractHessianInput、AbstractDeserializer是Hessian实现序列化和反...

u014378181的博客 433

Cadence Allegro通过手工绘制板框的方法

Cadence Allegro通过手工绘制板框的方法 Cadence Allegro绘制板框有三个方法: 1、通过手工绘制板框; 2、通过向导绘制板框; 3、通过导入DXF文件导绘制板框; 本章将教会大家如何通过手工的方法绘制100mm的矩形板框。 方法步骤如下: 一、通过放置绘图工具2D线绘制; 1、运行Cadence Allegro软件,打开File菜单栏,选择New。 2、这时软件会弹出Ne...

LGCPCB的博客 2万+

Android定位权限全解析:从基础配置到后台持续定位的完整解决方案

本文全面解析Android定位权限体系,从基础配置到后台持续定位的完整解决方案。涵盖LocationManager和FusedLocationProviderClient等主流API的对比选型,详细讲解动态权限申请、精确定位与模糊定位的智能切换,以及Android 10+的后台定位适配策略。帮助开发者构建兼顾精准度与电量友好的定位方案,适用于导航、运动轨迹记录等多种场景。

weixin_29310605的博客 608

Dubbo Go Hessian2 开源项目安装及使用指南

Dubbo Go Hessian2 开源项目安装及使用指南 一、项目介绍 背景概述 Dubbo Go Hessian2 是一个基于 Go 语言实现的 CaUcho Hessian2 协议库,专门用于 Apache Dubbo 生态系统中,它兼容于 Dubbo Hessian Lite。这个项目的初衷是为了增强跨平台服务调用的能力,尤其是在 Go 和 Java 环境下的互操作性。 核心特性 协议兼...

gitblog_00991的博客 998

Linux实战:rMATS可变剪切分析从零到一,避坑指南与结果深度解析

本文详细介绍了在Linux系统上从零开始部署rMATS进行可变剪切分析的完整流程,包括环境搭建、安装避坑指南、参数优化及结果解读。特别针对gfortran依赖、数学库配置等常见问题提供解决方案,并深入解析JC与JCEC结果的差异及可视化技巧,帮助生物信息学研究者高效完成可变剪切分析。

weixin_30394669的博客 409

【亲测免费】 Apache Dubbo-go-hessian2 使用指南

Apache Dubbo-go-hessian2 使用指南 项目介绍 ApacheDubbo-go-hessian2 是一个在 Go 语言中实现的 Caucho Hessian2 协议库,专为 Apache Dubbo-go 设计。该实现与 dubbo-hessian-lite 兼容,旨在提供高性能的数据序列化和反序列化解决方案,特别适合构建分布式服务系统。自 v1.6.0 起,它引入了显著的性能...

gitblog_00087的博客 450

ANSYS Twin Builder实战:5步搞定数字孪生模型部署(附ROM配置技巧)

本文详细解析了ANSYS Twin Builder在数字孪生模型部署中的实战应用,重点介绍了ROM(降阶模型)配置技巧。通过5个关键步骤,从环境搭建到工业部署,帮助工程师高效实现高精度三维仿真到轻量化数字孪生的转化,提升预测性维护和系统仿真效率。

weixin_27330481的博客 661

基于潜在空间分数匹配的混合型表格数据合成方法

然而,在我们的模型中,β 预计会更小,因为我们不需要嵌入的分布精确地遵循标准高斯分布,因为我们还有一个额外的扩散模型。受 Transformer 在表格数据分类/回归任务中取得成功的启发,我们首先为每一列学习一个独特的标记器,然后将标记(列)级表示输入到 Transformer 中,以捕捉列之间错综复杂的关系。在第 4 节中,我们证明了通过这种设计,TABSYN 可以在不到 20 次函数评估(NFE)的情况下生成高质量的合成表格数据,这比其他基于扩散的表格数据合成方法要少得多。是标记器的可学习参数。

步子哥的博客 853

牛顿法与Hessian矩阵

牛顿法 主要有两方面的应用: 1. 求方程的根; 2. 求解最优化方法; 一. 为什么要用牛顿法求方程的根?        问题很多,牛顿法 是什么?目前还没有讲清楚,没关系,先直观理解为 牛顿法是一种迭代求解方法(Newton童鞋定义的方法)。        假设 f(x) = 0 为待求解方程,利用传统方法求解,牛顿法求解方程的公式: f(x0+Δx) = f(x0

跟随技术的脚步-linolzhang的专栏 3万+

Linux驱动学习--HCI框架及源码分析

目录 一、引言 二、HCI框架 三、pcm_read简要分析 一、引言 最近一直在分析蓝牙驱动,发现在底层驱动与上层协议栈间还有一层HCI,主机控制层,两者之间通过HCI协议通讯 而Linux也将HCI协议抽象层了一个框架。 为上层提供一个统一的接口,让上层协议不依赖于具体硬件的实现。HCI在硬件中的固件与HCI在主机端的驱动通信方式有多种,比如像 UART、USB和PC Card等等。hci_core.c相当于一个框架,用于把各种具体通信方式绞合起来,并提供一些公共函数的实现。 今天就来简单的分析一下 二

文艺小少年的博客 2002

记一次在 mosn 对 dubbo、dubbo-go-hessian2 的性能优化

背景 蚂蚁内部对 Service Mesh 的稳定性和性能要求是比较高的,内部 mosn 广泛用于生产环境。在云上和开源社区,RPC 领域 dubbo 和 spring cloud 同样广泛用于生产环境,我们在 mosn 基础上,支持了 dubbo 和 spring cloud 流量代理。我们发现在支持 dubbo 协议过程中,经过 Mesh 流量代理后,性能有非常大的性能损耗,在大商户落地 Mesh 中也对性能有较高要求,因此本文会重点描述在基于 Go 语言库 dubbo-go-hessian2 、dub

joke59的博客 862

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Go1.19.3 string原理简析

Go1.19.3 string原理简析

Go的全部 1551

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

dubbo-go 的开发、设计与功能介绍

dubbo-go 的前世今生 dubbo-go 是目前 Dubbo 多语言生态最火热的项目。dubbo-go 最早的版本应该要追溯到 2016 年,由社区于雨同学编写 dubbo-go 的初版。当时很多东西没有现成的轮子,如 Go 语言没有像 netty 一样的基于事件的网络处理引擎、 hessian2 协议没有 Go 语言版本实现,加上当时 Dubbo 也没有开始重新维护。所以从协议库到网络引擎,再到上层 dubbo-go ,其实都是从零开始写的。 在 2018 年,携程开始做 Go 语言的一些中间件以

weixin_38387929的博客 999

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

原来dubbo 还支持 golang 呢,可以用相互调用,相爱了。使用java 做服务端,golang做客户端

以前有很多项目都是java写的,业务逻辑是用dubbo做的服务。 这部分是不可能重写了。但是要是使用golang开发新项目。需要用到 dubbo服务。 支持的协议 hessian2 ,这样写的程序就可以相互调用了。 超级兴奋。同时问了下作者, dubbo-go 再过1 - 2 月也能完善了。 同时也可以使用 golang 做server服务,让java 程序去做client 调用。 非常非常帮的。

freewebsys的专栏 1万+

Golang 序列化方式及对比

Golang 序列化的方式: Binary Gob JSON Protobuf 一. Binary // OK type Message struct { Id uint64 Size uint64 } // Wrong /*type Message struct { Id int Size int Data string }*/...

fengfengdiandia的专栏 1万+

dubbo配置hessian+dubbo协议共存

根据官方说明:Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况 Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务。适用场景:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。因此比较高效的做法是带上传下载文件的服务使用hessian

ligang5344的专栏 1万+

Dubbo Hessian2序列化问题

问题定义了一个接口,返回值为Map<String, Byte>,consumer收到结果后,使用Byte value = map.get(key)获取结果,抛出了如下类型转换异常: 如下: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Byte at sun.reflect.Native

rhwayfun专栏 9229

dubbo源码:dubbo hessian2序列化协议

文章目录1.dubbo hessian2 序列化协议2. dubbo hessian2 序列化协议在dubbo中的应用2.1 调用链路分析2.2 序列化原理分析3. dubbo jdk序列化协议 1.dubbo hessian2 序列化协议 Dubbo 默认的hessian2序列化协议内部嵌入了Hessian-lite源码,其中Hessian-lite最初是阿里巴巴dubbo嵌入官方hessian...

聚焦AI技术前沿,深度解析大模型原理与多场景应用,探索最新突破与落地实践,助力行业洞悉趋势,驱动智能转型,赋能千行百业。 4856

golang rpc的两种调用方法

golang的rpc有两种方法进行调用,一种是rpc例子中给的:package main import ( "net/rpc" "net/http" "log" "net" "time" ) type Args struct { A, B int } type Ar...

weixin_33935777的博客 324

分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较

分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。不过,略有遗憾的是,据说在淘宝内部,dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散(参见http://

青山师 3万+

dubbo通信协议之对比

对dubbo的协议的学习,可以知道目前主流RPC通信大概是什么情况,本文参考dubbo官方文档 http://dubbo.incubator.apache.org/books/dubbo-user-book/ http://dubbo.incubator.apache.org/books/dubbo-admin-book/ dubbo共支持如下几种通信协议: dubbo:// rmi:// he...

weixin_33739646的博客 691

go语言string结尾是什么_涂鸦智能的 dubbo-go 实战经验

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!dubbo 是一个基于 Java 开发的高性能的轻量级 RPC 框架,dubbo 提供了丰富的服务治理功能和优秀的扩展能力。而 dubbo-go 在 java 与 golang 之间提供统一的服务化能力与标准,是涂鸦智能目前最需要解决的主要问题。本文分为实践和快速接入两部分,分享在涂鸦智能的 dubb...

weixin_39687621的博客 302

hessian和dubbo特性

hessian、rmi、dubbo与rpc之间的关系单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式)RPC 在使用形式上像调用本地函数(或方法)一样去

老花的博客 1万+
上一篇: SOFA Weekly | MOSN 发版、Service Mesh 相关文章整理、社区直播预告
下一篇: Forrester中国首席分析师戴鲲:云原生技术趋向成熟,金融企业选择云原生平台需满足三大要求...
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值