3

我们正在计划一个新的 API 服务器,它主要服务于 JSON 响应,带有一个 RESTful 接口。我们担心规模和可用性。我们使用带有 Jetty(或其他连接器)的 Restlet 是否走在正确的轨道上?

我们要问的一个问题是,Java 世界中是否有像 Phusion Passenger 这样的东西?例如,用于保持服务器实例正常运行的预构建解决方案?

4

2 回答 2

9

您的问题实际上与 Restlet 无关,而是关于设计一个高可扩展性、高可用性的站点。我们发现 Restlet 在正确的系统架构下确实可以很好地扩展。

一般来说,您希望:

  • 运行一Web 服务器机器,而不仅仅是一个。
  • 确保您的应用程序没有共享任何内容,即,如果可能的话,您的 Web 服务器中没有存储应用程序状态。
  • 使用负载平衡器将请求分散到负载最少的 Web 服务器。
  • 确保您的 JSON 响应是可缓存的。
  • 在站点的边界添加一个 HTTP反向代理缓存(例如 Squid)。随着您的站点和客户端之间的缓存预热,大部分入站流量将由它们处理,而不是由您的 Web 服务器处理。
  • 编写您的客户端代码以重试失败的请求。这样,如果 Web 服务器死了,下一个请求将被负载平衡到幸存的机器上。
  • 当然,您希望自动化您的站点以启动崩溃的 Web 服务器等。(这可能是在 ServerFault.com 上更好地询问的部分。)

REST 是一种架构风格,非常适合这种类型的设置。

正如@matt 提到的,您确实需要注意原始性能,但通常您首先要关注的是获得可扩展的高可用性架构。

这方面的一些很好的来源是:

特别是:

Overstock.com 运行着一个高度扩展的网站,并大量使用 Restlet来完成它。

于 2010-10-06T04:15:40.913 回答
2

可扩展性和性能最终将更多地取决于处理这些请求的应用程序的设计方式、算法、是否有效地访问数据库、如何/是否缓存数据等,而不是 servlet 容器或框架的选择。

于 2010-09-23T00:02:08.230 回答