国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計一個高流量高并發(fā)的系統(tǒng)需要關(guān)注哪些點

這篇具有很好參考價值的文章主要介紹了設(shè)計一個高流量高并發(fā)的系統(tǒng)需要關(guān)注哪些點。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

我相信每一位開發(fā)同學(xué)多多少少都想?yún)⑴c或負責(zé)一個高用戶、高訪問、高并發(fā)的系統(tǒng)吧??。一來可以增加自己實際的項目經(jīng)驗,有應(yīng)對高并發(fā)場景的解決方案,二來是有個高并發(fā)的項目經(jīng)驗無疑是自己簡歷的一個大大的加分項。但是奈何很多人都沒有機會可以參與這樣的項目,本文從以下幾點介紹一下設(shè)計一個高流量高并發(fā)的系統(tǒng)需要經(jīng)歷哪些步驟以及考慮哪些因素( 文章中的不足之處還請大佬們多多指點 \color{red}{文章中的不足之處還請大佬們多多指點} 文章中的不足之處還請大佬們多多指點)。

1、設(shè)計原則

1.1、系統(tǒng)設(shè)計原則

在設(shè)計一個系統(tǒng)之前,我們先要有一個統(tǒng)一且清晰的認知:不要想著一下就能設(shè)計出完美的系統(tǒng),好的系統(tǒng)是迭代出來的。不要復(fù)雜化,要先解決核心問題。但是要有先行的規(guī)劃,對現(xiàn)有的問題有方案,對未來系統(tǒng)有預(yù)案。

在設(shè)計高并發(fā)的系統(tǒng)時要遵循以下幾個原則:

  • 無狀態(tài)原則
    什么是無狀態(tài)?服務(wù)器不保存狀態(tài),對單次請求的處理不依賴別的請求就是無狀態(tài),主要是為了在應(yīng)對高并發(fā)時方便水平擴展。

  • 拆分原則
    在我們的系統(tǒng)體積過于龐大或者承載不了大量的請求時,就要考慮拆分系統(tǒng),將復(fù)雜問題簡單化或?qū)⒘髁糠稚⒉煌酉到y(tǒng)分擔(dān)壓力??梢园凑找韵聨讉€維度進行拆分:

    • 系統(tǒng)維度:比如電商系統(tǒng),我們可以拆分成商品、支付、優(yōu)惠券多個子系統(tǒng)。
    • 功能維度:將系統(tǒng)按功能再次拆分。
    • 讀寫維度:按照讀寫比例將服務(wù)拆分成讀服務(wù)和寫服務(wù)。
    • 模塊維度:將系統(tǒng)按照基礎(chǔ)架構(gòu)、消息隊列、分庫分表 、組件等模塊進行拆分維護。
  • 服務(wù)化原則
    當(dāng)我們的系統(tǒng)被拆分的足夠大時,一旦發(fā)生故障靠人工來處理是非常耗時耗力。這個時候就可以通過注冊發(fā)現(xiàn)、限流、熔斷、降級等方案讓每個服務(wù)可以自己處理問題來幫助我們減少排障成本。

1.2、業(yè)務(wù)設(shè)計原則

在進行業(yè)務(wù)設(shè)計時要遵循一些最基本的原則比如:

  • 防重原則
    在某些場景下要防止用戶重復(fù)操作,例如:用戶注冊、用戶下單、用戶支付等。我們需要在客戶端和服務(wù)端有一些方案避免這種問題。
  • 模塊復(fù)用原則
    在業(yè)務(wù)中每個功能多多少少是有聯(lián)系的,在設(shè)計的時候模塊盡量要獨立,其他模塊直接調(diào)用即可,調(diào)用減少代碼的冗余。
  • 可追溯原則
    在程序的運行中避免不了業(yè)務(wù)問題以及故障的發(fā)生,但是我們可以通過日志的方式快速定位問題,做到有據(jù)可查。
  • 反饋原則
    系統(tǒng)對用戶的響應(yīng)應(yīng)該是具體、詳細的,舉一個很簡單的例子,用戶登錄失敗后應(yīng)該反饋給用戶的是“用戶名錯誤”或者“密碼錯誤”,而不是“登錄失敗”。
  • 備份原則
    做好代碼備份、數(shù)據(jù)備份以及人員備份。

