资讯专栏INFORMATION COLUMN

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

lentoo / 726人阅读

摘要:微服务架构允许我们再创建新应用时自由选择不同的技术和编程语言。个用户时,性能显着降低,而仍然是完美的。总结使用相同的硬件,应用程序可以提供两倍于具有数据库的应用的并发用户数。

Ivan Nikitsenka

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

怎么做

使用DB(Postgres)数据存储创建简单的Java/Go REST API应用程序

使用JMeter或类似工具创建负载测试

在多带带的AWS实例上运行应用程序,加载测试和数据库

收集负载测试结果

被测系统

作为被测系统,这里准备了两个银行应用: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-go: https://github.com/nikitsenka...

测试项目

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

测试环境

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

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

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

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

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

结果

完整结果请查看 here

结果小结

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

总结

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

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

网站

Github

码云

演示环境

文档

社区

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/8867.html

相关文章

  • 【面试精】关于大型网站系统架构你不得不懂的10个问题

    摘要:降级往往会指定不同的级别,面临不同的异常等级执行不同的处理。谈谈你对和的认识两者关系具体可以看公众号阿里巴巴中间件的这篇文章独家解读从微服务框架到微服务生态与并不是竞争关系,作为成熟的框架,其易用性扩展性和健壮性已得到业界的认可。 该文已加入笔主的开源项目——JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目),地址:https://github.com/...

    leiyi 评论0 收藏0
  • 【面试精】关于大型网站系统架构你不得不懂的10个问题

    摘要:降级往往会指定不同的级别,面临不同的异常等级执行不同的处理。谈谈你对和的认识两者关系具体可以看公众号阿里巴巴中间件的这篇文章独家解读从微服务框架到微服务生态与并不是竞争关系,作为成熟的框架,其易用性扩展性和健壮性已得到业界的认可。 该文已加入笔主的开源项目——JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目),地址:https://github.com/...

    luqiuwen 评论0 收藏0
  • 后端经验

    摘要:在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁入队服务教程在它提出十多年后的今天,已经成为最重要的应用技术之一。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。 JVM 源码分析之 Jstat 工具原理完全解读 http://click.aliyun.com/m/8315/ JVM 源码分析之 Jstat 工具原理完全解读 http:...

    i_garfileo 评论0 收藏0
  • Dubbo Cloud Native 之路的实践与思考

    摘要:可简单地认为它是的扩展,负载均衡自然成为不可或缺的特性。是基于开发的服务代理组件,在使用场景中,它与和整合,打造具备服务动态更新和负载均衡能力的服务网关。类似的特性在项目也有体现,它是另一种高性能代理的方案,提供服务发现健康和负载均衡。 摘要: Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing Fo...

    niceforbear 评论0 收藏0
  • 后端好书阅读与推荐(续四)

    摘要:后端好书阅读与推荐系列文章后端好书阅读与推荐后端好书阅读与推荐续后端好书阅读与推荐续二后端好书阅读与推荐续三后端好书阅读与推荐续四这里依然记录一下每本书的亮点与自己读书心得和体会,分享并求拍砖。 后端好书阅读与推荐系列文章:后端好书阅读与推荐后端好书阅读与推荐(续)后端好书阅读与推荐(续二)后端好书阅读与推荐(续三)后端好书阅读与推荐(续四) 这里依然记录一下每本书的亮点与自己读书心得...

    phodal 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<