chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文詳談高并發(fā)

如意 ? 來源:百家號 ? 作者:CSDN ? 2020-06-30 17:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

高并發(fā),幾乎是每個程序員都想擁有的經驗。原因很簡單:隨著流量變大,會遇到各種各樣的技術問題,比如接口響應超時、CPU load升高、GC頻繁、死鎖、大數據量存儲等等,這些問題能推動我們在技術深度上不斷精進。

在過往的面試中,如果候選人做過高并發(fā)的項目,我通常會讓對方談談對于高并發(fā)的理解,但是能系統(tǒng)性地回答好此問題的人并不多,大概分成這樣幾類:

1、對數據化的指標沒有概念:不清楚選擇什么樣的指標來衡量高并發(fā)系統(tǒng)?分不清并發(fā)量和QPS,甚至不知道自己系統(tǒng)的總用戶量、活躍用戶量,平峰和高峰時的QPS和TPS等關鍵數據。

2、設計了一些方案,但是細節(jié)掌握不透徹:講不出該方案要關注的技術點和可能帶來的副作用。比如讀性能有瓶頸會引入緩存,但是忽視了緩存命中率、熱點key、數據一致性等問題。

3、理解片面,把高并發(fā)設計等同于性能優(yōu)化:大談并發(fā)編程、多級緩存、異步化、水平擴容,卻忽視高可用設計、服務治理和運維保障。

4、掌握大方案,卻忽視最基本的東西:能講清楚垂直分層、水平分區(qū)、緩存等大思路,卻沒意識去分析數據結構是否合理,算法是否高效,沒想過從最根本的IO和計算兩個維度去做細節(jié)優(yōu)化。

這篇文章,我想結合自己的高并發(fā)項目經驗,系統(tǒng)性地總結下高并發(fā)需要掌握的知識和實踐思路,希望對你有所幫助。內容分成以下3個部分:

如何理解高并發(fā)?

高并發(fā)系統(tǒng)設計的目標是什么?

高并發(fā)的實踐方案有哪些?

如何理解高并發(fā)?

高并發(fā)意味著大流量,需要運用技術手段抵抗流量的沖擊,這些手段好比操作流量,能讓流量更平穩(wěn)地被系統(tǒng)所處理,帶給用戶更好的體驗。

我們常見的高并發(fā)場景有:淘寶的雙11、春運時的搶票、微博大V的熱點新聞等。除了這些典型事情,每秒幾十萬請求的秒殺系統(tǒng)、每天千萬級的訂單系統(tǒng)、每天億級日活的信息流系統(tǒng)等,都可以歸為高并發(fā)。

很顯然,上面談到的高并發(fā)場景,并發(fā)量各不相同,那到底多大并發(fā)才算高并發(fā)呢?

1、不能只看數字,要看具體的業(yè)務場景。不能說10W QPS的秒殺是高并發(fā),而1W QPS的信息流就不是高并發(fā)。信息流場景涉及復雜的推薦模型和各種人工策略,它的業(yè)務邏輯可能比秒殺場景復雜10倍不止。因此,不在同一個維度,沒有任何比較意義。

2、業(yè)務都是從0到1做起來的,并發(fā)量和QPS只是參考指標,最重要的是:在業(yè)務量逐漸變成原來的10倍、100倍的過程中,你是否用到了高并發(fā)的處理方法去演進你的系統(tǒng),從架構設計、編碼實現、甚至產品方案等維度去預防和解決高并發(fā)引起的問題?而不是一味的升級硬件、加機器做水平擴展。

此外,各個高并發(fā)場景的業(yè)務特點完全不同:有讀多寫少的信息流場景、有讀多寫多的交易場景,那是否有通用的技術方案解決不同場景的高并發(fā)問題呢?

我覺得大的思路可以借鑒,別人的方案也可以參考,但是真正落地過程中,細節(jié)上還會有無數的坑。另外,由于軟硬件環(huán)境、技術棧、以及產品邏輯都沒法做到完全一致,這些都會導致同樣的業(yè)務場景,就算用相同的技術方案也會面臨不同的問題,這些坑還得一個個趟。