2、客戶端優(yōu)化

在高并發(fā)高流量的系統(tǒng)客戶端的優(yōu)化是必不可少的,如果沒有做好客戶端的優(yōu)化影響用戶體驗是一方面,有時候甚至是致命的。

這里分享下我之前慘痛的教訓(xùn):之前參與過一個秒殺的業(yè)務(wù),就是因為前端的沒有做優(yōu)化,大量用戶在刷新頁面時服務(wù)器的帶寬被打爆,頁面加載不出來,影響了系統(tǒng)的發(fā)展,這是非常致命的。主要原因還是沒有經(jīng)驗,以為后端做好高并發(fā)抵抗就可以。

客戶端優(yōu)化主要集中以下幾點( 前端大佬幫忙更正補充 \color{red}{前端大佬幫忙更正補充} 前端大佬幫忙更正補充):

  • 資源下載
    • 減少不必要傳輸:例如減少cookie使用,因為cookie 隨著請求發(fā)送而發(fā)送從而增加數(shù)據(jù)量。
    • 減少數(shù)據(jù)量輸出:例如刪除JS無效注釋,一來可以減少體積,二來可以提高代碼安全。或者可以將文件壓縮后傳輸。
    • 減少請求 :將資源數(shù)目多、體積小、頻繁創(chuàng)建http請求的文件合并,比如JS合并、矢量圖 SVG。
    • 轉(zhuǎn)移第三方:將請求轉(zhuǎn)移至第三方,例如oss。
  • 資源緩存
    常見的資源緩存就是圖片、樣式和腳本。有些場景可以利用客戶端的緩存幫助服務(wù)端分擔(dān)壓力,比如網(wǎng)約車中的預(yù)估價格,客戶端可以緩存計算規(guī)則并緩存,減少向服務(wù)端的請求。
  • 資源解析
    我們知道頁面中資源解析的順序是從上到下,如果上面有改變下面也需要變動,所以我們要縮小回流、重繪的范圍,比如虛擬dom。 除此之外我們還可以利用懶加載和預(yù)加載進行優(yōu)化:
    • 懶加載:先加載基礎(chǔ)的,再根據(jù)用戶的操作進行局部加載。將原來一次性要加載的拆分成多次加載,減少下載數(shù)量和耗時。比如:樹節(jié)點、折疊面板、二級菜單等。
    • 預(yù)加載:當(dāng)前頁面對下個頁面的解析、拉取資源。下面代碼作為參考
      <meta http-equiv="x-dns-prefetch-control" content="on">
      <link rel='dns-prefetch" href="www.baidu.com" >
      <link rel='preload" href="..js" >
      <link rel='prefetch" href="..js" >
      

3、使用CDN

CDN應(yīng)用在客戶端——>服務(wù)端之前,能夠?qū)崟r的根據(jù)網(wǎng)絡(luò)流量和各節(jié)點的連接、負載情況以及到用戶的距離和響應(yīng)時間等綜合信息將用戶的請求導(dǎo)向離用戶最近的服務(wù)節(jié)點上,使用戶可以就近取得所需內(nèi)容,解決網(wǎng)絡(luò)擁擠的狀況,提高用戶訪問網(wǎng)站的響應(yīng)速度和成功率。我們可以通過CDN服務(wù)商購買CDN服務(wù),綁定我們的域名,其他的事就不用我們管了。

借用一張網(wǎng)絡(luò)上的圖片幫助理解下設(shè)計一個高流量高并發(fā)的系統(tǒng)需要關(guān)注哪些點

4、服務(wù)的集群

通常高并發(fā)系統(tǒng)都存在集群節(jié)點,為了抵抗大量的請求,也為了系統(tǒng)的高可用。根據(jù)業(yè)務(wù)場景利用負載策略將一個請求分發(fā)到集群中的某個計算節(jié)點。通過Nginx、LVS、Keepalived等集群組件可以輕松的實現(xiàn)這一功能。

依然是借用一張網(wǎng)絡(luò)上的圖片??
設(shè)計一個高流量高并發(fā)的系統(tǒng)需要關(guān)注哪些點

