CDN手动预热功能20170331思维导图
2017-03-31 14:19:07 0 举报
AI智能生成
CDN手动预热功能20170331思维导图主要展示了CDN预热的整个过程。首先,用户需要在CDN管理界面上选择需要预热的资源,然后设置预热的时间和目标地区的IP。接着,系统会根据用户设置的信息,自动将资源推送到指定的CDN节点。在预热过程中,用户可以实时查看预热的状态和进度。预热完成后,资源就可以在指定地区被快速访问了。此外,该思维导图还展示了一些常见的问题和解决方法,如资源预热失败、预热时间过长等。通过这个思维导图,用户可以清晰地了解CDN预热的流程和操作步骤,从而更好地使用CDN服务。
作者其他创作
大纲/内容
CDN刷新模块
供消息中心调用context.addServlet(MsgCenterServlet.class, "/msg/*");
代码分析
流程处理
request中url不为空 手动刷新CDN
requst中dnsKey不为空 并且 fileId不为空 就进行系统刷新CDN
具体业务代码 刷新CDN doFlushCDN
首先根据url获取对应的task
url
urls
遍历task
baiyunsan做成队列
白云山做成队列,供减少并发量
通过队列往里面添加
一条一条记录进行刷新处理的
利用到了线程的延时操作
进行了url长度判断
面向对象task
CdnResponse runNoCallback()
cdnAdaptor.refresh(this)
面向对象 多态进行处理
添加了一个taskProcessor
添加到队列里面
线程worker里面还执行run
构造方法里面也执行run
主要是url的长度不一样
一些url长度小于100
5s后处理
5s后处理
一些url长度大于100 马上处理
还添加了一个开关
一个命名为schedul
定时刷新长度小于100的 自动刷新有5s的延时
一个命令为mannul
手动刷新长度大于等于100的 手动刷新立马执行
有没有可能同时刷新
逻辑上没有交集
添加一个开关
开关的左右以及逻辑
逻辑
大于100条 直接指向
小于100条 通过定时任务执行
通过队列放入一个 任务中
子主题
非白云山的 找到对应的adapter 进行refresh操作
结果都封装在task里面
根据结果打印日志
子主题
doFlushCdn
封装request的过程
url 转换为 List<CDNRequestTask>
非白云山 每一个task注入adapter
runNoCallback
解析task封装 为httpClient
发送请求
解析response
白云山
url加入到processor
processor启动了5个工作线程以及一个队列
刷新CDN添加一个开关 如果url的长度小于100 并且workerBlocking开关是开着的
进行刷新CDN
worker里面如果url的长度大于100 开始刷新CDN
TaskProcessor
里面存在一个内部类
Worker
构造方法启动一个线程刷新CDN
worker里面有实现thread 这个线程里面也是刷新CDN里面唯一的条件不同就是
url长度不同 并且run从队列里面取出
url长度不同 并且run从队列里面取出
CDN预取
预取一个模块
流程好整理 不影响原来的业务
维护困难
扩展性不强
共用一套 厂商与CDN的关系
在原来的模块进行扩展
刷新
预取
如果需求再次添加一个呢
需要为自动刷新预留接口
考虑回调callback的扩展
扩展
CDN厂商的扩展
CDN对应的域名的扩展
子主题
手动
添加一个servlet
接收参数为url
参数非空校验
执行刷新操作
根据url构建请求request
无callback的处理
采用异步定时发送 主要解决的问题就是超时的问题timeout
封装请求requst CDNRequestTask
在定时任务的线程里面 进行账户信息的封装
将task通过转化为json的格式 发送给服务器
处理的时候 url有格式要求的
1 每个url 必须以http 或者https来处理 可以通过getUrl来进行处理
2 最大长度1000字符 task.getUrlSize<100 能处理
3 网速科技加速的域名 构建好处理
4 url 中文 utf-8 可以使用编码
5 url单次上限400条
通过队列 来处理
不到400通过定时任务来处理
6 不支持正则 不支持 目录 文件只是一个url
todo 忽略
主要问题就是 封装task
可以复用task吗 urls 可以使用
user_name
check_code
fetchOption
need_feedBack
reversTime
实现的时候不指定
这些需要在子类中添加
url格式校验
如果是异步操作
一步操作有一个条件是长度不能大于400条 而不是1条 1条的处理
子主题
遍历task
将url添加到队列
启动内部类 执行刷新操作
封装request
处理响应
将结果返回给客户端
捕获异常
有一个问题 就是一次请求不能超过400个 这边做控制比较好
servlet不需要做控制
新流程
1 一个url 转化为多个task 可能是一个url刷新多个CDN
2 将这个url添加到队列中
3 取出url 放入到task中
4 task超过100就进行处理
5 没有超过就通过定时任务处理
具体需求
需要异步队列 防止问题 timeout
同时需要考虑最大条数不超过400条的问题
问题
1 一条一条刷新 效率低
2 多条一起刷 会造成 超过400 问题
3 多条一起刷 会产生 延时问题
解决 实现
1 超过100条进行自动刷新
2 没有到100条就会进行定时任务处理
功能测试
1 网宿返回成功 那么久成功了
2 预热一下图片 然后在请求图片 请求的图片应该访问CDN而不是 我们的服务器 这个比较准 比较难测试(麻烦)
分支主题4
子主题
子主题
分支主题5
子主题
子主题
0 条评论
下一页