如何最好地将管理员功能与公共网站分离?

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

你目前的瓶颈是什么?是数据库还是CPU?你预计会在其中一个或两个方面遇到瓶颈吗? - Dean J
嗯,从这两个中选择的话,我会说是数据库,但主要是用于复杂的仅限管理员查询(例如仪表板;大型、导出许多链接表格到 CSV 以供营销使用)。 - AndrewO
2个回答

3
据我所知,如果您确实想确保公共面向性能和管理性能不会互相影响,您将需要在不同的服务器上使用单独的数据库。
关键是要充分了解数据在哪里以及数据如何参与过程。如果您能做到这一点,那么尝试确定是否可以使一个数据库成为“主导”数据库。这将是您的实时数据,另一个数据库将是您的操作数据存储(ODS)。 ODS始终是从实时数据派生而来。从实时数据更新ODS的过程可以定期进行,并且可以简化数据并对其进行附加处理,以使其更适合使用ODS的应用程序。
现在,如果您发现这对于您当前的情况来说太过困难,您可以至少在数据库内部分离数据,这样您就不会遇到像表锁等性能问题。它也可以是朝着未来需要转移到类似ODS的模型的正确方向迈出的一步。

0

我不喜欢复制不必要的内容。我会标记仅限管理员使用的内容,并将其构建为具有内部IP或不同端口的单独数据库。然后,为管理员访问在公共站点上建立外键关系。将其视为索引表会更容易管理,而不是复制和开发API,特别是当您不与遗留系统交互时。此外,如果您想保持系统分离,为什么要进行复制呢?这是我的两分钱。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接