WSO2 APIM 3.2.0与IS 5.11.0角色变更延迟问题如何解决?
问题成因
WSO2 APIM 3.2.0默认对用户、角色及权限类数据开启了本地缓存,其中角色对应的UserRoleCache默认过期时间为35分钟。你通过IS更新角色数据后,仅会触发IS节点本地的缓存失效,由于未配置跨节点的缓存同步机制,APIM节点无法感知到后端共享数据库的变更,只能等待本地缓存到期后才会重新从数据库拉取最新的角色数据,因此会出现35分钟的同步延迟。
解决方案
你可以根据实际场景选择以下任意方案解决:
- 临时优化方案(无法完全实现即时生效,仅缩短延迟)
修改APIM节点的<APIM_HOME>/repository/conf/deployment.toml配置,调小缓存过期时间,最小可设置为1分钟:
配置完成后重启APIM节点生效。[user_store] cache_expiry_time = 1 - 正式方案(可实现角色变更即时生效)
开启WSO2集群缓存同步机制,将IS和APIM节点加入同一集群域,跨节点的缓存失效事件会通过集群消息通道广播,APIM节点收到IS的角色变更缓存失效事件后会立即清除本地对应缓存,直接从数据库拉取最新数据。
两个节点的<产品_HOME>/repository/conf/deployment.toml都需添加如下集群配置:
配置完成后依次重启IS、APIM节点即可。[clustering] enable = true domain = "wso2-shared-user-domain" localMemberHost = "当前节点的内网IP" localMemberPort = 4000 # 不同节点配置不同端口,比如IS用4000,APIM用4001 members = [ {hostname = "IS节点的内网IP", port = 4000}, {hostname = "APIM节点的内网IP", port = 4001} ] - 手动触发方案
每次在IS侧完成角色更新操作后,调用APIM的管理API主动清除角色缓存,调用地址为POST <APIM_HOST>/services/AuthorizationAdminService/clearAllUserRoleCaches,使用APIM管理员账号的Basic Auth鉴权即可。
内容的提问来源于stack exchange,提问作者nivedhav
相关产品推荐
相关产品推荐

