我们正在运行具有两种节点的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集群仅用于缓存失效调用。这可能对你有用。 (免责声明:我还没试过这个。)
为此,你需要在ForceLocalCache
中将true
设置为carbon.xml
<Cache>
<!-- Default cache timeout in minutes -->
<DefaultCacheTimeout>15</DefaultCacheTimeout>
<!-- Force all caches to act as local -->
<ForceLocalCache>true</ForceLocalCache>
</Cache>
老实说,我认为你应该探索更多如何配置Hazelcast。 Hazelcast嵌入了许多非常高度使用的项目堆栈(JHipster,Atlassian,Apache Camel,SunGard等)。它非常适合在这里做你想要的,但它也是高度可配置的,所以你可能想要根据它设置它您的需求。如果您只是禁用它,则会删除它带来的所有集群可伸缩性。配置只是一个XML文件,您可以在此处找到所有文档:
https://docs.hazelcast.org/docs/3.11.2/manual/html-single/index.html#understanding-configuration
这很容易弄清楚,绝对值得你花时间。