抵禦負載怪獸攻擊 確保可伸縮性的7條祕訣
之前我們討論過系統負載增加時將會遭遇的42個怪獸問題。開發者又該如何完成程式的設計,才能讓程式既易於擴充套件又具備高可靠性?這裡有幾條法則以應對負載怪獸的襲擊,當然這都是在程式低擴充套件等級編寫下需要注意的事項:
1. 限制資源使用的比例
這在實現擴充套件的應用程式中可能是最重要的規則,可以這麼認為:
- 將資源限制到你認為可以支撐應用程式的等級,比如:保證可以在記憶體中處理一定數量的物件。所以如果我們一直按比例新增資源,那麼就可以防止資源枯竭情況的出現。
- 針對個體資源試用不同的設計方式
一些例子:
- 我們需要儲存一個訂單列表,訂單中商品的金額大於20美元(隨便多少)。這種情況下記憶體中儲存的絕不能是這些商品,因為商品的數量可能遠大於訂單的數量。你可以對比列表中訂單的數量和資源的使用率,這樣你就清楚了你的系統可以支撐多少個訂單。
- 使用Merge Aggregation:同一個物件說的所有操作應該整合到一個請求中,而不是為每個操作分別做請求。比如,一個create和一個update就可以整合進一個請求。
2. Merge Aggregation
在Merge Aggregation中,獨立的資料和/或命令聚合到一處,用的是規則1的思想。
舉個例子,如果一個物件中包含了以下幾個命令序列:
- Create
- Update
- Update
這三個分開的請求,可以融合到一處。如果有個迴圈執行了這個請求100次,那麼我們的佇列中始終只有一個請求。
另一個例子是屬性修改事件,獨立的改變也可以融合到一處。想象一下這樣做的益處有多大,佇列的長度永遠都不會超過物件的數量,不管觸發了多少事件。完成這一點需要通訊子系統的配合,所以必須確保相對智慧。
3. Delete Aggregation
在Delete Aggregation中,資料和/或請求在允許的情況下將會被刪除。比如,做以下兩個操作:
- Create
- Delete
在這個聚合中,許多create和delete操作將會被刪除,大量的資源將被釋放。
4. Batch Aggregation
定時分析的批處理將會把大量的資料整合在一起,從而大幅度的提高效能。逐個的進行操作永遠比批量的處理來的慢。理念上應用程式不需要手動的做批處理業務,比如:框架會幫助你完成這個聚合。
5. Change Aggregation
在Change Aggregation中,所有的改變都將會被聚合到一處。當然這與Merge Aggregation不同,在Change Aggregation中我們注意到的是物件/資料改變的狀態,而不是它被改變了多少次;取代為每次改變做記錄,我們將把它的值傳送給一個客戶端,然後告訴它事情已經改變了。因為在大型系統中,我們不可能為事物的每次改變做記錄。
6. Integration Aggregation
在Integration Aggregation中,事件只有在它存在過一個週期被關閉後才會被建立。
最常見的例子。一個警報只有在聚合週期結束後才被設定。當硬體發生問題等其它情況,我們可以建立一個alarm storm。
7. 解除安裝
解除安裝同樣是個擴充套件方案,在這裡工作將會被拒絕直到有足夠的資源去執行它。
舉個例子,在一個呼叫處理系統(call processing system)中,呼叫的數量將會被限制。任何在限制之後的出現的呼叫都會被拒絕,這將會給現有的呼叫足夠的處理時間。
一些其它的解除安裝例子:
- 限制單節點FTP上的Session數量
- 在忙碌時將改伺服器上的請求轉發到另一個伺服器
- 公共電話系統在提示所有的呼叫正忙去阻止新呼叫的接入
寫在最後
當然一篇文章不可能包括負載加重後出現的所有問題,也不可能包括所有的應對方案。但是可以肯定是對自己系統做足夠的認知,基於充足的資訊做好設計決策,才能減少系統在擴充套件後所帶來的問題。
英文來源:7 Life Saving Scalability Defenses Against Load Monster Attacks
相關文章
- JeecgBoot抵禦XSS攻擊實現方案boot
- Chrome關閉7大埠,抵禦NAT Slipstreaming 2.0 漏洞攻擊Chrome
- DDoS攻擊的危害是什麼?如何抵禦?
- 【知識分享】伺服器遭受攻擊的方式,如何抵禦攻擊?伺服器
- 透過nginx配置檔案抵禦攻擊Nginx
- Node.js的可伸縮性Node.js
- 如何成功抵禦DOS攻擊?教你4個方法!
- 什麼是中間人攻擊?如何抵禦中間人攻擊?
- 【知識分享】 伺服器抵禦ddos攻擊的方法伺服器
- 大促活動如何抵禦大流量 DDoS 攻擊?
- AutoScaling彈性伸縮附加與分離負載均衡例項負載
- 抵禦惡意http攻擊,使用redis製作一個簡單的防禦HTTPRedis
- windows NLB+ARR實現Web負載均衡高可用/可伸縮的方法WindowsWeb負載
- 三家機構聯合開發可抵禦量子計算攻擊的區塊鏈區塊鏈
- 密碼學系列之:碰撞抵禦和碰撞攻擊collision attack密碼學
- 如何抵禦社工庫類的駭客攻擊?在明文密碼已洩露的情況下保護自己?密碼
- 抵禦網路攻擊的背後——成熟創新的技術是關鍵
- 大型網站的可伸縮性架構如何設計?網站架構
- DDoS攻擊、CC攻擊的攻擊方式和防禦方法
- Chrome釋出重要安全更新,將抵禦量子計算機發起的黑客攻擊Chrome計算機黑客
- 如何緩解BOT攻擊?分享靈活準確的防禦之道
- 抵禦勒索攻擊,戴爾科技構築三位一體的終極防線
- 讀資料保護:工作負載的可恢復性02收集需求負載
- XXE攻擊攻擊原理是什麼?如何防禦XXE攻擊?
- 如何有效防禦DDoS攻擊和CC攻擊?
- 可伸縮聚類演算法綜述(可伸縮聚類演算法開篇)聚類演算法
- CSRF 攻擊與防禦
- WEB攻擊與防禦Web
- CSRF攻擊與防禦
- 小鳥雲伺服器 新增香港高防雲伺服器,抵禦DDoS攻擊伺服器
- CC攻擊的原理是什麼?如何防禦CC攻擊?
- DDoS攻擊的危害是什麼?如何防禦DDoS攻擊?
- 讀資料保護:工作負載的可恢復性10恢復方式負載
- 什麼是SSRF攻擊?如何防禦SSRF攻擊?
- 什麼是CSRF攻擊?如何防禦CSRF攻擊?
- 彈性佈局(伸縮佈局)
- Knative Autoscaler 自定義彈性伸縮
- 什麼是CC攻擊?CC攻擊的防禦方式有哪些?
- WMI攻擊與安全防禦