因此,這篇文章我會將重點放在基礎知識、通用思路、和我曾經實踐過的有效經驗上,希望讓你對高并發(fā)有更深的理解。

高并發(fā)系統(tǒng)設計的目標是什么?

先搞清楚高并發(fā)系統(tǒng)設計的目標,在此基礎上再討論設計方案和實踐經驗才有意義和針對性。

2.1 宏觀目標

高并發(fā)絕不意味著只追求高性能,這是很多人片面的理解。從宏觀角度看,高并發(fā)系統(tǒng)設計的目標有三個:高性能、高可用,以及高可擴展。

1、高性能:性能體現了系統(tǒng)的并行處理能力,在有限的硬件投入下,提高性能意味著節(jié)省成本。同時,性能也反映了用戶體驗,響應時間分別是100毫秒和1秒,給用戶的感受是完全不同的。

2、高可用:表示系統(tǒng)可以正常服務的時間。一個全年不停機、無故障;另一個隔三差五出線上事故、宕機,用戶肯定選擇前者。另外,如果系統(tǒng)只能做到90%可用,也會大大拖累業(yè)務。

3、高擴展:表示系統(tǒng)的擴展能力,流量高峰時能否在短時間內完成擴容,更平穩(wěn)地承接峰值流量,比如雙11活動、明星離婚等熱點事件。

這3個目標是需要通盤考慮的,因為它們互相關聯、甚至也會相互影響。

比如說:考慮系統(tǒng)的擴展能力,你會將服務設計成無狀態(tài)的,這種集群設計保證了高擴展性,其實也間接提升了系統(tǒng)的性能和可用性。

再比如說:為了保證可用性,通常會對服務接口進行超時設置,以防大量線程阻塞在慢請求上造成系統(tǒng)雪崩,那超時時間設置成多少合理呢?一般,我們會參考依賴服務的性能表現進行設置。

2.2 微觀目標

再從微觀角度來看,高性能、高可用和高擴展又有哪些具體的指標來衡量?為什么會選擇這些指標呢?

性能指標

通過性能指標可以度量目前存在的性能問題,同時作為性能優(yōu)化的評估依據。一般來說,會采用一段時間內的接口響應時間作為指標。

1、平均響應時間:最常用,但是缺陷很明顯,對于慢請求不敏感。比如1萬次請求,其中9900次是1ms,100次是100ms,則平均響應時間為1.99ms,雖然平均耗時僅增加了0.99ms,但是1%請求的響應時間已經增加了100倍。

2、TP90、TP99等分位值:將響應時間按照從小到大排序,TP90表示排在第90分位的響應時間, 分位值越大,對慢請求越敏感。

3、吞吐量:和響應時間呈反比,比如響應時間是1ms,則吞吐量為每秒1000次。

通常,設定性能目標時會兼顧吞吐量和響應時間,比如這樣表述:在每秒1萬次請求下,AVG控制在50ms以下,TP99控制在100ms以下。對于高并發(fā)系統(tǒng),AVG和TP分位值必須同時要考慮。

另外,從用戶體驗角度來看,200毫秒被認為是第一個分界點,用戶感覺不到延遲,1秒是第二個分界點,用戶能感受到延遲,但是可以接受。

因此,對于一個健康的高并發(fā)系統(tǒng),TP99應該控制在200毫秒以內,TP999或者TP9999應該控制在1秒以內。

可用性指標

高可用性是指系統(tǒng)具有較高的無故障運行能力,可用性 = 平均故障時間 / 系統(tǒng)總運行時間,一般使用幾個9來描述系統(tǒng)的可用性。

對于高并發(fā)系統(tǒng)來說,最基本的要求是:保證3個9或者4個9。原因很簡單,如果你只能做到2個9,意味著有1%的故障時間,像一些大公司每年動輒千億以上的GMV或者收入,1%就是10億級別的業(yè)務影響。

