BDR 对于生产 Postgres 同步有多好?

How good is BDR for production Postgres sync?

我有一个系统,其中多个卫星创建金融交易,它们需要与核心服务器同步。卫星是 运行 Rails 具有本地 Postgres 数据库的应用程序的远程服务器。核心是另一个 Rails 应用程序,它有自己的 Postgres 数据库。卫星和核心具有几乎相同的架构(但不完全相同)。一切都是容器化的(应用程序和数据库)。极少数情况下,核心服务器确实会更新所有卫星都需要的一些数据。目前我有一颗卫星,但这个数字会增长到两颗(我认为在遥远的未来不会超过 100 颗)。核心和卫星之间不存在顺序或争用问题。核心永远不会更新与任何卫星相同的事务,并且没有卫星会更新与任何其他卫星相同的事务。更好的是,金融交易有一个 uuid 作为主键。

既然是多主同步问题,自然遇到了BDR。我有以下问题:

  1. BDR生产准备好并稳定了吗?我正在阅读有关几种竞争技术(如 Bucardo 和 Londiste)的文章。它真的会成为 Postgres 9.6 的一部分吗?
  2. BDR 可以处理断开连接的模型吗?我不认为这会经常发生,但我的卫星可能会断开几个小时。
  3. BDR 可以进行选择性同步吗?例如,我只想同步某些表。
  4. BDR 可以处理 100 颗卫星吗?

Is BDR production ready and stable?

是的,BDR-Postgres 9.4 的 BDR 1.0 已经可以投入生产并且 stable。但我会说 since I work for 2ndQuadrant, who develop BDR.

不是独立 PostgreSQL 的直接替代品,您可以在不更改应用程序的情况下使用它。请参阅手册的概述部分。

I’m reading about several competing technologies (like Bucardo and Londiste).

他们都是不同的。不同的取舍。 BDR 手册中对它们进行了一些讨论,但当然,请对此持保留态度,因为我们很难声称自己没有偏见。

Will it really be part of Postgres 9.6?

不,绝对不是。你在哪里看到过这种说法?

将来(但现在还没有)会有 扩展 发布到 add BDR 到 PostgreSQL 9.6 准备就绪时。但它不会是 PostgreSQL 9.6 的一部分,它会是您安装在上面的东西。

Can BDR handle a disconnected model? I don’t think this will be very often, but my satellites could be disconnected for hours.

是的,它可以很好地处理临时分区和网络中断,但对全局序列有一些警告。详见手册。

Can BDR do selective syncs?

是的。请参阅复制集手册。

Table 结构始终被复制。目前初始 table 内容也是如此。但是可以有选择地复制 table 更改,table-by-table.

For example, I’d only want certain tables be sync-ed.

当然可以。

Could BDR handle 100 satellites?

不太好。这是一种网状拓扑结构,希望每颗卫星都能与其他卫星通信。此外,每个节点有 198 个后端(99 个 walsenders + 99 个 apply worker)。不好看

您真的想要一个星型和中心模型,其中每个卫星只与中心通信。 BDR 1.0 不支持它,BDR 2.0 也不支持它。

我认为这是 pglogical 或 Londiste 的更好用例。

我真的不能在这里详细介绍,因为它与我参与的商业咨询服务重叠。与我合作的团队为客户设计这样的东西作为 professional service