Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 具有后台架构的高负载rails服务器_Ruby On Rails_Nginx_High Load - Fatal编程技术网

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

Ruby on rails 具有后台架构的高负载rails服务器,ruby-on-rails,nginx,high-load,Ruby On Rails,Nginx,High Load,这是我的任务。 每一秒的背景任务都应该根据一些数据生成json。此操作不是cpu密集型的(主要是网络),它生成JSON内容(5-10KB)。操作大约需要200毫秒 另外,我有大约1000名客户每隔几秒钟就要一次此内容。假设是每秒200个请求 服务器应该只输出当前的实际json 目前我已经有rails 4+nginx+passenger+debian服务器做其他工作,与这项工作相关 作为一名学生,我希望以最经济高效的方式制作服务器,并通过以下方式轻松扩展: 添加更多的背景工作,生成更多的json

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

另外,我有大约1000名客户每隔几秒钟就要一次此内容。假设是每秒200个请求

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

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

作为一名学生,我希望以最经济高效的方式制作服务器,并通过以下方式轻松扩展:

  • 添加更多的背景工作,生成更多的json
  • 将请求数增加到每秒10000个
  • 目前我有两个CPU核的linode 2048 ssd。我的问题是:

  • 我应该在我的背景任务中使用什么gem/解决方案(当前是用ruby编写的)
  • 如何有效地存储实际的json并将其从backgrounder传递到rails/nginx
  • 如何尽可能快地提供json
  • 您提到“服务器应该只输出当前实际的json”,我想json生成可能不会成为瓶颈,因为您可以将其缓存到Memcache并直接为Memcache服务:

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

    2) 用户->Nginx->Memcache

    请参阅Nginx memcache内置模块


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

    客户端是否要求类似类型的内容?背景工作人员在忙什么?内容是否可缓存?您有什么样的数据结构和存储?客户机要求提供json创建的最后一个json的副本。您可以这样想:backgrounder创建一个文件=>客户端下载当前文件。内容可缓存,但每一秒背景都会创建新的实际文件。Backgrounder向外部服务器请求数据并将其连接起来。我现在没有任何存储空间。这有点像RSS方法吗?URL是否包含任何日期范围参数或用户id?只是想找出你可以应用的模式,它比rss更简单。它就像文件服务器。客户端请求文件和后台作业更新文件。无需存储文件历史记录。只有真正的版本需要使用dalli gem和loops gem进行memcached,这让我很开心。在我的虚拟机上一切都很顺利。感谢you@YegorRazumovsky听起来很棒!要实现10K连接,只需使用更多的Nginx服务器即可。另一种选择是Rails响应缓存,但有时集中式缓存(也称为Memcache)更适合。