在 Rails 应用程序中分离后端和前端服务器?

Posted

技术标签:

【中文标题】在 Rails 应用程序中分离后端和前端服务器?【英文标题】:Separating back end and front end servers in Rails application? 【发布时间】:2012-08-15 23:24:50 【问题描述】:

我有一个执行大量媒体编码的 Rails 应用程序。我正在通过后台进程处理它,但我看到 CPU 过载并且前端加载时间肯定比它们应该的要慢(或者在后端部分变得更大之前)。

所以问题是:具有媒体编码功能的 Rails 应用程序会遇到 CPU 负载和前端速度变慢的问题。目标——解耦前端和后端(媒体编码)部分。

问题 - 将现有应用程序分成两部分(前端部分和后端部分)的最佳方法是什么?

1) 在两台服务器上运行应用程序的两个副本,然后通过 HTTP(或连接到远程数据库)在 POST/PUTting 信息之间进行调用是个好主意吗?

2) 将 CPU 密集型部分包裹在 Rails 代码中是个好主意,还是应该将其从 Rails 功能中剥离出来?

如果有人可以指出运行多服务器 Rails 应用程序的良好指南,那就太好了(搜索返回有关多服务器 Capistrano 部署的问题,但我需要一些不太具体的食谱)。

【问题讨论】:

【参考方案1】:

一种行之有效的常用方法是使用像Resque 这样的工作队列。

管理代码 为了便于管理,请将处理代码和应用程​​序保留在“应用程序中”。 部署两个应用服务器,但在处理服务器上运行 resque worker。

状态变化 如果处理作业与 ActiveRecord 持久化对象相关,您可以从前端轮询状态,并在编码过程中从后端定期更新它。

您可能会发现使用state machine 很有用。

您的问题已转移 现在你是云规模™:D 如果您的队列太长,可以添加更多运行工作程序的处理主机。如果您的前端是唯一可通过 Web 访问的主机,您可以设置机架中间件或运行 Rainbows 以将处理后的结果通过前端代理到客户端。

听起来是一个有趣的项目。祝你好运!

【讨论】:

以上是关于在 Rails 应用程序中分离后端和前端服务器?的主要内容,如果未能解决你的问题,请参考以下文章

在同一个域上分离后端和前端应用程序?

分离 graphql/relay 后端和前端

如果它们是分开的,如何部署后端和前端项目?

重复位置“/”Nginx错误后端和前端

后端和前端分离时的Django CSRF

基于 Laravel API 后端和 Vuejs 前端构建