微服务架构选Java还是选Go – 多用户负载测试

Ivan Nikitsenka

微服务架构允许我们再创建新应用时自由选择不同的技术和编程语言。不过究竟哪种语言更适合我们当下的硬件?回答这个问题,需要搞明白Java和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: https://github.com/nikitsenka/bank-java

Bank-go: https://github.com/nikitsenka/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)

微服务架构选Java还是选Go - 多用户负载测试

结果

完整结果请查看 here

微服务架构选Java还是选Go - 多用户负载测试
微服务架构选Java还是选Go - 多用户负载测试

结果小结

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

总结

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

关于Rainbond

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

  • 网站
  • Github
  • 码云
  • 演示环境
  • 文档
  • 社区
  • 微信群: 添加微信“zqg5258423”并接受邀请入群

原文 

http://dockone.io/article/8275

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 微服务架构选Java还是选Go – 多用户负载测试

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址