高负载 rails 具有后台架构的服务器

Highload rails server with backgrounder architecture

这是我的任务。 每个第二个后台程序任务应该根据一些数据生成 json。此操作不是 cpu 密集型(主要是网络),它会生成 JSON 内容 (5-10KB)。操作大约需要 200 毫秒。

我也有大约 1000 名客户每隔几秒钟就询问一次此内容。假设它大约是 200 requests/sec。

服务器应该只输出当前实际值 json。

目前我已经有 rails 4+nginx+passenger+debian 服务器在做其他与这项工作相关的工作。

作为一名学生,我想以最具成本效益的方式制作我的服务器,并能够以这种方式轻松扩展:

  1. 添加更多后台作业,生成更多 json 的
  2. 请求数量增加到每秒 10000 个

目前我有 linode 2048 ssd 2 CPU 核心。我的问题是:

  1. 我的后台任务应该使用什么gem/solution(目前写在ruby)
  2. 如何有效地存储实际 json 并将其从后台传递给 rails/nginx。
  3. 如何使服务 json 尽可能快。

你提到了 "Server should just output current actual json",我猜 JSON 代可能不会成为瓶颈,因为你可以将它缓存到 Memcache 并直接为 Memcache 服务:

1) 定期后台进程 -> 将数据转储到 Memcache(甚至 gzip 以加快速度)

2) 用户 -> Nginx -> 内存缓存

查看模块内置的 Nginx 内存缓存 http://nginx.org/en/docs/http/ngx_http_memcached_module.html

瓶颈是任何具有阻塞机制、GIL、IO 锁等的后端,尝试通过使用中间 Memcache 数据点拆分 request/response 循环来避免此类问题。