日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

互联网性能与容量评估的方法论和典型案例

發布時間:2025/4/5 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 互联网性能与容量评估的方法论和典型案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.jianshu.com/p/fbf56ccb4ebe

1 背景

本文歡迎轉載,轉載請注明原文鏈接,并附作者個人信息李艷鵬。

性能至上

武林中,“天下武功出少林”指中國各門各派的武功都與少林武學有一定的淵源,技術也是相同的道理,所有的技術最終體現在計算機知識的基本功上,這些基本功是技術的易筋經,是“內功”,一些年輕的攻城獅更熱衷于追崇高大上的框架,過去在炒SSH,現在在炒Spring Cloud,這些對框架掌握的程度體現在“劍術”上,我推薦每個技術研發人員在修煉好內功的基礎上,再去練“劍術”。回頭看IT行業的發展,先有傳統行業,再有互聯網,傳統行業和互聯網是少林與武當的關系,他們的技術相輔相成,并不一定是互聯網的技術要比傳統行業的技術高深很多,而是它們有自己的側重點,傳統行業更偏向于企業級開發,項目具有業務復雜、流程豐富、中心化管理、企業級抽象度高、業務重用率高的特點,而互聯網傾向于把復雜的業務進行拆分成單一的職責,對于單一職責模塊的非功能質量進行大幅度的優化,這包括高可用性、高性能、可伸縮、可擴展、安全性、穩定性、可維護性、健壯性等。

這篇文章提供一個基本的面向互聯網技術評審的方法論,它主要論述在互聯網的行業里,如何在完成產品功能的前提下,更好的滿足非功能質量的需求,是每個互聯網程序設計人員和架構設計人員都應該掌握的一項基本技能。

本文的目的是為了初入互聯網或者有意愿踏入互聯網的研發人員起到拋磚引玉的效果,如果想全面了解互聯網非功能質量設計的方方面面,可以參考美國互聯網方法論Architecture Tradeoff Analysis Method,相關的書籍可以從這里下載ATAM: Method for Architecture Evaluation。

2 目標

2.1 非功能質量需求的概述

通過參考技術評審指標,保證系統架構設計滿足用戶和系統對非功能質量的需求:

核心非功能質量:

核心質量描述
高性能運行效率高,性價比高
可用性持續可用性,縮短宕機時間,出錯恢復,可靠性
可伸縮垂直伸縮,水平伸縮
可擴展可插拔,組件重用
安全性數據安全,加密,熔斷,防攻擊

其他非功能質量:

其他質量描述
可監控性快速發現,快速定位,快速解決
可測試性可灰度,可預覽,可Mock,可拆解
魯棒性容錯性,可恢復性
可維護性易于維護,監控,運營,擴展
可重用性可移植性,解耦
易用性可操作性

2.2 非功能質量需求的具體指標

主要分為4部分:應用服務器、數據庫、緩存和消息隊列。

2.2.1 應用服務器

應用服務器是服務的入口,請求流量從這里進入系統,數據庫,緩存和消息隊列的訪問量取決于應用服務器的訪問量,對應用服務器的訪問量進行評估至關重要,應用服務器主要關心每秒請求的峰值,請求響應時間等指標,通過這些指標可以評估需要的應用服務器資源的數量。

全面考慮下列指標:

指標分類部署結構容量和性能其他
1負載均衡策略每天請求量請求的內容是否包含大對象
2高可用策略各接口訪問峰值GC收集器的選型和配置
3IO模型(NIO/BIO)平均請求相應時間?
4線程池模型最大請求相應時間?
5線程池線程數量在線用戶量?
6是否多業務混布請求大小?
7?網卡IO流量?
8?磁盤IO負載?
9?內存使用情況?
10?CPU使用情況?

2.2.2 數據庫

根據應用層的訪問量和訪問峰值,計算出需要的數據庫資源的QPS,TPS,每天的數據總量等,由此來評估所需數據庫資源的數量和配置,部署結構等。

全面考慮下列指標:

