Java / Scala资源消耗和负载

时间:2011-12-04 11:18:21

标签: java scala load scalability protocol-buffers

我正在使用Scala开发Web应用程序。它是一个简单的应用程序,它将从客户端(JSON或ProtoBufs)获取端口上的数据,并使用数据库服务器进行一些计算,然后使用JSON / Protobuf对象回复客户端。

它不是一个非常繁重的应用程序。最多1000行代码它将在每个客户端请求上创建一个线程。现在获取请求和回复之间的时间在20到40毫秒之间。

我需要建议我应该使用什么样的硬件/设置来每秒处理3000多个此类请求。我需要购买硬件放在我的数据中心。

任何有大规模部署Java应用程序经验的人,请指教。我应该使用一个带有2 - 4 Xeon 5500s,32 GB RAM或多台小型机器的大盒子。

更新 - 我们没有很多客户。其中3 - 4。请求将来自这3个。

1 个答案:

答案 0 :(得分:2)

如果每个请求平均花费30毫秒,则单个核心每秒只能处理30个请求。假设您的应用程序线性扩展(您可以预期的最佳方案),那么您将需要至少100个核心才能达到3000 req / s。这超过2-4 Xeon。

最糟糕的是,如果你的应用程序依赖于IO或DB(就像大多数有用的应用程序一样),你将得到一个次线性缩放,你可能需要更多...

因此,首先要做的是分析和优化应用程序。以下是一些提示:

  • 创建一个线程昂贵,尝试创建有限数量的线程并在请求中重用它们(例如,在java中查看ExecutorService)。
  • 如果您的应用程序是IO密集型的:尝试尽可能减少IO调用,使用内存中的缓存并尝试使用非阻塞IO。
  • 如果您的应用依赖于数据库,请考虑缓存并尝试使用分布式解决方案。