【问题标题】:Data distribution for a system with SOA具有 SOA 的系统的数据分发
【发布时间】:2013-12-20 23:16:43
【问题描述】:

我有一个 rails 应用程序,它管理不同类型的项目和拥有它们的用户。不同类型的项目可能有不同的特性。有许多 sinatra 服务必须访问项目(只读,每个服务都有一个特定的项目类型)。

为每个服务创建单独的表/数据库并使其与 rails DB 保持同步是个好主意吗?在这种情况下,主数据库将保存所有项目。它是 postgres,因此 hstore 可以用于不同的功能。在所有更新中,将使用 Redis pub/sub 或 RabbitMQ 消息发送同步消息。服务将订阅和更新服务特定的表。

系统应该非常可靠、可扩展,并为高负载和新的未知项目类别做好准备。你怎么看?这是否有意义或有更好的方法来满足这些要求?提前感谢您,非常感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby postgresql sinatra soa


    【解决方案1】:

    这里没有万能的答案。答案取决于您的要求,这些将决定您可以采用两种方法中的哪一种。

    第一种方法在概念上是最简单的,即让每个服务访问同一个数据库。这里的优点是您可以相对轻松地扩展,系统简单灵活,并且您可以使用数据库做很多事情来保持工作正常。缺点是db downtime会一次性关闭所有服务。

    第二种方法是将每个服务(或密切相关的服务组)保持为独立的自包含服务,与某种消息传递保持同步。这样做的优点是在提供基本服务方面更加健壮,但在所有保持同步方面的健壮性要低得多(因为 CAP 定理的一致性要求牺牲了可用性,并且您的数据被有效分区)。

    我不知道你会想要使用哪一个。在可能的范围内,我通常会选择单数据库方法,但我是 Postgres 人,而不是 Rails 人。第二种方法在某些情况下也很有效,但它确实有一定的复杂性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2023-03-06
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多