我正在开发一个网站,该网站在用户群和功能方面都在增长,以至于很明显一些管理任务应该与公共网站分开。我想知道最好的方法是什么。
例如,该网站有一个很大的社交组件,以及一个公共销售界面。但与此同时,管理部分中有后台任务、批量上传处理、仪表板(带有长时间运行的查询)和客户关系工具,我不想受到公共交通高峰的影响(或影响公众-面临响应时间)。
该站点运行在一个相当标准的 Rails/MySQL/Linux 堆栈上,但我认为这更多是架构问题而不是实现问题:主要是,如何在这些不同的应用程序之间保持数据和业务逻辑的同步?
我正在评估的一些策略:
1)在另一台机器上创建面向公众的数据库的从数据库。 提取所有模型和库代码,以便在应用程序之间共享。为管理界面创建新的控制器和视图。
我在复制方面的经验有限,甚至不确定应该以这种方式使用它(我看到的大部分时间都是为了扩展同一个应用程序的读取能力,而不是拥有多个不同的应用程序) . 如果从站不在同一个网络上,我也担心潜在的延迟问题。
2)创建新的更多特定于任务/部门的应用程序,并使用面向消息的中间件来集成它们。 不久前我阅读了 Enterprise Integration Patterns,他们似乎提倡将这一点用于分布式系统。(或者,在某些情况下,基本的 Rails 风格的 RESTful API 功能可能就足够了。)但是,我对数据同步问题以及这将需要进行的大规模重新架构做噩梦。
3)两者的某种混合。 例如,某些后台任务所需的唯一公共信息是只读的完成时间或状态。将它放在一个完全独立的系统上并将数据发送给公众是否有意义?同时,用户/组管理功能将在共享数据库的单独系统上运行?不利的一面是,这似乎保留了我对前两个问题的许多担忧,尤其是重新架构。
我确信答案将高度依赖于网站的特定需求,但我很想听听成功(或失败)的故事。