WSO2:AM:在没有 Hazelcast 的情况下填充组织更改

WSO2:AM: populating organization changes without Hazelcast

我们运行正在使用具有两种节点的 WSO2-AM 2.6 多租户集群

共享信息b/w发布者和网关是使用 EFS 完成的。

到目前为止,我们一直在启用 Hazelcast 的情况下工作,但我们更愿意禁用 Hazelcast,因为它给我们带来了很多生产上的痛苦,而且我们知道在 WSO2 2.x 中它不是强制性的它启用了。

我们使用以下设置测试了我们的系统:

<clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" enable="false">

一切 运行 一切正常,除了我们注意到的一个副作用:需要很长时间(甚至可能是 15 分钟)才能将停用或重新激活租户填充到工作人员节点。

当用新创建的 API 创建全新的组织时,几乎可以立即在工作人员处 运行 API。但是如果你禁用组织,API 仍然会 运行。工作人员报告租户不再活跃需要很长时间。

重新激活租户也是如此。需要很长时间才能让工人停止抱怨不活跃的组织并允许 运行宁 API。

是否有我们需要更改的配置设置?或者这是预期的行为?在没有 Hazelcast 的情况下,谁应该向员工报告组织变化?

有一个包含租户信息的租户缓存[1]。缓存(和任何缓存)的默认 TTL 为 15 分钟。当您停用租户时,将使用 hazelcast 清除此分布式缓存。这就是为什么您在禁用 hazelcast 集群时观察到上面的内容。

通常,在生产环境中,您不太可能需要非常频繁地激活和停用租户。所以我不认为延迟 15 分钟是一个令人担忧的问题。

但是,如果确实如此,您必须启用 Hazelcast 集群。当您说您因 Hazelcast 而面临很多痛苦时,我相信那是因为这些缓存的分布式特性。作为一种解决方案,您可以启用本地缓存而不是分布式缓存。在这里,Hazelcast 集群仅用于缓存失效调用。这可能对你有用。 (免责声明:我还没有尝试过。)

为此,您需要在carbon.xml

中将ForceLocalCache设置为true
<Cache>
    <!-- Default cache timeout in minutes -->
    <DefaultCacheTimeout>15</DefaultCacheTimeout>
    <!-- Force all caches to act as local -->
    <ForceLocalCache>true</ForceLocalCache>
</Cache>

[1] https://github.com/wso2/carbon-kernel/blob/4.4.x/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/tenant/JDBCTenantManager.java#L303

老实说,我认为您应该探索更多如何配置 Hazelcast。 Hazelcast 嵌入了许多非常常用的项目堆栈(JHipster、Atlassian、Apache Camel、SunGard 等)中。它非常可靠,可以在这里做你想做的事,但它也是高度可配置的,所以你可能想根据您的需求。如果您只是禁用它,您将删除它带来的所有集群可伸缩性。配置只是一个 XML 文件,您可以在此处找到所有文档:

https://docs.hazelcast.org/docs/3.11.2/manual/html-single/index.html#understanding-configuration

它很容易理解,绝对值得您花时间。