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