如何設計高并發(fā),高性能,高可用,高安全的架構?

高并發(fā)

是一個容量的概念,服務可以接受的最大任務數(shù)量。根據(jù)二八定律(80/20定律)架構需要滿足那部分20%的突發(fā)流量

  • 超時,重試,熔斷,限流,雙發(fā),負載均衡,自動彈性伸縮
  • 空間換時間(多級緩存架構-需考慮每層的命中率)
  • 時間換空間 壓縮(解決帶寬問題)
  • 異步
  • 服務拆分+業(yè)務隔離
  • 并行化

高性能

是一個速度的概念,單位時間內(nèi)可以處理的任務數(shù)量

衡量的指標

響應時間RT(Response Time)

就是用戶發(fā)出請求到收到響應數(shù)據(jù)的時間

  • 平均響應時間
我們最常用的指標,即平均響應時間(AVG),該指標能夠體現(xiàn)服務接口的平均處理能力。
它的本質(zhì)是把所有的請求耗時加起來,然后除以請求的次數(shù)。舉個最簡單的例子,
有10 個請求,其中有 2個1ms、3個5ms、5個10ms,那么它的平均耗時就是(2*1+3*5+5*10)/10=6.7ms。
除非服務在一段時間內(nèi)出現(xiàn)了嚴重的問題,否則平均響應時間都會比較平緩。
因為高并發(fā)應用請求量都特別大,所以長尾請求的影響會被很快平均,
導致很多用戶的請求變慢,但這不能體現(xiàn)在平均耗時指標中。
為了解決這個問題,另外一個比較常用的指標,就是百分位數(shù)(Percentile)。
  • 百分位數(shù)
超過N%的請求都在X時間內(nèi)返回。比如TP90=50ms,意思是超過90th的請求,都在50ms
內(nèi)返回。我們一般分為 TP50、TP90、TP95、TP99、TP99.9等多個段,
對高百分位的值要求越高,對系統(tǒng)響應能力的穩(wěn)定性要求越高,目標就是要干掉嚴重影響系統(tǒng)的長尾請求

并發(fā)數(shù)量

就是系統(tǒng)同時能處理多少用戶請求;針對響應時間進行設計,一般來說是萬能的。因為響應時間減少,同一時間能夠處理的請求必然會增加。值得注意的是,即使是一個秒殺系統(tǒng),經(jīng)過層層過濾處理,最終到達某個節(jié)點的并發(fā)數(shù),也會比較小

吞吐量

就是單位時間內(nèi)系統(tǒng)處理的請求數(shù)量

秒開率

通常而言,可以根據(jù)業(yè)務情況設定不同的頁面打開標準,比如低于1 秒內(nèi)的數(shù)據(jù)占比是秒開率。

  • 名詞解釋
QPS(Queries Per Second)每秒查詢的數(shù)量
TPS(Transactions Per Second 每秒事務的數(shù)量)
HPS(Http Per Second每秒的HTTP請求數(shù)量)

QPS=并發(fā)數(shù)/RT
并發(fā)數(shù)=QPS*RT

A服務同時調(diào)用B服務+C服務,QPS=2,TPS=1
單個接口請求,單機,QPS = TPS。
Throughput = (number of requests) / (total time) 
total time = 測試結束時間 - 測試開始時間 
測試結束時間 = MAX(請求開始時間 + Elapsed Time) 
測試開始時間 = MIN(請求開始時間) 

一般情況下,我們認為:
響應速度是串行執(zhí)行的優(yōu)化,通過優(yōu)化執(zhí)行步驟解決問題;
吞吐量是并行執(zhí)行的優(yōu)化,通過合理利用計算資源達到目標。
我們平常的優(yōu)化主要側重于響應速度,因為一旦響應速度提升了,那么整個吞吐量自然也會跟著提升。
但對于高并發(fā)的互聯(lián)網(wǎng)應用來說,響應速度和吞吐量兩者都需要。
這些應用都會標榜為高吞吐、高并發(fā)的場景,用戶對系統(tǒng)的延遲忍耐度很差,
我們需要使用有限的硬件資源,從中找到一個平衡點。

高可用

衡量手段

7x24 小時無中斷無異常的服務提供

