Moqui框架如何处理多租户? Moqui的方法是否类似于Apache OFBiz? Ofbiz为每个租户提供单独的数据库。 Moqui是一个强大的框架,它继承了OFBiz的许多好处,并且也有很多改进。处理多租户有任何改进吗? 是否有任何样本多租户应用程序(HiveMind或示例应用程序)
我正在评估一个webapp的框架,它具有次要的数据库交互(只有10到20个表),应该为100个或更多的客户提供服务。对于这样一个较小的应用程序而言,为单独的租户建立单独的数据库变得很难。有任何Moqui处理此事的建议吗?一种选择是在此应用程序中的每个实体中创建一个字段名称tenant_id,并且每当执行数据库操作时,每个数据库查询都应检查此字段。
答案 0 :(得分:1)
与OFBiz相比,Moqui在多租户功能方面具有各种附加功能,但是它确实使用了一个应用服务器(或应用服务器群集)的相同方法,每个租户使用一个数据库(如果数据库,则每个租户使用一个以上的数据库)分裂)。
要在单个数据库中真正支持大量租户,需要大量工具。您基本上必须在多租户层中构建功能,以便不仅处理应用程序需求,而且通常直接使用数据库完成其他所有操作(其他应用程序,报告,导出/迁移,需要时隔离备份等)。当扩展非常大时,您还需要在多个数据库服务器上构建对分片租户的支持。换句话说,要做得恰到好处并不是一件简单的事情。
100个租户并不是那么糟糕,你可以通过每个租户一个数据库来做到这一点。最好建立自动化来配置租户,您可以根据Moqui中已有的租户配置服务来实现。您甚至可以将逻辑添加到" shard"如果您(例如)想要将每个数据库服务器限制为50或100或任何租户,则跨多个数据库服务器的租户。您可以通过这种方式扩展到数千个租户,但当然,您还需要处理其他扩展细节。
您当然可以使用向每个实体添加tenantId的方法,或让Entity Facade自动执行此操作(可能对于除租户公共组中的实体之外的所有实体)。如果您想跨租户报告,并且每个租户的数据量不是太大,那么这可能是一个很好的方法。
您可以仅为自定义实体执行此操作,但根据所需的功能,您可能还需要将其添加到Moqui实体。例如,如果您希望在不同租户之间隔离用户,则必须将tenantId添加到UserAccount和大多数其他安全实体(用于授权,用户组,权限等)。您还可以将tenantId作为非PK字段添加到UserAccount(使用extend-entity以避免修改原始实体定义),然后根据经过身份验证的用户查找租户(如果是用户,则在单独的连接表中查找可以访问多个租户。)
复杂性和可能的变化是无穷无尽的......一切都取决于你想做什么!
与此最接近的概念是地幔数据模型中的组织方。各种设计旨在支持同一系统中的多个组织,但它们之间没有严格的隔离。这实际上适用于伞式组织内的多个部门和其他小型组织。