cdn削峰

需求背景

cdn的收费方式按最高点来收取,为了节省成本,须要在cdn的流量到达最大成本值前经过服务器程序限制客户端的请求流量php

目前流量激增,为了控制太高的CDN流量,目前作一个快速轻小控制方案数据库

需求分

cdn的流量请求来源有:缓存

  1. 静默升级
  2. 用户点击下载
  3. 一些活动图片资源
  4. 非法请求(本篇不涉及)

其中2,3不作限制,静默升级是控流的主要入口服务器

目标

在后台运营设置的流量目标值范围上下浮动,因此目标值能够适当调整在实际阈值小一点app

Cdn201711281613.jpg

终极目标 在后台运营设置的流量目标值范围如下,且使得流量的波动曲线尽可能平稳数据库设计

削峰泳道图

Cdn201711281626.png

  1. 后台配置不一样国家范围的阈值容许的请求宽带值和优先级,并更新在db中
  2. 经过task任务将获取的当前带宽存储在db中
  3. task任务读取不一样国家的阈值和优先级,将国家优先的cdn更新到db中
  4. 接口经过定时任务,定时将国家优先放行的cdn从db缓存在内存中
  5. 客户端请求根据静默升级接口返回的数据延时则延时,有下载连接则下载

应用商店逻辑结构图

Cdn201711281620.png

数据库设计

CREATE TABLE `T_CDN_INFORMATION` ( `FID` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', `FCDN_DOMAINNAME` varchar(100) NOT NULL COMMENT 'ali http://hotapps-res.in.meizu.com,tencent http://hotapps1-res.in.meizu.com', `FCDNID` varchar(8) NOT NULL COMMENT 'cdn', `FBANDWIDTH_THRESHOLD` int(10) unsigned NOT NULL COMMENT '带宽阈值,单位为 m', PRIMARY KEY (`FID`), UNIQUE KEY `UDX_CDN` (`FCDNID`) )COMMENT='CDN 信息表'; CREATE TABLE T_COUNTRY_CURRENT_CDN_MANUFACTURER( FID int(10) unsigned NOT NULL AUTO_INCREMENT, FCOUNTRY varchar(4) COLLATE utf8_bin NOT NULL COMMENT '国家,空串表示FCDN为ali', FCDN tinyint(4) NOT NULL COMMENT '-1-不放行;0-ali;1-tencent', PRIMARY KEY (FID) )COMMENT'国家当前可用的cdn,定时任务实时更新'; INSERT INTO T_COUNTRY_CURRENT_CDN_MANUFACTURER(FID, FCOUNTRY, FCDN) VALUES(1,'',0); 

缓存设计

内存缓存数据

字段 数据类型 含义
country String 国家,空串是默承认用的cdn厂商
cdnManufacturer String 0-不放行,1-ali,2-tencent
相关文章
相关标签/搜索