指標分類部署結構容量和性能其他
1復制模型當前數據容量查詢是否走索引
2失效轉移策略每天數據增量(預估容量)有沒有大數據量的查詢
3容災策略每秒讀峰值有沒有多表關聯,關聯是否用到索引
4歸檔策略每秒寫峰值有沒有使用悲觀鎖,是否可以改造成樂觀鎖,或者是否可以利用數據庫內置行級鎖
5讀寫分離策略事務量事務和一致性級別
6分庫分表(分片)策略?使用的JDBC數據源類型,連接數等配置
7靜態數據和半靜態數據是否使用緩存?是否開啟JDBC診斷日志
8有沒有考慮緩存穿透壓垮數據庫的情況?有沒有存儲過程
9緩存失效和緩存數據預熱策略?伸縮策略(分區表,自然時間分表,水平分庫分表)
10緩存失效和緩存數據預熱策略?水平分庫分表實現方法(客戶端,代理,Nosql)

2.2.3 緩存

根據應用層的訪問量和訪問峰值,通過評估熱數據占比,計算出的緩存資源的大小,存取緩存資源的峰值,由此來計算所需緩存資源的數量和配置,部署結構等。

全面考慮下列指標:

序號/指標分類部署結構容量與性能其他
1復制模型緩存內容的大小冷熱數據比例
2失效轉移緩存內容的數量是否有可能緩存穿透
3持久策略緩存內容的過期時間是否有大對象
4淘汰策略緩存的數據結構是否使用緩存實現分布式鎖
5線程模型每秒讀峰值是否使用緩存支持的腳本
6預熱方法每秒寫峰值是否避免了Race Condition
7分片Hash策略?緩存分片方法(客戶端,代理,集群)

2.2.4 消息隊列

根據應用層的訪問量和訪問峰值,計算需要消息隊列傳遞的數據內容和數據量,計算出的消息隊列資源的數量和配置,部署結構等。

全面考慮下列指標:

指標分類部署結構容量與性能其他
1復制模型每天平均數據增量消費線程池模型
2失效轉移消息持久的過期時間分片策略
3持久策略每秒讀峰值消息的可靠投遞
4?每秒寫峰值?
5?每條消息的大小?
6?平均延遲?
7?最大延遲?

3 技術評審提綱

業務項目千差萬別,沒有一個統一的方法論完成架構設計和技術評審,架構設計只需要從某些關鍵點來表達系統即可,提綱就是用來幫助大家做架構評審的工具,幫助大家整理思路并形成可實施的方案,因此在做系統設計時,可有選擇性的參考此提綱,根據業務特點來完成一個可實現的有效的架構設計。

3.1 現狀

業務背景

  • 項目名稱
  • 業務描述

技術背景

  • 架構描述
  • 當前系統容量(系統調用量平均值)
  • 當前系統調用量峰值

3.2 需求

業務需求

  • 要改造的內容
  • 要實現的新需求

性能需求

  • 預估系統容量(預估系統調用量平均值)
  • 預估系統調用量峰值
  • 其他非功能質量,例如:安全性、可伸縮等

3.3 方案描述

方案1

整個方案需要參考技術評審指標提出的各方面指標來考慮滿足系統的非功能質量需求。

  • 概述

    一句話概括方案的亮點,比如說: 雙寫,主從分離,分庫分表,擴容,歸檔等。

  • 詳細說明

    方案的具體描述,文字描述不清楚的話可以結合圖(任何圖:UML,概念圖,框圖等)的方式說明,如果是改造方案最好突出變動的地方,以下列舉了幾種描述的角度:

    • 中間件架構(應用服務器、數據庫、緩存、消息隊列等)
    • 邏輯架構(模塊劃分、模塊通信、信息流、時序等)
    • 數據架構(數據結構、數據分布、拆分策略、緩存策略、讀寫分離策略、查詢策略、數據一致性策略)
    • 異常處理,容災策略,灰度發布
  • 性能評估

    給出方案的基準數據,并按性能需求評估需要使用的資源數量。

    • 單機并發量
    • 單機容量
    • 按照預估性能需求,預估資源數量(應用服務器、緩存、存儲、隊列等)
    • 伸縮方式
  • 方案優缺點

    列出方案的優缺點,優缺點要具有確定性,不要有“存在一定風險”這種描述,也就是要量化。

