博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微服务架构选Java还是选Go - 多用户负载测试
阅读量:6102 次
发布时间:2019-06-20

本文共 1901 字,大约阅读时间需要 6 分钟。

hot3.png

微服务架构允许我们再创建新应用时自由选择不同的技术和编程语言。不过究竟哪种语言更适合我们当下的硬件?回答这个问题,需要搞明白Java和Go编写的相同应用程序之间的性能差异。

先决条件

No additional performance enhancements should be applied. Use minimum configurations with default frameworks and libraries settings.

No ORM frameworks. Use pure DB drivers and the same SQL queries. Postgres JDBC 4.2 driver for Java and github.com/lib/pq for Go.

  • 不采用其他性能增强功能
  • 使用默认框架和库设置的最小配置
  • 没有ORM框架
  • 使用纯DB驱动程序和相同的SQL查询
  • 用于Java的Postgres JDBC 4.2驱动程序和用于Go的github.com/lib/pq

怎么做

  1. 使用DB(Postgres)数据存储创建简单的Java/Go REST API应用程序
  2. 使用JMeter或类似工具创建负载测试
  3. 在单独的AWS实例上运行应用程序,加载测试和数据库
  4. 收集负载测试结果

被测系统

作为被测系统,这里准备了两个银行应用:bank-java和bank-go。

APIs:

POST / client / new / {balance} - 创建具有初始余额的新客户

POST /交易 - 将资金从一个账户转移到另一个账户

GET / client / {id} / balance - 返回客户端的当前余额

框架和依赖关系

在选择框架和库时,这里使用了最新、最流行和最简单的框架和库来尽快准备好应用程序。

Bank-java:Java 10、Spring Boot 2.0.4、spring-web 5.0.8、PostgreSQL JDBC 4.2.4

Bank-go:Go 1.8,gorilla / mux,github.com / lib / pq。

银行应用源码

Bank-java:

Bank-go:

测试项目

测试项目Bank-test使用动态变化的用户数(从1,000到10,000)执行对银行API的调用,验证响应并收集统计信息。

测试环境

这里用AWS并创建了两个AWS EC2实例:

  1. Bank-go t2.micro (Variable ECUs, 1 vCPUs, 2.5 GHz, Intel Xeon Family, 1 GiB memory, EBS only)

  2. Bank-java t2.micro (Variable ECUs, 1 vCPUs, 2.5 GHz, Intel Xeon Family, 1 GiB memory, EBS only)

  3. Postgres d2.xlarge (14 ECUs, 4 vCPUs, 2.4 GHz, Intel Xeon E52676v3, 30.5 GiB memory, 3 x 2048 GiB Storage Capacity)

  4. Bank-test t2.2xlarge (Variable ECUs, 8 vCPUs, 2.3 GHz, Intel Broadwell E5-2686v4, 32 GiB memory, EBS only)

结果

完整结果请查看

结果小结

两个应用与1,000个并发用户完美配合。2,000个用户时,Go性能显着降低,而Java仍然是完美的。从3,000个用户及以上用户开始,两个应用都显示出不可接受的响应时间,并且错误响应的数量显着增加。

总结

使用相同的硬件,Java REST API应用程序可以提供两倍于具有PostgreSQL数据库的Go应用的并发用户数。

关于Rainbond

Rainbond(云帮)是"以应用为中心”的开源PaaS, 深度整合基于Kubernetes的容器管理、ServiceMesh微服务架构最佳实践、多类型CI/CD应用构建与交付、多数据中心资源管理等技术, 为用户提供云原生应用全生命周期解决方案,构建应用与基础设施、应用与应用、基础设施与基础设施之间互联互通的生态体系, 满足支撑业务高速发展所需的敏捷开发、高效运维和精益管理需求。

  • 微信群: 添加微信“zqg5258423”并接受邀请入群

转载于:https://my.oschina.net/zhouyq/blog/2231132

你可能感兴趣的文章
分享reset.css
查看>>
Go 1.1 is released! [转]
查看>>
密码技术十 证书
查看>>
Android Dependencies
查看>>
IE9关联数组导致内存泄漏测试报告
查看>>
开始学习汇编语言
查看>>
14.3-全栈Java笔记:JPanel原来是这样用的
查看>>
Android游戏开发学习笔记(二):音频的播放
查看>>
【故障解决】ORA-06502错误解决
查看>>
linux基础的一些常见问题总结_学习笔记
查看>>
我的友情链接
查看>>
inside、outside和dmz之间的访问
查看>>
网络爬虫雏形1号
查看>>
HDU 1166
查看>>
spark学习3(sqoop1.4.6安装)
查看>>
banner 跟随鼠标呈现视差效果
查看>>
呐喊-Skrik
查看>>
38、自定义控件(三)--事件分发和滑动机制
查看>>
POJ-1961-Period
查看>>
第一个App“今日材料报价”上架,记录一下【原】
查看>>