可擴展性指標

面對突發(fā)流量,不可能臨時改造架構,最快的方式就是增加機器來線性提高系統(tǒng)的處理能力。

對于業(yè)務集群或者基礎組件來說,擴展性 = 性能提升比例 / 機器增加比例,理想的擴展能力是:資源增加幾倍,性能提升幾倍。通常來說,擴展能力要維持在70%以上。

但是從高并發(fā)系統(tǒng)的整體架構角度來看,擴展的目標不僅僅是把服務設計成無狀態(tài)就行了,因為當流量增加10倍,業(yè)務服務可以快速擴容10倍,但是數據庫可能就成為了新的瓶頸。

像MySQL這種有狀態(tài)的存儲服務通常是擴展的技術難點,如果架構上沒提前做好規(guī)劃(垂直和水平拆分),就會涉及到大量數據的遷移。

因此,高擴展性需要考慮:服務集群、數據庫、緩存和消息隊列等中間件、負載均衡、帶寬、依賴的第三方等,當并發(fā)達到某一個量級后,上述每個因素都可能成為擴展的瓶頸點。

高并發(fā)的實踐方案有哪些?

了解了高并發(fā)設計的3大目標后,再系統(tǒng)性總結下高并發(fā)的設計方案,會從以下兩部分展開:先總結下通用的設計方法,然后再圍繞高性能、高可用、高擴展分別給出具體的實踐方案。

3.1 通用的設計方法

通用的設計方法主要是從「縱向」和「橫向」兩個維度出發(fā),俗稱高并發(fā)處理的兩板斧:縱向擴展和橫向擴展。

縱向擴展(scale-up)

它的目標是提升單機的處理能力,方案又包括:

1、提升單機的硬件性能:通過增加內存、CPU核數、存儲容量、或者將磁盤升級成SSD等堆硬件的方式來提升。

2、提升單機的軟件性能:使用緩存減少IO次數,使用并發(fā)或者異步的方式增加吞吐量。

橫向擴展(scale-out)

因為單機性能總會存在極限,所以最終還需要引入橫向擴展,通過集群部署以進一步提高并發(fā)處理能力,又包括以下2個方向:

1、做好分層架構:這是橫向擴展的提前,因為高并發(fā)系統(tǒng)往往業(yè)務復雜,通過分層處理可以簡化復雜問題,更容易做到橫向擴展。

上面這種圖是互聯網最常見的分層架構,當然真實的高并發(fā)系統(tǒng)架構會在此基礎上進一步完善。比如會做動靜分離并引入CDN,反向代理層可以是LVS+Nginx,Web層可以是統(tǒng)一的API網關,業(yè)務服務層可進一步按垂直業(yè)務做微服務化,存儲層可以是各種異構數據庫。

2、各層進行水平擴展:無狀態(tài)水平擴容,有狀態(tài)做分片路由。業(yè)務集群通常能設計成無狀態(tài)的,而數據庫和緩存往往是有狀態(tài)的,因此需要設計分區(qū)鍵做好存儲分片,當然也可以通過主從同步、讀寫分離的方案提升讀性能。

3.2 具體的實踐方案

下面再結合我的個人經驗,針對高性能、高可用、高擴展3個方面,總結下可落地的實踐方案。

高性能的實踐方案

1、集群部署,通過負載均衡減輕單機壓力。

2、多級緩存,包括靜態(tài)數據使用CDN、本地緩存、分布式緩存等,以及對緩存場景中的熱點key、緩存穿透、緩存并發(fā)、數據一致性等問題的處理。

3、分庫分表和索引優(yōu)化,以及借助搜索引擎解決復雜查詢問題。

4、考慮NoSQL數據庫的使用,比如HBase、TiDB等,但是團隊必須熟悉這些組件,且有較強的運維能力。

5、異步化,將次要流程通過多線程、MQ、甚至延時任務進行異步處理。

