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
相關文章
相關標籤/搜索