官网友情链接 wecomapi.com

企微外部群自动化为了提高性能,通常会把群配置放在缓存里。

在这里插入图片描述

群类型。

机器人开关。

服务时间。

自动回复规则。

负责人。

这样每来一条消息,不需要都查数据库。

但缓存会带来另一个经典问题:

配置已经修改,机器人却仍然使用旧值。

例如运营把某个重点群机器人关闭。

数据库已经:

bot_enabled=false。

但Redis缓存仍然:

true。

接下来几分钟机器人继续公开回复。

所以企微开发API系统需要认真设计“配置缓存失效”。

WeComApi 可以作为企微API接入层,把外部群和消息能力接入业务系统。本地配置中心则通过版本、事件通知、TTL和最终一致性让缓存尽快更新。

一、不能只依赖TTL

如果TTL=10分钟。

高风险配置关闭以后:

最坏还要10分钟生效。

客户可见机器人控制不能接受这么长延迟。

所以需要主动失效。

二、一个具体例子

运营10:00关闭G100机器人。

数据库写:

config_version=21。

同时发布:

group.config.changed。

所有机器人Worker收到。

删除:

cache G100/V20。

下一条消息重新读取V21。

几乎立即生效。

三、WeComApi 在这里的位置

WeComApi负责:

真正群消息和发送能力。

配置缓存位于业务系统。

发送前必须拿到当前有效业务配置。

四、版本非常重要

缓存内容:

group_config;
version=20。

任务创建时记录:

config_version=20。

发送前发现当前版本21。

旧任务根据规则:

取消/重新评估。

不仅缓存刷新,运行中的任务也要理解版本。

五、主动失效也可能丢

配置变更事件如果因为MQ异常没收到。

TTL仍然是最后兜底。

所以:

事件失效 + TTL

通常同时存在。

六、高风险开关直接读强一致数据?

例如:

群冻结;
营销禁止。

可以在发送安全门使用更强一致性缓存或数据库。

不是所有配置都需要。

普通展示配置可以容忍几分钟。

七、多层缓存

Worker本地内存;
Redis;
数据库。

更新时三层都要考虑。

如果只删Redis,本地内存仍然旧。

可以使用:

version check。

八、批量配置更新

1000个群配置变化。

不要1000条同步阻塞请求。

生成:

config_change_batch。

事件批量通知。

但高风险群优先。

九、继承配置

群配置可能继承:

全局→业务线→账号→群。

上级配置变化会影响大量群。

不能只失效一个Key。

可以基于:

effective_config_version。

或按依赖索引批量失效。

十、灰度

配置V21只对10%群。

缓存Key要包含:

variant/version。

不要某Worker错误把V21缓存给所有群。

在这里插入图片描述

十一、配置删除

删除群级覆盖后:

应该重新继承上级。

缓存失效以后计算:

effective config。

不是返回null。

十二、缓存击穿

批量失效10000群。

下一秒消息全部查数据库。

可能打爆数据库。

可以:

预热;
分批;
single-flight。

配置中心要考虑。

十三、机器人任务

配置变化前已经生成的客户可见任务。

执行前安全门重新获取关键配置。

否则缓存虽然更新,旧任务仍然会发。

十四、数据看板

缓存命中;
配置版本差;
主动失效延迟;
过期缓存;
数据库回源量。

能够评估配置系统健康。

十五、异常

数据库version=30。

某Worker连续使用28。

自动隔离该Worker或清缓存。

这是配置漂移。

十六、权限

运营修改群配置。

管理员修改全局。

所有修改统一经过配置服务。

禁止业务直接UPDATE表,否则不会触发失效事件。

十七、日志

配置修改;
版本;
失效事件;
Worker应用时间。

可以计算:

config_propagation_delay。

十八、总结

企微开发API系统为了性能使用配置缓存很正常,但只要机器人、群发和服务策略依赖缓存,就必须面对配置更新延迟的问题。

WeComApi 可以提供外部群和消息能力。

本地配置中心通过配置版本、主动失效、TTL兜底、多层缓存和发送前最终校验,让运营点击“关闭机器人”以后真正快速生效,而不是数据库已经关了、群里机器人还继续说话。

真正成熟的企微配置系统,不只是读得快,还要保证改了以后足够快、足够确定地传到所有执行节点。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