脚本映射器导致严重的性能问题

Script mappers causing significant performance issues

场景与问题:

  1. 我通过直接授权验证为用户
  2. 我验证的客户端有一系列默认和可选范围,其中包含自定义 JS 脚本映射器,用于向令牌添加自定义声明。 (这些脚本包含基于组成员和组属性的衍生逻辑)
  3. 我取回我的访问令牌并将其分配为我的下一个请求的不记名令牌。
  4. 我向通过网关(使用 OpenFeign)路由的微服务客户端(参见下面的体系结构)发出了一个 http 请求。 (网关和微服务客户端都使用授权来定义受权限控制的资源。
  5. 问题: 当我通过网关时,客户端适配器(spring 引导)命中 POST /auth/realms/*/protocol/*/token/,这导致通过所有 JS 映射器再次(直接进入客户端服务器避免了这种情况)。 JS 映射器一开始会增加 2000 毫秒,但对 30 个以上的并发用户进行负载测试会使 CPU 达到 100%,从而导致瓶颈并平均增加实际请求 10000 毫秒。

我不太确定这是否是实现事物的正确方法。但我正在寻找有关可以做什么的任何建议。完全重新设计非常昂贵,如果有任何替代方案可以解决此问题,我将不胜感激。

架构:

我有一套 spring 引导微服务,在它前面有一个使用 Eureka 发现客户端的网关。

该图在一定程度上说明了架构,但是,它忽略了客户端将在此之前进行身份验证并从 Keycloak 检索令牌的事实。

客户

我有混合使用多种身份验证流程的客户端

将适配器移动到 Java 将产生重大影响。根据我的经验,此预览功能(JS 脚本映射器)不适合生产 - 至少不适合我们在系统上使用它的级别。

下面的 gatling 测试清楚地表明 Java 映射器提供了 10 倍以上的性能提升。

The performance with using JS mappers

The performance with using Java mappers