方案2

整個方案需要參考技術評審指標提出的各方面指標來考慮滿足系統的非功能質量需求。

......

3.4 方案對比

對比可選方案,并給出選擇這種方案的理由,選擇傾向的方案,

3.5 風險評估

標識所選方案的風險,提出解決此風險發生時候的應對策略,比如:上線失敗時的回滾策略。

3.6 工作量評估

描述使用所選方案需要做的具體工作,并評估開發、測試等細化任務需要的時間,形成可實施的任務計劃表,任務計劃表推薦采用簡單的表格形式,減少工具使用和學習的成本。

4 性能和容量評估經典案例

4.1 背景

物流系統包含如下兩個質量優先需求:

  • 維護會員常用地址,下單時提供會員地址列表。
  • 下單時異步產生物流訂單,物流系統后臺任務從第三方物流輪循拉取物流狀態,已經下單用戶查詢訂單的物流訂單和物流記錄。
  • 由于會員數量較大,可能有較快的增長速度,訂單數量更是巨大,促銷期峰值的訂單產生量可能很高,這兩個業務模塊的數據存儲需要分庫分表,并借助消息隊列和緩存抗寫和讀的流量,因此,本方案主要涉及這兩個業務的容量評估。

    4.2 目標數據量級

    選取行業內一線電商平臺的量級作為目標:

  • 會員量2億,平均增長5萬/天。
  • 平時訂單量400萬/天,所有訂單下單時段集中在9:00-23:00,促銷日訂單量1400萬/天,50%訂單下單時段集中在晚上7:30-8:30和晚上22:00-23:00。
  • 4.3 量級評估標準

    通用標準

  • 容量按照峰值5倍冗余計算。
  • 會員常用地址容量按照30年計算,而物流訂單時效性較強按照3年計算。
  • 第三方查詢接口5000 QPS。
  • Mysql

  • 單端口讀:1000 QPS
  • 單端口寫:700 TPS
  • 單表容量:5000萬條
  • Redis

  • 單端口讀:4萬 QPS
  • 單端口寫:4萬 TPS
  • 單端口內存容量:32G
  • Kafka

  • 單機讀:3萬 QPS
  • 單機寫:5000 TPS
  • 應用服務器

  • 請求量每秒峰值:5000 QPS
  • 4.4 方案

    方案1. 最大性能方案

    由于整個電商網站剛剛上線,數據量級還無法清晰的確定,我們根據行業內知名電商當前數據量級設計最大性能方案,本方案可以應對行業內電商巨頭的各種促銷所帶來的服務請求峰值,并且擁有最快的響應時間,達到服務性能的最大化。

    需求1. 會員常用地址

    整體流程:

  • 提供Restful服務增加會員常用地址。
  • 提供Restful服務獲取會員常用地址列表。
  • 數據庫資源評估:

    讀QPS:

    會員每次下單,拉取一次會員地址列表,按照促銷日訂單量1400萬/天,50%訂單下單時段集中在兩個小時內計算:

    (1400萬 × 0.5) / (2 × 60 × 60) = 1000/秒

    容量評估按照5倍冗余計算,讀QPS峰值1000/秒 * 5 = 5000/秒,需要5端口數據庫服務讀。

    寫TPS:

    假設每天增加的會員全部添加一次常用地址,并且高峰期會員下訂單時有20%的會員會增加一條常用地址:

    (1400萬 × 0.2 + 5萬) / (2 × 60 × 60) = 400/秒

    容量評估按照5倍冗余計算,400/秒 * 5 = 2000/秒,需要3端口數據庫服務寫。

    數據容量:

    當前有2億會員,每天增長5萬會員,平均每個會員有5個常用地址,30年會員常用地址表數量計算:

    (2億 + 5萬 × 365 × 30年) × 5 = 35億

    容量評估按照5倍冗余計算,35億 * 5 = 175億,需要350張表即可容納。

    根據以上讀QPS、寫TPS的評估,如果讀寫混布我們共需要8端口,可以使用8主8備,如果讀寫分離,我們需要做主從部署,需要3主6從,與2倍數對齊,使用4主8從即可。

    根據表容量,需要350張表,和2的指數對齊,選擇512張表,上面計算需要主庫端口為4,考慮到將來端口擴展不用拆分數據庫,盡量設計更多的庫,使用32個庫。

    設計結果:4端口 × 32庫 × 4表, 4主8從

    緩存資源評估:

    為了提高用戶下單的體驗,需要使用Redis緩存活躍用戶的常用地址。

    定義當天下訂單的會員為活躍會員,活躍會員的地址緩存24小時,假定每天下訂單的會員均為不同會員,每個會員有5個常用地址,緩存大小計算如下:

    1400萬 × 5 × 1k = 70G

    容量評估按照5倍冗余計算,70G×5=350G,按照每臺Redis 32G內存計算,需要11臺機器,根據數據庫對數據存取QPS/TPS的設計,11臺機器完全可以滿足5000/秒的讀QPS和2000/秒的寫TPS。

    設計結果:11臺,主從

    應用服務器資源評估:

    根據數據庫的讀QPS(5000/s)峰值和寫TPS(2000/s)峰值計算,單臺應用服務器即可,選擇2臺避免單點。

    設計結果:2臺

    需求2. 物流訂單和物流記錄

    整體流程:

  • 訂單提交后,通過消息隊列產生物流訂單,消息傳入物流系統,物流系統消費物流訂單消息然后入庫。
  • 后臺任務輪循未完成物流訂單,查詢第三方物流接口狀態,填寫物流記錄信息。按照每天1400萬的訂單,訂單平均3天到貨,第三方查詢接口5000 QPS,每次狀態查詢需要時間計算如下: 1400萬 × 3 / 5000 = 8400 / 60 / 60 = 2小時,定時任務2小時查一次。
  • 提供REST服務獲取物流訂單信息。
  • 提供REST服務獲取物流記錄信息。
  • 提供REST服務獲取物流訂單和物流記錄信息。
  • 數據庫資源評估:

    讀QPS:

    會員下單三天到貨,三天內50%客戶會查詢一次物流訂單和一次物流記錄,計算如下:

    (1400萬 × 3 × 0.5) / (24 × 60 × 60) = 250/秒

    容量評估按照5倍冗余計算,2 × 250/秒 × 5倍 = 2500/秒,需要3端口數據庫服務讀。

    寫TPS:

    會員每次下單,產生一次物流訂單,按照促銷日訂單量1400萬/天,50%訂單下單時段集中在兩個小時內計算:

    (1400萬 × 0.5) / (2 × 60 × 60) = 1000/秒

    按照每天1400萬的訂單,訂單平均3天到貨,每條物流訂單產生8條物流記錄,并且8條物流記錄在三天內均勻產生,物流記錄寫TPS計算如下:

    1400萬 × 3 × 8 / 3 / (24 × 60 × 60) = 1200/秒

    容量評估按照5倍冗余計算,(1000/秒 + 1200/秒) * 5 = 11000/秒,需要15端口數據庫服務寫。

    數據容量:

    當前2億物流訂單積累,每天增長400萬訂單,30年訂單數量計算:

    2億 + 400萬 × 365天 × 3年 = 46億

    容量評估按照5倍冗余計算,46億 * 5 = 230億,需要460張表即可容納, 物流記錄表是物流訂單的8倍,460 × 8 = 3680張表。

    根據以上讀QPS和寫TPS,如果讀寫混布,我們共需要18端口,18主18備,如果讀寫分離,我們需要16主16從。

    根據表容量,需要3680張表,和2的指數對齊,選擇4096張表,上面計算需要主庫端口為16,考慮到將來端口擴展不用拆分數據庫,盡量設計更多的庫,使用32個庫。

    設計結果:16端口 × 32庫 × 8表,16主16從

    消息隊列資源評估:

    為了讓系統能夠應對峰值的突增,采用消息隊列Kafka接收物流訂單。

    根據上面對寫TPS的計算,考慮5倍冗余后,峰值為5000/秒,單臺Kafka和單臺處理機即可處理。

    如果峰值有突增,可以增加Kafaka集群的節點來抗寫流量,處理機根據后端入庫性能來決定。例如寫峰值增加10倍,達到5萬/秒,需要10臺Kafka,每臺Kafka讀QPS可達3萬,理論上需要2臺處理機,然而,處理機的瓶頸是后端入庫的寫TPS,根據上面計算,入庫的寫TPS峰值按照5000/秒設計,因此,單臺處理機即可,這個場景下會有消息的堆積,但是最終會處理完畢,達到消峰的效果。

    設計結果:1臺Kafka,主從,1臺處理機

    應用服務器資源評估:

    根據數據庫的讀QPS(2500/s)峰值和寫TPS(11000/s)峰值計算,3臺應用服務器即可。

    用于查詢第三方接口的后臺任務服務器,由于受到第三方接口5000/s的QPS的限制,單臺機器即可,為了避免單點,2臺處理機即可。

    設計結果:2臺

    方案2. 最小資源方案

    由于當前系統線上數據量并不多,增長量也不大,讀QPS和寫TPS單臺機器完全可以處理,暫時不考慮使用緩存和消息隊列,但是保留使用緩存和消息隊列的接口,如果緩存和消息隊列的資源可用,可以通過開關進行切換。

    當前的數據量使用單庫單表即可處理,然而,考慮到將來擴容方便,數據庫端口暫時使用一個,但是保留我們在最大性能方案中對數據庫的分庫分表,當讀QPS和寫TPS突增時,DBA可以把庫重新拆分到多個端口來抗請求流量。

    因此,方案如下:

    會員常用地址

    設計結果:1端口 × 32庫 × 16表, 1主1從

    物流訂單和物流記錄

    設計結果:1端口 × 128庫 × 32表,1主1從

    4.5 總結

    傾向于采用最小資源方案:

  • 當前線上流量并不大,使用最小資源方案節省成本。
  • 最小資源方案充分的考慮了數據庫的分庫分表,當讀QPS和寫TPS突增時,DBA可以拆分庫到不同的端口,也就是增加端口來應對。
  • 最小資源方案在應用層設計了開關,如果性能突增可以臨時申請和開啟緩存和消息隊列。
  • 5 性能評估參考標準

    以下標準是使用PC X86機器的經驗值,僅供參考,評審時應該隨著機器的不同而做調整。

    通用標準

  • 容量按照峰值5倍冗余計算。
  • 分庫分表后的容量一般可存儲30年的數據。
  • 第三方查詢接口5000 QPS。
  • 單條數據庫記錄占用大約1K空間。
  • Mysql

  • 單端口讀:1000 QPS
  • 單端口寫:700 TPS
  • 單表容量:5000萬條
  • Redis

  • 單端口讀:4萬 QPS
  • 單端口寫:4萬 TPS
  • 單端口內存容量:32G
  • Kafka

  • 單機讀:3萬 QPS
  • 單機寫:5000 TPS
  • DB2

  • 單機讀峰值:20000
  • 單機寫峰值:20000
  • 單表容量:1億數據
  • 6 總結

    本文以互聯網企業重點關注的非功能質量為主線,總結了非功能質量需求的總體目標,并針對不同的服務和資源列舉了不同的非功能質量需求,幫助讀者在做技術評審的過程整理思路,盡量窮舉評審時關注的評審點,并隨后提供了一個簡單有效的評審提綱,最后根據提綱實現一個互聯網容量和性能評估的經典案例,大家可以在案例中了解高并發互聯網系統是如何進行拆分的,以及依據哪些數據進行拆分。

    由于本文的數據完全是基于筆者在某個互聯網平臺下的經驗而記錄的,并不代表可以直接應用在任何企業和平臺上,這里重點突出進行容量和性能評估的方法論,幫助大家整理實現高并發互聯網系統的思路。

    根據本文的容量評估,我們需要分布式的中間件支持對數據庫、緩存和消息隊列的水平伸縮和分片,想了解分布式中間件的原理,請參考開源項目。



    作者:李艷鵬
    鏈接:https://www.jianshu.com/p/fbf56ccb4ebe
    來源:簡書
    簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

    轉載于:https://www.cnblogs.com/davidwang456/articles/9229580.html

    總結

    以上是生活随笔為你收集整理的互联网性能与容量评估的方法论和典型案例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。