6、限流,需要先考慮業(yè)務是否允許限流(比如秒殺場景是允許的),包括前端限流、Nginx接入層的限流、服務端的限流。

7、對流量進行削峰填谷,通過MQ承接流量。

8、并發(fā)處理,通過多線程將串行邏輯并行化。

9、預計算,比如搶紅包場景,可以提前計算好紅包金額緩存起來,發(fā)紅包時直接使用即可。

10、緩存預熱,通過異步任務提前預熱數據到本地緩存或者分布式緩存中。

11、減少IO次數,比如數據庫和緩存的批量讀寫、RPC的批量接口支持、或者通過冗余數據的方式干掉RPC調用。

12、減少IO時的數據包大小,包括采用輕量級的通信協議、合適的數據結構、去掉接口中的多余字段、減少緩存key的大小、壓縮緩存value等。

13、程序邏輯優(yōu)化,比如將大概率阻斷執(zhí)行流程的判斷邏輯前置、For循環(huán)的計算邏輯優(yōu)化,或者采用更高效的算法。

14、各種池化技術的使用和池大小的設置,包括HTTP請求池、線程池(考慮CPU密集型還是IO密集型設置核心參數)、數據庫和Redis連接池等。

15、JVM優(yōu)化,包括新生代和老年代的大小、GC算法的選擇等,盡可能減少GC頻率和耗時。

16、鎖選擇,讀多寫少的場景用樂觀鎖,或者考慮通過分段鎖的方式減少鎖沖突。

上述方案無外乎從計算和 IO 兩個維度考慮所有可能的優(yōu)化點,需要有配套的監(jiān)控系統(tǒng)實時了解當前的性能表現,并支撐你進行性能瓶頸分析,然后再遵循二八原則,抓主要矛盾進行優(yōu)化。

高可用的實踐方案

1、對等節(jié)點的故障轉移,Nginx和服務治理框架均支持一個節(jié)點失敗后訪問另一個節(jié)點。

2、非對等節(jié)點的故障轉移,通過心跳檢測并實施主備切換(比如redis的哨兵模式或者集群模式、MySQL的主從切換等)。

3、接口層面的超時設置、重試策略和冪等設計。

4、降級處理:保證核心服務,犧牲非核心服務,必要時進行熔斷;或者核心鏈路出問題時,有備選鏈路。

5、限流處理:對超過系統(tǒng)處理能力的請求直接拒絕或者返回錯誤碼。

6、MQ場景的消息可靠性保證,包括producer端的重試機制、broker側的持久化、consumer端的ack機制等。

7、灰度發(fā)布,能支持按機器維度進行小流量部署,觀察系統(tǒng)日志和業(yè)務指標,等運行平穩(wěn)后再推全量。

8、監(jiān)控報警:全方位的監(jiān)控體系,包括最基礎的CPU、內存、磁盤、網絡的監(jiān)控,以及Web服務器、JVM、數據庫、各類中間件的監(jiān)控和業(yè)務指標的監(jiān)控。

9、災備演練:類似當前的“混沌工程”,對系統(tǒng)進行一些破壞性手段,觀察局部故障是否會引起可用性問題。

高可用的方案主要從冗余、取舍、系統(tǒng)運維3個方向考慮,同時需要有配套的值班機制和故障處理流程,當出現線上問題時,可及時跟進處理。

高擴展的實踐方案

1、合理的分層架構:比如上面談到的互聯網最常見的分層架構,另外還能進一步按照數據訪問層、業(yè)務邏輯層對微服務做更細粒度的分層(但是需要評估性能,會存在網絡多一跳的情況)。

2、存儲層的拆分:按照業(yè)務維度做垂直拆分、按照數據特征維度進一步做水平拆分(分庫分表)。

3、業(yè)務層的拆分:最常見的是按照業(yè)務維度拆(比如電商場景的商品服務、訂單服務等),也可以按照核心接口和非核心接口拆,還可以按照請求源拆(比如To C和To B,APP和H5)。

