![Heroku - 分发单片 Rails 应用程序](https://linux22.com/image/716353/Heroku%20-%20%E5%88%86%E5%8F%91%E5%8D%95%E7%89%87%20Rails%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我们有一个相当大的单片 Rails 应用程序,它具有一些功能(括号中是占总代码库的估计百分比):
- 用户未登录时的营销网站:主页、附加登录页面、SEO 页面、注册/登录页面等 (5%)
- 登录后面向用户的页面:登录后,用户可以看到 Web 应用程序并与我们的产品进行交互(20%)
- 登录管理员页面:登录后,管理员可以使用集成的 CMS 管理用户可以看到的所有内容 (75%)
随着时间的推移,网站的管理部分变得越来越庞大。以上所有内容仍然位于一个单独的 Rails 应用程序中,托管在一个 Heroku Performance-M 测功机上。
问题是,很多时候,“管理员”使用率过高会导致整个服务器速度变慢,从而影响非管理员用户。
因此,我们希望将负载分成多个 Heroku Web 测功机,但是为了简单和提高开发速度,我们希望保留单个 Rails 应用程序。
解决这个问题的最佳方法是什么?
谢谢!
PS - 我不确定 Serverfault 是否是发布此内容的最佳地点...但选择哪个地点确实令人困惑。如果我选择了错误的发布地点,请告诉我,我会在那里发布。
答案1
简单的答案是将其拆分为两个 dyno,并在其前面放置一个第 7 层路由器,如 HAProxy、Varnish 或 heroku 提供的任何路由器。/admin/* 转到一个 dyno,其他所有内容转到另一个。两个 dyno 上的应用程序相同,只是不调用站点的某些部分。
然而
这只在应用程序性能问题时才有用。例如,如果管理页面正在关闭数据库 - 那么这丝毫不会提高性能。
此外,这假设您的应用程序实际上可以正确处理状态和会话 - 当从 1 台服务器扩展到 2 台时,很多事情可能会突然出现并困扰您。确保进行大量测试,并在发生变化时与客户沟通。计划回滚,因为部署可能需要您尝试几次。