描述 N個9 可用性級別 年度停機時間
基本可用 2個9 99% 87.6小時
較高可用 3個9 99.9% 8.8小時
具備自動恢復能力可用 4個9 99.99% 53分鐘
極高可用 5個9 99.999% 5分鐘

優(yōu)化手段

冗余(機器(混合云),服務(無狀態(tài))),解決單點問題,解決腦裂問題。
故障切換。冷,熱備份
限流,降級,熔斷,彈性設計 
柔性化,兜底(獲取通用商品不用個性化推薦,如果也沒有可以讀取一些靜態(tài)文字進行展示,包容下一層的錯誤)
隔離(秒殺單獨服務器)
應急預案,演練
自動化監(jiān)控,告警(業(yè)務監(jiān)控,硬件監(jiān)控,服務監(jiān)控(sql,調(diào)用次數(shù),延遲,錯誤率),各個端監(jiān)控,埋點監(jiān)控)
同城多活(盡量同城,服務器延遲小),異地多活,兩地三中心

高安全

前端代碼安全:

代碼混淆,加入無關聯(lián)代碼,反調(diào)試

后端代碼,服務器安全:

服務器等級保護,風控,黑白名單,反爬蟲,waf防火墻(Ddos),加密,
https HTTP2 http3
防刷、限量和防重,驗證碼,sql安全,社會工程學安全,地址隱藏

其它:

辦公室電腦人員,電腦,郵件,聊天工具消息往來安全,開發(fā)工具,中間件,弱口令

常用優(yōu)化手段及思想

盡早返回原則
第一段在用戶和瀏覽器端,主要負責發(fā)出請求,及接受響應數(shù)據(jù)進行計算渲染顯示給用戶;
第二段在網(wǎng)絡上,負責對請求數(shù)據(jù)、響應數(shù)據(jù)的傳輸;
第三段在網(wǎng)站服務器端,負責對請求數(shù)據(jù)進行處理(執(zhí)行程序、訪問數(shù)據(jù)庫、文件等)并將結果返回

第一路徑:
js,css壓縮合并(varinish),去除無用注釋(基于安全考慮)
圖片:有損格式用JPEG,無損格式用Webp格式
流媒體,靜態(tài)資源走CDN,圖片走適合大小
瀏覽器緩存,app緩存

第二路徑:
帶寬(即根據(jù)一次響應數(shù)據(jù)的大小,乘以PV數(shù),除以對應的高峰時間段,從而大致估算出網(wǎng)站帶寬的需求)
互聯(lián)互通

第三路徑:
代碼最佳實踐優(yōu)化
業(yè)務流程最佳
異步,MQ
并行化,分而治之,無鎖化編程,協(xié)程
文件靜態(tài)化
應用層緩存,分布式緩存(多級緩存)
數(shù)據(jù)庫優(yōu)化(換商業(yè)數(shù)據(jù)庫,分庫分表,冷熱數(shù)據(jù)分離,讀寫分離,NoSql-海量數(shù)據(jù),NewSql,Hbase)
硬件升級(CPU、內(nèi)存、帶寬,SD磁盤陣列,服務器數(shù)量,機房,硬件負載)
高性能nginx,http2,http3,gzip/br以及參數(shù)優(yōu)化

總結10年開發(fā)管理歷程心得:

面向失敗設計,架構師要把自己當成一個悲觀主義者,
需要在一開始的系統(tǒng)設計階段就考慮各種失敗以及被外部攻擊場景,
把面向失敗當成系統(tǒng)設計的一部分,隨時有Plan A,Plan B。

世界上解決一個計算機問題最簡單的方法:“恰好”不需要解決它。
可以通過優(yōu)化業(yè)務流程,合理的設計來規(guī)避問題。

冗余思維(大部分問題都可以通過加一個中間層解決)
分治思維(將一個大任務拆分成很多個小的任務來解決)
空間時間互換思維
并發(fā)思維
設計模式思維
池化思維
悲觀主義思維

參考:

https://blog.csdn.net/z69183787/article/details/105554908
https://www.cnblogs.com/kumufengchun/p/11065413.html
https://blog.csdn.net/qq_37651267/article/details/93368908
https://juejin.cn/post/6844903701195276295

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容