Ivan Nikitsenka
微服务架构允许我们再创建新应用时自由选择不同的技术和编程语言。不过究竟哪种语言更适合我们当下的硬件?回答这个问题,需要搞明白Java和Go编写的相同应用程序之间的性能差异。
作为被测系统,这里准备了两个银行应用: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实例:
完整结果请查看 here
两个应用与1,000个并发用户完美配合。2,000个用户时,Go性能显着降低,而Java仍然是完美的。从3,000个用户及以上用户开始,两个应用都显示出不可接受的响应时间,并且错误响应的数量显着增加。
使用相同的硬件,Java REST API应用程序可以提供两倍于具有PostgreSQL数据库的Go应用的并发用户数。
> Rainbond (云帮)是"以应用为中心”的开源PaaS, 深度整合基于Kubernetes的容器管理、ServiceMesh微服务架构最佳实践、多类型CI/CD应用构建与交付、多数据中心资源管理等技术, 为用户提供云原生应用全生命周期解决方案,构建应用与基础设施、应用与应用、基础设施与基础设施之间互联互通的生态体系, 满足支撑业务高速发展所需的敏捷开发、高效运维和精益管理需求。