使用相同的数据库实例负载均衡的 Moqui 实例

Load balanced instances of Moqui using the same DB instance

在Moqui中可以这样配置吗?我所看到的关于多个实例(例如 this question and the framework doc pages)的所有内容都涉及每个实例的数据库,而不是一个公共的共享数据集。

我们需要在每个应用程序实例(和一致的缓存)中提供相同的数据,以便我们可以跨多个实例对最终用户进行负载平衡。我们将支持全球用户,因此我们可能需要创建更接近用户实际位置的应用程序实例,以减少延迟;我们还希望确保我们可以在基于云的部署中充分利用弹性水平扩展。

多租户和较新的多实例变体与您正在寻找的相反。它们适用于大量小型实例,而不是针对同一数据库的具有多个应用程序服务器实例的单个大型分布式实例。运行。

对于集群支持,Moqui 默认使用 Hazelcast,尽管这是通过一系列可以与其他分布式计算工具一起实现的接口来实现的。这是 运行 带有 Hazelcast 的多服务器集群所需的组件:

https://github.com/moqui/moqui-hazelcast

集群最重要的方面是实体(数据库)缓存的缓存失效和网络会话复制。它还支持自述文件中提到的用于分配工作负载和数据的其他工具。

对于跨多个数据中心或地理区域的分布,存在更大的问题。 Moqui Framework 主要用于需要严格事务一致性的事务应用程序,如会计、库存管理等。大数据或 NoSQL 风格的最终一致性和其他类似的方法不适用于 ERP 和其他交易应用程序,没有办法在数据库中使用锁等来防止资金双花、双重预订或库存发行等.

考虑分布式关系事务数据库的挑战,即多主数据库集群。对于多主设置,事务必须传播到所有主节点并在其上提交才能被视为已提交。即使所有主节点都在同一个本地网络上,这也会对性能产生影响,如果主节点位于不同的数据中心或地理区域,则会对性能产生不合理的影响。

对此的主要解决方案是应用程序级别的地理分片,通常反映具有地理分部的大型企业的结构。 Moqui 使用 Entity Sync 或其他工具将数据从地理区域馈送到可以完成报告等的中央服务器(或集群),对此类事情有一些工具级别的支持。这种部署没有 OOTB 实体同步或其他配置,目前还没有需求。这只对超大型跨国公司有意义,据我所知,Moqui 对这个市场没有任何用处。

如果您正在考虑做电子商务之类的事情并且需要更广泛地分布电子商务网站,那么这个问题比跨多个全球实体协调库存或会计更容易。为此,只需在不同的数据中心拥有单独的电子商务实例,将 order/etc 数据提供给 Moqui ERP 实例,这与任何典型的外部电子商务应用程序非常相似。