如何設計一套好用的自適應流控方案?
自適應流控是指根據當前流量對象的數據特征及預定義的規則,自動調整方法、順序、參數或條件,以期與預定義目標相適應的過程。
什么是自適應流控?
流控,是流量控制的簡稱。在不同的領域有不同的含義,如航空流量控制,網絡流量控制等。
自適應,就是在處理和分析過程中,根據處理數據的數據特征自動調整處理方法、處理順序、處理參數、邊界條件或約束條件,使其與所處理數據的統計分布特征、結構特征相適應,以取得最佳的處理效果的過程。
簡言之,自適應流控是指根據當前流量對象的數據特征及預定義的規則,自動調整方法、順序、參數或條件,以期與預定義目標相適應的過程。
根據上述定義,你是否對自適應流控的概念有了基本的認識呢?Don’t worry,我們將在下文,用案例的方式幫助你理解。So, Take It Easy!
為什么要自適應流控?
1. 引言
在互聯網領域,我們常聽說的諸如:“主站用戶流量太大,需做子頁面分流設計”、“大促請求洪峰將至,需提前做好限流措施”、“數據庫請求量太大,需將查詢請求切流至從庫”等等,都是在討論流控問題,只不過關注的視角和對象不同而已。
- 產品、運營可能更多的是關注用戶流量;
- 研發可能更關心的是服務請求流量;
- DBA(數據庫管理員)在意的可能是數據庫請求量。
職責不同,則視角不同;視角不同,則關注對象不同。
可見,流量控制在互聯網領域應用十分廣泛且廣受關注。
2. 流控的必要性
然而,為什么要進行流量控制呢?我們設想一個典型的流控場景:
假如周杰倫即將在鳥巢開個人演唱會,據官方大數據預測:預計將有10萬觀眾入座,屆時會場將座無虛席。而你有幸擔任本次演唱會的安保工作,負責保障觀眾及時有序地入場和出場。
挑戰:假如有以下三種方案,你將采取哪種方案,以保障觀眾及時有序地入場和出場呢?
- 方案一:設置一個會場入口,觀眾可憑入場券由此入場。
- 方案二:設置一個會場入口,在入場電子指示牌(或入場券上)上標明入場券編號及對應的入場時段,各個手持入場券的觀眾按入場券編號及對應的時段有序入場。
- 方案三:設置多個會場入口,在入場電子指示牌(或入場券上)上標明入場券編號及對應的入場口編號(如A口、B口、C口、D口等),各個手持入場券的觀眾按入場券編號及對應的入場口有序入場。
方案一,沒有進行任何流控的干預
優勢是節省安保及秩序維護的人力或設施成本,劣勢尤為突出:
- 觀眾排隊嚴重,甚至因為排隊時間長而錯過入場,用戶體驗極差;
- 極易造成擁堵,甚至踩踏事件,造成安全事故。
方案二,主要按時間順序(類似“錯峰出行”),對觀眾進行流控
優勢是節省安保及秩序維護的人力或設施成本,劣勢也顯而易見:
- 觀眾排隊現象有所減輕,但觀眾入場時間被嚴格限制,時間不自由;
- 對于未按時間進場的觀眾而言,要么錯失進場機會要么無奈等待,抵觸情緒上升;
總結一句話:用戶體驗差。
方案三,主要按空間分布,對觀眾進行流控
雖然需要更多的安保及秩序維護的人力或設施,但優勢也非常明顯:
- 輕微擁堵,觀眾可根據自己的時間安排靈活快速出入場,用戶體驗佳;
- 不易產生踩踏等安全事故。
另外,方案三的優勢還體現在當演唱會結束時,可以快速完成觀眾的有序出場。
根據各方案的比較后,我相信聰慧過人的你一定會選擇方案三。這也是現實場景中被主流選擇的流控方案。
3. 流控的適用場景
結合上述“演唱會”的場景,我們總結下:在什么場景下需要進行流量控制呢?
一般而言,流量控制被用于具有如下特征的場景:
- 在短時間內匯聚了巨大的流量;
- 匯聚流量的各個個體需得到妥善處理。
線上的典型場景,包括秒殺,搶購,限時大促等,如天貓京東雙11大促、唯品會定時秒殺等,需盡量保障每個用戶都能正常訪問網站或APP,而不是簡單粗暴地攔截或拒絕訪問。
線下的典型場景,包括重大會議(運動會、演唱會、展銷會等)出入場等,每個有入場券的觀眾,都有被合理安排入場和出場的權利,不能隨意拒絕觀眾入場或出場。
4. 關于自適應的理解
如何理解自適應流量控制呢?
回到“演唱會”例子中的方案三,我們是否有欠考慮的地方呢?想象一下如下特殊場景:
- 對于某些特殊群體如VIP、孕婦、行動不便等,一般會提供特殊通道,保障其優先出入場;
- 對于入口而言,若出現故障,則需啟用備用出入口,以保障觀眾有序出入場。
以上場景是否似曾相識?這就是我們所說的“自適應”,即:能夠根據特殊觀眾個體或入口故障等數據特征,自動調整走特殊通道或啟用備用通道的處理方法,以匹配完成觀眾有序快速出入場相適應的目標。
總體而言,“自適應”主要用于:需要根據待處理對象的數據特征,或根據待處理對象所處環境的變化,而匹配相適應的處理方式、條件、規則等的應用場景。
物競天擇,適者生存。世界上唯一不變的就是變化本身。
由此可見,擁抱和適應變化就顯得格外重要,“自適應”的重要性也就不言而喻了。
有自適應流控的典型實踐嗎?
現在,舉一個互聯網電商領域短信自適應流控的案例。
一年一度的雙11大促期間,消費者們購物的激情,被大促節日和網購所烘托的氛圍所點燃和釋放,特別是在雙11當天,億級的消費者幾乎在同一時段內搶購自己心儀的商品。
與此同時,各類短信也在此期間競相迸發,如登錄驗證、支付驗證、預售提醒、活動推廣等,這些短信將在短時間內產生巨大的流量洪峰。如何使這些短信及時可靠下發,成為了是否能保障雙11順利進行的關鍵。
1. 短信下發原理
為了便于理解,在介紹短信自適應流控之前,先簡要介紹短信下發的原理:
如上圖所示,短信下發的原理,可按以下步驟進行簡要概述:
- 由各業務源頭生成短信內容,如注冊登錄、預約預售、活動推廣等;
- 由短信網關按短信類型,將短信內容放入不同的待發送隊列;
- 由短信網關經過分發層,投遞至短信通道商;
- 由通道商轉發至運營商,并最終下發至用戶手機終端。
2. 自適應流控的設計思路
關于短信的自適應流控,設計思路體現如下:
(1)劃分短信類別,定義優先級
將短信按行業規則劃分為驗證碼、通知短信、推廣短信。
- 驗證碼,具有驗證用戶身份或確認用戶操作的作用,包括但不限于APP/網站注冊、安全登陸、支付認證、身份認證、密碼找回、賬號綁定等應用場景。
- 通知短信,用戶在使用或訂閱了企業相關服務后,為使服務履約閉環而由企業程序觸發的通知,包括但不限于提貨通知、訂單通知、支付通知、物流通知、生活服務類通知等應用場景。
- 推廣短信,為了推廣和宣介產品或服務等,由企業主動觸發的短信,包括但不限于用戶調研、抽獎邀請、新品試用、新品宣傳、會員關懷、商品促銷、活動邀請等應用場景。
通過上述對各類型的短信介紹,我們可以判別:
通常來說,用戶對驗證碼短信的時效性要求最為苛刻,需要秒級到達;其次是通知短信;最后才是推廣短信。
因此,我們將優先級的順序定義為:驗證碼>通知短信>推廣短信。優先保障驗證碼的及時下發,其次保障通知短信的下發,最后保障推廣短信的下發。
(2)多通道商備份,制定自適應切換規則。
一般而言,作為備份,會采購多個通道商的短信通道,以確保某個通道商出現故障時的快速切換,最終保障短信的可靠下發。在通道發生故障時,如何快速切換以保障短信及時下發呢?
我們首先想到的是:人工值守和人工切換的方式。當然,這是一種可行的解決方案,但存在切換不及時、非工作時段無法及時響應(特別是在夜間)等諸多弊端。
所以,需要找到更優的解決方案,通過評估分析,我們最后采用了自動化的方式來做通道故障時的快速切換,原理可簡要描述如下:
注:對于不可用通道,我們采用了“嘗試發送”機制進行探活檢測,如果檢測到某故障通道經過修復后達到可用標準,則將其從不可用通道隊列放入可用通道隊列。
3. 度量指標
為了度量該設計方案是否有效,我們定義了2個關鍵的指標:
- 下發延時,下發延時=短信下發至通道商的時間點-收到短信下發請求的時間點;
- 切換耗時,切換耗時=通道切換時間點-通道不可用的識別時間點。
從線上運營數據來看,以上兩個指標的實測數據皆達到項目預期的目標。
總結
本文簡要講述了自適應流控的相關背景、概念、價值及典型實踐,旨在幫助大家建立起對自適應流控的適用場景及必要性等基本認識,其中的自適應短信流控案例來自互聯網廠商,具備一定的借鑒意義,僅供大家參考和探討。
另,受限于作者寫作水平及保密要求等相關原因,有陳述不盡之處,敬請諒解。
本文由 @南瓜哥 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
- 目前還沒評論,等你發揮!