0

我正在使用 Akka 和 Spray 构建一个 RESTful API。我正在使用 Typesafe Akka Cluster Sample 项目...

http://www.typesafe.com/activator/template/akka-sample-cluster-scala

作为参考。我有一个使用路由池和集群感知路由的集群。API 的接口是通过一个喷雾前端创建一个参与者 (ClusterClient),它充当集群的前端并监控集群活动(新节点、停机节点等)。当请求进入喷射路由时,我通过集群感知路由器将工作委托给集群后端工作人员。

我的希望/目标是我可以通过根据需要添加更多后端工作节点和路由来提高系统的性能。我还可以添加更多将通过负载均衡器访问的前端(喷雾)节点。我正在尝试构建一些高性能和可扩展的东西。

这一切都很好。此刻的工人演员只是返回一个字符串进行测试。

在继续之前,我想通过对应用程序进行压力测试来了解当前的集群性能。所以我正在使用 apache bench 进行一些快速测试。

所有的测试都在我的本地开发机器(QuadCore Macbook Pro with 16gb RAM)上完成。该应用程序在喷雾罐上运行。前端(spray)和后端节点通过使用不同的端口在同一台机器上的不同 JVM 上启动。

奇怪的是,当我向集群添加更多后端节点时,性能似乎会下降。这是我的测试和结果。我每次测试运行大约 10 次以获得更好的平均值...

一个后端节点

ab -l -n 1000 -c 100 http://localhost:3050/api

Requests per second [#/sec] (mean): 4708.25, 5086.11, 4341.52, 5850.76, 4403.33, 5046.78, 4151.84, 5686.24, 3399.38, 4466.26, 3755.98, 5619.18, 5187.96
Average: 4745 requests per second

两个后端节点

ab -l -n 1000 -c 100 http://localhost:3050/api

Requests per second [#/sec] (mean): 3381.75, 4108.51, 2969.41, 3732.29, 3804.48, 3644.12, 2516.05, 2968.17, 3308.01, 3378.69, 4049.71, 3738.21, 4068.84
Average: 3512 requests per second

三个后端节点

ab -l -n 1000 -c 100 http://localhost:3050/api

Requests per second [#/sec] (mean): 2756.49, 2516.77, 2535.34, 2464.37, 2887.51, 2421.98, 2794.03, 2633.36, 2735.74, 3021.81, 2612.39, 3052.53, 3714.88
Average: 2780 requests per second

这是预期的吗?即我认为我应该通过添加更多后端/工作节点来获得更多性能是错误的吗?根据上面的数据,我添加到集群中的节点越多,性能就会变得越差。这可能与在同一台机器上运行测试有关吗?

谢谢

4

0 回答 0