高级节流适用于一台服务器,但不适用于其他服务器

Advanced throttling works one server but not on other servers

我有 4 个 WSO2AM 服务器(未集群)都指向同一个数据库实例。我启用了高级节流,并创建了订阅层策略,但它似乎并没有在所有实例上启动。

所有服务器都有 gateway/key manager/traffic 本地管理器 运行(非集群)。由于它们指向同一个数据库实例,所有流量管理器都应该能够检索策略并将其应用于每个调用。

我使用 REST api 在 1 台服务器上为应用程序创建了订阅。当我转到其他 3 个服务器并获取此应用程序的订阅列表时,我看到它具有正确的层级。

创建订阅的服务器确实正确节流。

服务器 1:使用新层为应用程序创建订阅 服务器 1/2/3/4:调用 /api/am/store/v0.14/subscriptions?applicationId=5DBAC189B8820398E05400144FF96272 时,请检索正确的层级 服务器 1:调用端点资源受到限制。 服务器 2/3/4: 调用端点资源未被限制。

我不想也不需要将这 4 个服务器集群在一起,我在它们前面有一个负载均衡器以均衡方式引导流量。

我希望所有 4 个 WSO 服务器都能限制该应用程序对下游服务的访问。

关于为什么其他 3 个服务器没有 throttle/apply 政策的任何指示?可能是让其他服务器从数据库重新加载数据的一种方法。

文件系统中部署了节流策略的运行时工件。 (in repository/deployment/server/executionplans/) 目前,它仅部署在创建的节点上。这就是为什么您仅在该节点中看到速率限制的原因。因此,要解决此问题,您需要在所有 4 个节点中共享这些。您必须已经对 Synapse 文件执行相同的操作。对执行计划也做同样的事情。

另一件需要注意的事情是,由于每个网关都与其本地 TM 通信,因此限制计数也将在本地(而非共享)。如果这是一个问题,我建议您有一个外部 TM 并让所有 GW 发布到该 TM 节点。