基于COS日志实时自动刷新CDN缓存

2021-04-16 12:23:04 浏览数 (1)

问题场景

背景:现在很多公司使用对象存储服务来存储静态文件/图片等,充分利用云上功能实现数据处理(数据万象),如COS的缩放/裁剪等功能;同时通过CDN的加速能力,提升访问质量。

问题:文件删除,可能来自第三方的投诉;可能来自违规;可能来自公司本身业务需要等等;COS文件删除,CDN需要刷新缓存;如果用了数据处理能力,比如万象,可能会产生同一个key,数个URL,都需要刷新缓存

解决:

单key-单path场景,如key为/aaa/bbb.jpg,删除的缓存也只有/aaa/bbb.jpg的场景,目前已提供函数计算功能自动刷新的功能;

单key-带有参数或者样式场景,如key为/aaa/bbb.jpg,删除的缓存URL可能是/aaa/bbb.jpg,也可能是/aaa/bbb.jpg?aaaa=1233&a=b,也可能是/aaa/bbb.jpg/yangshi,目前函数计算还未覆盖此场景,需要通过COS的实时日志即CLS日志服务来自动实现刷新功能,同时支持第一种场景的覆盖。

架构拓扑

实现过程

前提条件:

  • 先开通对应cos bucket的日志检索功能
  • 获取对应的日志集和日志主题信息
  • 获取账号API密钥信息
  • 获取CLS对应不同地域的公网域名信息

可用地域链接

创建函数服务

基础配置和函数代码:

  • 创建方式:选择"自定义创建"
  • 函数名字:自定义即可,比如refresh_cdn_cache
  • 地域:需要和cos bucket同地域
  • 运行环境:选择"python3.6"
  • 函数代码:选择"本地上传zip包"

本地zip包请使用本文附件:

refresh_cdn_cache_150b4751-1e47-47fe-bfbd-fb6986ec9020.zip

高级配置-环境配置:

代码语言:javascript复制
cls_day_num=7                                   # 检索日志的周期
cls_domain=ap-shanghai.cls.tencentcs.com        # 对应区域cls日志服务的公网域名
cos_bucket_name=tinkerli-cls-1251956900         # 对应的cos bucket的名字
hosts=cls-cos.xxxxxxx.cn                        # 对应需要清楚缓存的CDN域名,支持多个,以';'分割
logset_id=49fc1a43-a340-49c8-91be-fcb4abd106a4  # 对应的日志集id
secret_id=AxxxxD7nxxxxxxxxxxLDsiN7B8p  # 对应API密钥id
secret_key=d1AHFJDtdDLjxxxxxxxx    # 对应API密钥key
topic_ids=0b82160f-9c46-4b95-a668-63874b5cf37f  # 对应的日志主题id

触发器配置:

  1. 触发方式:选择COS触发
  2. 事件类型:选择删除文件

功能验证

COS 文件删除:

  • 批量删除和单文件删除均可,比如通过cos的控制台批量删除

查看SCF运行日志:

  • 可以看到批量删除3个文件,触发了三次云函数调用,均成功。

验证CDN刷结果:

  • 到CDN的控制台-查看刷新结果

可以看到各URL均刷新成功,无论带样式的还是拼接URL的

补充说明

  • 腾讯云日志服务已逐步支持腾讯云各种云产品日志接入,如CLB,CDN,COS,TKE等等均已支持;
  • COS批量删除文件,会触发多个文件的删除事件;
  • 本文只是针对一个场景的问题解决,更多基于日志的玩法欢迎交流。

0 人点赞