seata-golang 性能测试报告

发布于 2021-05-24 09:17:50 字数 5106 浏览 2056 评论 0

性能报告

自从 seata-golang 开源以来,社区的同学都比较关心它的性能。2020 年 12 月 12 日,我利用周末的时间用 jmeter 对它进行了测试。

测试的方法

测试的 demo 为项目 samples/at 中的 demo,数据库为本地 docker 中搭建的 mysql,测试工具为 jmeter。电脑配置如下:

电脑配置

  • MacBook Pro (15-inch, 2018)
  • 处理器 2.2 GHz 六核Intel Core i7
  • 内存 16 GB 2400 MHz DDR4

jmeter 参数如下:

100 个线程循环 10 次访问 http://localhost:8003/createSoCommit。

该接口调用一个聚合服务创建订单,聚合服务分别调用订单服务写入订单,再调用库存服务分配库存。

测试过程

1、配置 demo 中的 tc server 为 seata-golang 项目中的 tc server,测试结果如下:

go client 连接 go tc server:

Label# 样本平均值中位数90% 百分位95% 百分位99% 百分位最小值最大值异常 %吞吐量接收 KB/sec发送 KB/sec
HTTP请求4003978429045664603488342051050.00%22.345123.473.58
总体4003978429045664603488342051050.00%22.345123.473.58

2、配置 demo 中的 tc server 为 java 版 seata 的 tc server,测试结果如下:

go client 连接 java tc server (version 1.4):

Label# 样本平均值中位数90% 百分位95% 百分位99% 百分位最小值最大值异常 %吞吐量接收 KB/sec发送 KB/sec
HTTP请求4004222434052065490584124461290.00%20.621753.23.3
总体4004222434052065490584124461290.00%20.621753.23.3

3、另一个 java seata 的 demo 与 seata-golang 中的 demo 做了相同的操作,即通过一个聚合服务调用订单服务、再调用库存服务创建订单,通过 jmeter 对创建订单接口进行测试,测试结果如下:

java client 连接 java tc server (version 1.4,client 设置 LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT 为 false ):

Label# 样本平均值中位数90% 百分位95% 百分位99% 百分位最小值最大值异常 %吞吐量接收 KB/sec发送 KB/sec
HTTP请求40053575152640176398980280593010.00%16.86913.482.93
总体40053575152640176398980280593010.00%16.86913.482.93

4、java demo 连接 go tc server,该用例存在一些问题,下面的数据仅供参考,不参与此次对比:

Label# 样本平均值中位数90% 百分位95% 百分位99% 百分位最小值最大值异常 %吞吐量接收 KB/sec发送 KB/sec
HTTP请求100079902660300333183270188961150460.00%8.552933.51.49
总体100079902660300333183270188961150460.00%8.552933.51.49

问题:seata-golang 和 java 连接机制不同:seata-golang client 端的 tm 和 rm 是共用的和 tc server 的连接(默认一个应用和 tc server 保持一条连接),在一个连接上既传递 tm 消息也传递 rm 消息;

java 版 seata 设计的 tm 会和 tc server 建立一条连接,rm 也会和 tc server 建立一条连接,(默认一个应用和 tc server 保持两条连接)这导致了 ChannelManager 管理上的复杂,并且代码也比较难以理解,代码参见 ChannelManager.go

此时创建了订单,在异步提交的时候,go tc server range 随机选择一条 java client 连接发送 BranchCommitRequest 消息,如果选中了 tm 创建的连接,会导致这个消息得不到处理。

结论

综合上面的测试结果,go 和 java 性能差不多,在 java client LOCK_RETRY_POLICY_BRANCH_ROLLBACK_ON_CONFLICT 设置为 false 的情况下,go 性能更好。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文