5、服務(wù)端緩存

緩存的介入其實就是空間換時間,常見的緩存組件redis、memcache、guava都可以起到減少響應(yīng)時間的作用,在高并發(fā)的項目中經(jīng)常被使用到,適合讀多寫少、耗時長的查詢場景。但是會帶來開發(fā)人員學(xué)習(xí)、寫代碼、部署機器、維護的成本。在設(shè)計key時要有以下幾點認知:

  1. 盡量避免沖突碰撞。
  2. sha-256沖突極低。
  3. 查詢key的速度取決于物理位置。

否則使用緩存的收益是非常低甚至沒有必要的。

當(dāng)然,緩存技術(shù)的引入也是可能會帶來一些列緩存問題,比如緩存擊穿、緩存穿透、緩存雪崩等,依然需要代碼層面去解決,在使用時需要注意這些問題。

6、數(shù)據(jù)庫優(yōu)化

我們知道所有的業(yè)務(wù)數(shù)據(jù)最終都會落到數(shù)據(jù)庫,隨著數(shù)據(jù)量的增加會帶來響應(yīng)時間的增加,以及系統(tǒng)的負載不斷上升,數(shù)據(jù)庫單點壓力會越來越大,這個時候?qū)?shù)據(jù)庫的優(yōu)化就不單僅是冗余、反范式、索引,可以根據(jù)業(yè)務(wù)場景參考以下方案:

  • 表分區(qū)
    在mysql中一張表的數(shù)據(jù)對應(yīng)一個ibd文件,當(dāng)文件過大時查找數(shù)據(jù)就會變的很慢。 表分區(qū)是將一張表按照hash、list、key等規(guī)則進行分流,在物理上將這一張表ibd文件分成多個文件,但是邏輯上還是一張表。
    訪問量不大,但是表數(shù)據(jù)很多的表,可以采用這種方式,這樣的好處就是查詢的數(shù)據(jù)在一個分區(qū)時會很快的查到。
  • 分庫分表
    分庫分表是真正的把一張表分布在不同的庫或多張表,在訪問量大的時候可以把一張表分多張表并且分布在不同的庫減少單個數(shù)據(jù)庫的壓力,提高并發(fā)?;蛘甙凑諛I(yè)務(wù)劃分進行分庫分表達到數(shù)據(jù)隔離的作用。
    但是這種方式往往會帶來分布式id、事務(wù)、join查詢等一系列問題,我們只能通過代碼層面來解決,無疑增加了復(fù)雜度。
  • 讀寫分離
    在讀多寫少的場景下我們可以利用shardingjdbc、mycat等開源框架或組件路由到寫庫或者讀庫實現(xiàn)讀寫分離。
    同樣讀寫分離也存在一定的問題,比如主從復(fù)制問題、時間差問題等,可以結(jié)合業(yè)務(wù)場景規(guī)避。

7、服務(wù)治理

在高并發(fā)的項目中,往往我們的后端服務(wù)是很龐大的,因為服務(wù)拆分所引發(fā)的如:服務(wù)調(diào)用、服務(wù)雪崩、節(jié)點故障問題,以及處理高并發(fā)請求的問題。如何解決這些問題,讓服務(wù)更穩(wěn)定地運行,我們管它叫作服務(wù)治理。通常有以下幾種方案:

  • 降級:在高并發(fā)的請求下,如果服務(wù)資源不足,我們可以丟車保帥,將功能減弱保障核心業(yè)務(wù)。
  • 熔斷:通常服務(wù)間的調(diào)用可能會發(fā)生服務(wù)雪崩的情況,為了防止這種情況發(fā)生,我們?yōu)閱蝹€服務(wù)設(shè)置保險絲,當(dāng)外部系統(tǒng)不能訪問后禁止調(diào)用。
  • 限流:根據(jù)資源或者服務(wù)的QPS、線程數(shù)情況限制請求量或資源量進行自我保護。
  • 隔離:隔離通常是為了達到不因某個資源異常而影響其他資源的正常使用。比如數(shù)據(jù)隔離(分庫)、機器隔離(重要的用戶單獨配置服務(wù)器)、機房隔離等。

