9

我正在开发一个网站,该网站在用户群和功能方面都在增长,以至于很明显一些管理任务应该与公共网站分开。我想知道最好的方法是什么。

例如,该网站有一个很大的社交组件,以及一个公共销售界面。但与此同时,管理部分中有后台任务、批量上传处理、仪表板(带有长时间运行的查询)和客户关系工具,我不想受到公共交通高峰的影响(或影响公众-面临响应时间)。

该站点运行在一个相当标准的 Rails/MySQL/Linux 堆栈上,但我认为这更多是架构问题而不是实现问题:主要是,如何在这些不同的应用程序之间保持数据和业务逻辑的同步?

我正在评估的一些策略:

1)在另一台机器上创建面向公众的数据库的从数据库。 提取所有模型和库代码,以便在应用程序之间共享。为管理界面创建新的控制器和视图。

我在复制方面的经验有限,甚至不确定应该以这种方式使用它(我看到的大部分时间都是为了扩展同一个应用程序的读取能力,而不是拥有多个不同的应用程序) . 如果从站不在同一个网络上,我也担心潜在的延迟问题。

2)创建新的更多特定于任务/部门的应用程序,并使用面向消息的中间件来集成它们。 不久前我阅读了 Enterprise Integration Patterns,他们似乎提倡将这一点用于分布式系统。(或者,在某些情况下,基本的 Rails 风格的 RESTful API 功能可能就足够了。)但是,我对数据同步问题以及这将需要进行的大规模重新架构做噩梦。

3)两者的某种混合。 例如,某些后台任务所需的唯一公共信息是只读的完成时间或状态。将它放在一个完全独立的系统上并将数据发送给公众是否有意义?同时,用户/组管理功能将在共享数据库的单独系统上运行?不利的一面是,这似乎保留了我对前两个问题的许多担忧,尤其是重新架构。

我确信答案将高度依赖于网站的特定需求,但我很想听听成功(或失败)的故事。

4

2 回答 2

3

据我从您的描述中可以看出,如果您真的想确保面向公众的性能和管理性能不会相互影响,您将不得不在不同的服务器上使用不同的数据库。

关键是要很好地了解在哪里使用了哪些数据以及数据如何参与流程。如果你能做到这一点,那么试着确定你是否可以让一个数据库成为“领先”的数据库。这将是您的实时数据,另一个数据库将是您的操作数据存储 (ODS)。ODS 始终是您的实时数据的衍生产品。从实时数据更新 ODS 的过程可以间隔发生,既可以简化数据,又可以进行额外的处理,使其更适合使用 ODS 的应用程序。

Now if you find this will be to much of a leap for your current situation, you can try and at least seperate the data within the database, so you won't be dealing with performance issues like table locks, etc.. It can also be a step in the right direction for if you need to move to an ODS like model in the future.

于 2010-05-11T08:39:12.540 回答
0

我不喜欢复制不需要的东西。我会标记什么是仅管理员,并将该部分构建为具有内部 IP 或不同端口的单独数据库。然后与公共站点建立外键关系以供管理员访问。将其视为索引表将更容易管理而不是复制,并且当您不与遗留系统交谈时,API 开发是一项不必要的任务。另外,当您想保持系统独立时,为什么要复制。他们是我的两分钱。

于 2010-05-10T18:42:35.563 回答