最后的話

高并發(fā)確實是一個復雜且系統(tǒng)性的問題,由于篇幅有限,諸如分布式Trace、全鏈路壓測、柔性事務都是要考慮的技術點。另外,如果業(yè)務場景不同,高并發(fā)的落地方案也會存在差異,但是總體的設計思路和可借鑒的方案基本類似。

高并發(fā)設計同樣要秉承架構設計的3個原則:簡單、合適和演進。“過早的優(yōu)化是萬惡之源”,不能脫離業(yè)務的實際情況,更不要過度設計,合適的方案就是最完美的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 嵌入式系統(tǒng)

    關注

    41

    文章

    3716

    瀏覽量

    133037
  • 吞吐量
    +關注

    關注

    0

    文章

    49

    瀏覽量

    12645
  • 并發(fā)
    +關注

    關注

    0

    文章

    7

    瀏覽量

    2654
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Swift 的并發(fā)系統(tǒng)并行運行多個任務

    ??前言 Swift 內置并發(fā)系統(tǒng)的好處之是它可以更輕松地并行執(zhí)行多個異步任務,這反過來又可以使我們顯著加快可以分解為單獨部分的操作。 在本文中,讓我們看下幾種不同的方法,以及這些技術中的每
    的頭像 發(fā)表于 11-11 11:33 ?246次閱讀

    工業(yè)物聯網數據中臺的并發(fā)性有什么作用

    工業(yè)物聯網數據中臺的并發(fā)性是保障其在復雜工業(yè)場景下穩(wěn)定運行的核心能力之。它的核心作用是確保大量設備同時接入和數據傳輸時,系統(tǒng)依然能高效處理、不卡頓、不丟失數據,能夠在單位時間內高效處理海量設備
    的頭像 發(fā)表于 10-28 11:28 ?165次閱讀
    工業(yè)物聯網數據中臺的<b class='flag-5'>高</b><b class='flag-5'>并發(fā)</b>性有什么作用

    如何理解工業(yè)數據中臺的并發(fā)能力

    工業(yè)數據中臺的并發(fā)能力是指其在同時間段內高效處理大量設備數據讀寫、分析請求的能力,這是保障工業(yè)數據實時采集、傳輸、處理與決策響應穩(wěn)定性和高效性的關鍵。以下從核心價值、技術實現、應用場景三個維度
    的頭像 發(fā)表于 10-15 11:49 ?232次閱讀

    創(chuàng)建并發(fā)布測試版本(

    創(chuàng)建并發(fā)布測試版本,并選擇您要分發(fā)的測試群組。邀請測試最多允許100個版本同時在架,邀請測試和公開測試的總計版本數量不超過100個。 1.在左側導航欄選擇“應用測試>版本列表”,進入
    發(fā)表于 09-16 15:21

    Nginx并發(fā)優(yōu)化方案

    作為名在生產環(huán)境中摸爬滾打多年的運維工程師,我見過太多因為Nginx配置不當導致的性能瓶頸。今天分享套完整的Nginx并發(fā)優(yōu)化方案,幫助你的系統(tǒng)從10萬QPS突破到百萬級別。
    的頭像 發(fā)表于 08-13 15:51 ?632次閱讀

    鴻蒙5開發(fā)寶藏案例分享---應用并發(fā)設計

    ?** 鴻蒙并發(fā)編程實戰(zhàn)指南:解鎖ArkTS多線程黑科技** 嘿,開發(fā)者朋友們! 今天給大家扒扒鴻蒙官方文檔里藏著的并發(fā)編程寶藏—— 100+實戰(zhàn)場景解決方案 !從金融理財到游戲開發(fā),從折疊屏適配
    發(fā)表于 06-12 16:19

    HarmonyOS實戰(zhàn):招解決等待多個并發(fā)結果

    講解開發(fā)過程中遇到的并發(fā)問題,官方API 11檔寫的太簡單了,根本沒有解決方案,小編也是苦思冥想,絞盡腦汁才找到解決方案。需要開發(fā)鴻蒙的小伙伴可以仔細閱讀,避免踩坑。** 問題 在開發(fā)清除緩存的功能時,鴻蒙NEXT提供的文檔中說明,應用緩存文件
    的頭像 發(fā)表于 06-09 14:57 ?366次閱讀
    HarmonyOS實戰(zhàn):<b class='flag-5'>一</b>招解決等待多個<b class='flag-5'>并發(fā)</b>結果

    讀懂智能側開關

    在汽車電子領域,“智能側開關”與“智能邊開關”這兩個名詞頻繁被提及,它們實則指代同事物。為表述統(tǒng),后續(xù)我們皆以“智能側開關”?稱之
    發(fā)表于 06-04 10:03 ?2470次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>讀懂智能<b class='flag-5'>高</b>側開關

    Ingress網關并發(fā)請求的解決方案

    當 Ingress 網關面臨高并發(fā)請求(如 QPS 超過 10萬+)時,可能導致服務崩潰、響應延遲激增或資源耗盡。
    的頭像 發(fā)表于 05-14 11:52 ?644次閱讀

    RAKsmart服務器如何重塑AI并發(fā)算力格局

    在AI大模型參數量突破萬億級、實時推理需求激增的當下,傳統(tǒng)服務器架構的并發(fā)處理能力已逼近物理極限。RAKsmart通過“硬件重構+軟件定義”的雙引擎創(chuàng)新,推出新代AI服務器解決方案。下面,AI部落小編為您解析RAKsmart服務器如何重塑AI
    的頭像 發(fā)表于 04-03 10:37 ?660次閱讀

    TurMass? 如何幫助解決 UWB 定位系統(tǒng)大規(guī)模終端標簽并發(fā)通信沖突問題?

    在大容量定位終端數據并發(fā)場景中,現有通信技術因信號沖突、系統(tǒng)容量受限等問題,難以滿足需求。TurMass? 通信技術通過多信道設計、時隙劃分、定位與通信體化等創(chuàng)新方案,有效解決了
    的頭像 發(fā)表于 03-17 14:38 ?769次閱讀
    TurMass? 如何幫助解決 UWB 定位系統(tǒng)大規(guī)模終端標簽<b class='flag-5'>高</b><b class='flag-5'>并發(fā)</b>通信沖突問題?

    RK3568驅動指南|第三篇-并發(fā)與競爭-第19章 并發(fā)與競爭實驗

    RK3568驅動指南|第三篇-并發(fā)與競爭-第19章 并發(fā)與競爭實驗
    的頭像 發(fā)表于 02-24 16:26 ?836次閱讀
    RK3568驅動指南|第三篇-<b class='flag-5'>并發(fā)</b>與競爭-第19章 <b class='flag-5'>并發(fā)</b>與競爭實驗

    解析工業(yè)互聯網

    電子發(fā)燒友網站提供《解析工業(yè)互聯網.pptx》資料免費下載
    發(fā)表于 02-20 16:42 ?1次下載

    詳解CMP并發(fā)多協議

    隨著無線通信的不斷發(fā)展,對可同時支持多個協議的設備的需求顯著增加。此功能稱為并發(fā)多協議(Concurrent Multiprotocol, CMP),允許設備同時在不同無線標準下運行,從而提高設備的多功能性和適應性。
    的頭像 發(fā)表于 01-03 10:12 ?1636次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>詳解CMP<b class='flag-5'>并發(fā)</b>多協議

    福田卡汽車新能源技術戰(zhàn)略解讀

    ,并發(fā)布首款VAN類產品樂福、亮相重卡概念車Beacon,以全新科技及產品提速“讓每公里更美好”。同時,福田卡汽車與行業(yè)知名物流運輸企業(yè),達成戰(zhàn)略合作,卡車隊啟航奔赴全國物流
    的頭像 發(fā)表于 12-23 15:43 ?1004次閱讀