總結(jié)

做好一個高流量高并發(fā)的系統(tǒng),不論前端還是后端,過程中每一個步驟都是至關(guān)重要的。設(shè)計一個系統(tǒng)除了滿足功能性,還要考慮兼容性、易用性、可靠性、安全性、可維護性、可移植性等軟件質(zhì)量。同時要對系統(tǒng)的吞吐量、并發(fā)數(shù)、平均響應(yīng)時間等指標要完全掌握,在指標異常時可以快速做出決策避免一系列問題發(fā)生。文章來源地址http://www.zghlxwxcb.cn/news/detail-414869.html

到了這里,關(guān)于設(shè)計一個高流量高并發(fā)的系統(tǒng)需要關(guān)注哪些點的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 如何設(shè)計一個合格的高并發(fā)秒殺系統(tǒng)

    如何設(shè)計一個合格的高并發(fā)秒殺系統(tǒng)

    在前面的文章中,詳細闡述了建設(shè)秒殺系統(tǒng)的目標與存在的挑戰(zhàn),并且簡單羅列了如何應(yīng)對這些挑戰(zhàn)的方式。本章,就詳細闡述對秒殺系統(tǒng)存在挑戰(zhàn)的應(yīng)對之道,最終構(gòu)建出兼具高并發(fā)、高性能和高可用的秒殺系統(tǒng)。心中不僅了解建設(shè)秒殺系統(tǒng)存在的挑戰(zhàn),更清楚的知道這些

    2024年02月05日
    瀏覽(19)
  • 架構(gòu)設(shè)計內(nèi)容分享(二百一十):設(shè)計一個大并發(fā)、大數(shù)據(jù)的系統(tǒng)架構(gòu),說說設(shè)計思路

    架構(gòu)設(shè)計內(nèi)容分享(二百一十):設(shè)計一個大并發(fā)、大數(shù)據(jù)的系統(tǒng)架構(gòu),說說設(shè)計思路

    目錄 大并發(fā)/大數(shù)據(jù)的軟件有如下特點 大并發(fā)/大數(shù)據(jù)的架構(gòu)目標有如下幾個 大并發(fā)/大數(shù)據(jù)的設(shè)計思路與原則 大并發(fā)/大數(shù)據(jù)的分層架構(gòu) 1 接入層的架構(gòu)方案: 第二三層:應(yīng)用層/服務(wù)層架構(gòu)方案 第四層:數(shù)據(jù)層架構(gòu)方案 第五層:基礎(chǔ)設(shè)施層架構(gòu) 高并發(fā)核武器:單元化+異地

    2024年02月21日
    瀏覽(16)
  • 精確掌控并發(fā):令牌桶算法在分布式環(huán)境下并發(fā)流量控制的設(shè)計與實現(xiàn)

    精確掌控并發(fā):令牌桶算法在分布式環(huán)境下并發(fā)流量控制的設(shè)計與實現(xiàn)

    這是《百圖解碼支付系統(tǒng)設(shè)計與實現(xiàn)》專欄系列文章中的第(17)篇,也是流量控制系列的第(4)篇。點擊上方關(guān)注,深入了解支付系統(tǒng)的方方面面。 本篇重點講清楚令牌桶原理,在支付系統(tǒng)的應(yīng)用場景,以及使用reids實現(xiàn)的核心代碼。 在流量控制系列文章中的前三篇,分別

    2024年01月19日
    瀏覽(25)
  • 精確掌控并發(fā):固定時間窗口算法在分布式環(huán)境下并發(fā)流量控制的設(shè)計與實現(xiàn)

    精確掌控并發(fā):固定時間窗口算法在分布式環(huán)境下并發(fā)流量控制的設(shè)計與實現(xiàn)

    這是《百圖解碼支付系統(tǒng)設(shè)計與實現(xiàn)》專欄系列文章中的第(14)篇。點擊上方關(guān)注,深入了解支付系統(tǒng)的方方面面。 本篇主要介紹分布式場景下常用的并發(fā)流量控制方案,包括固定時間窗口、滑動時間窗口、漏桶、令牌桶、分布式消息中間件等,并重點講清楚固定時間窗口

    2024年01月19日
    瀏覽(38)
  • 精確掌控并發(fā):滑動時間窗口算法在分布式環(huán)境下并發(fā)流量控制的設(shè)計與實現(xiàn)

    精確掌控并發(fā):滑動時間窗口算法在分布式環(huán)境下并發(fā)流量控制的設(shè)計與實現(xiàn)

    這是《百圖解碼支付系統(tǒng)設(shè)計與實現(xiàn)》專欄系列文章中的第(15)篇,也是流量控制系列的第(2)篇。點擊上方關(guān)注,深入了解支付系統(tǒng)的方方面面。 上一篇介紹了固定時間窗口算法在支付渠道限流的應(yīng)用以及使用redis實現(xiàn)的核心代碼。 本篇重點講清楚滑動時間窗口算法原理

    2024年01月22日
    瀏覽(31)
  • 設(shè)計一個億級高并發(fā)系統(tǒng)架構(gòu) - 12306火車票核心場景DDD領(lǐng)域建模

    設(shè)計一個億級高并發(fā)系統(tǒng)架構(gòu) - 12306火車票核心場景DDD領(lǐng)域建模

    “ 架設(shè)一個億級高并發(fā)系統(tǒng),是多數(shù)程序員、架構(gòu)師的工作目標。 許多的技術(shù)從業(yè)人員甚至有時會降薪去尋找這樣的機會。但并不是所有人都有機會主導(dǎo),甚至參與這樣一個系統(tǒng)。今天我們用12306火車票購票這樣一個業(yè)務(wù)場景來做DDD領(lǐng)域建模?!?要實現(xiàn)軟件設(shè)計、軟件開發(fā)

    2024年02月03日
    瀏覽(44)
  • 組建一個SLAM小組需要哪些人才

    組建一個SLAM小組需要多樣化的人才,以下是一些關(guān)鍵技能的人才: 機器人學(xué)家/機械工程師:具備機器人設(shè)計和制造的知識,熟悉各種傳感器和執(zhí)行器的使用,能夠?qū)C器人的動力學(xué)與SLAM技術(shù)結(jié)合起來。 計算機視覺工程師:具備圖像處理和計算機視覺的基本知識,能夠處理

    2024年02月12日
    瀏覽(21)
  • 做一個蛋糕店小程序需要哪些步驟?

    做一個蛋糕店小程序需要哪些步驟?

    對于一些不懂技術(shù)的新手來說,創(chuàng)建蛋糕店小程序可能會感到有些困惑。但是,有了喬拓云平臺的幫助,你可以輕松地創(chuàng)建自己的蛋糕店小程序。下面,我將為大家詳細介紹一下具體的操作步驟。 首先,登錄喬拓云平臺并進入后臺管理頁面。在頁面上找到【商城】并點擊【去

    2024年02月11日
    瀏覽(19)
  • 如何建立一個成功的獨立站?需要掌握哪些技能和步驟?

    獨立站的定義 獨立站是指自主搭建的網(wǎng)站,其所有權(quán)和掌控權(quán)都完全歸屬于站長自己。獨立站通常需要購買域名和服務(wù)器空間,使用自己的技術(shù)和資源進行建設(shè)和維護,因此相對于第三方平臺更為自主和靈活。獨立站可以是個人博客、電商網(wǎng)站、社交網(wǎng)站等各種類型,其內(nèi)容

    2024年02月19日
    瀏覽(17)
  • 系統(tǒng)上線安全測評需要做哪些內(nèi)容?

    系統(tǒng)上線安全測評需要做哪些內(nèi)容?

    電力信息系統(tǒng)、航空航天、交通運輸、銀行金融、地圖繪畫、政府官網(wǎng)等系統(tǒng)再正式上線前需要做安全測試。避免造成數(shù)據(jù)泄露從而引起的各種嚴重問題。 ? 那么系統(tǒng)上線前需要做哪些測試內(nèi)容呢?下面由我給大家介紹 1、安全機制檢測-應(yīng)用安全 身份鑒別 登錄控制模塊 應(yīng)提

    2024年02月11日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包