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

高并發(fā)架構(gòu)系統(tǒng)設(shè)計(jì)注意事項(xiàng)

這篇具有很好參考價(jià)值的文章主要介紹了高并發(fā)架構(gòu)系統(tǒng)設(shè)計(jì)注意事項(xiàng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文從以下幾點(diǎn)介紹一下設(shè)計(jì)一個(gè)高流量高并發(fā)的系統(tǒng)需要經(jīng)歷哪些步驟以及考慮哪些因素(文章中的不足之處還請(qǐng)大佬們多多指點(diǎn))。

1. 設(shè)計(jì)原則

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

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

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

無狀態(tài)原則

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

拆分原則

在我們的系統(tǒng)體積過于龐大或者承載不了大量的請(qǐng)求時(shí),就要考慮拆分系統(tǒng),將復(fù)雜問題簡(jiǎn)單化或?qū)⒘髁糠稚⒉煌酉到y(tǒng)分擔(dān)壓力。可以按照以下幾個(gè)維度進(jìn)行拆分:

  • 系統(tǒng)維度: 比如電商系統(tǒng),我們可以拆分成商品、支付、優(yōu)惠券多個(gè)子系統(tǒng)。
  • 功能維度: 將系統(tǒng)按功能再次拆分。
  • 讀寫維度: 按照讀寫比例將服務(wù)拆分成讀服務(wù)和寫服務(wù)。
  • 模塊維度: 將系統(tǒng)按照基礎(chǔ)架構(gòu)、消息隊(duì)列、分庫(kù)分表 、組件等模塊進(jìn)行拆分維護(hù)。

服務(wù)化原則

當(dāng)我們的系統(tǒng)被拆分的足夠大時(shí),一旦發(fā)生故障靠人工來處理是非常耗時(shí)耗力。這個(gè)時(shí)候就可以通過注冊(cè)發(fā)現(xiàn)、限流、熔斷、降級(jí)等方案讓每個(gè)服務(wù)可以自己處理問題來幫助我們減少排障成本。

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

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

  • 防重原則

在某些場(chǎng)景下要防止用戶重復(fù)操作,例如:用戶注冊(cè)、用戶下單、用戶支付等。我們需要在客戶端和服務(wù)端有一些方案避免這種問題。

  • 模塊復(fù)用原則

在業(yè)務(wù)中每個(gè)功能多多少少是有聯(lián)系的,在設(shè)計(jì)的時(shí)候模塊盡量要獨(dú)立,其他模塊直接調(diào)用即可,調(diào)用減少代碼的冗余。

  • 可追溯原則

在程序的運(yùn)行中避免不了業(yè)務(wù)問題以及故障的發(fā)生,但是我們可以通過日志的方式快速定位問題,做到有據(jù)可查。

  • 反饋原則

系統(tǒng)對(duì)用戶的響應(yīng)應(yīng)該是具體、詳細(xì)的,舉一個(gè)很簡(jiǎn)單的例子,用戶登錄失敗后應(yīng)該反饋給用戶的是“用戶名錯(cuò)誤”或者“密碼錯(cuò)誤”,而不是“登錄失敗”。

  • 備份原則

做好代碼備份、數(shù)據(jù)備份以及人員備份。

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

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

客戶端優(yōu)化主要集中以下幾點(diǎn):

資源下載

  • 減少不必要傳輸:例如減少cookie使用,因?yàn)閏ookie 隨著請(qǐng)求發(fā)送而發(fā)送從而增加數(shù)據(jù)量。
  • 減少數(shù)據(jù)量輸出:例如刪除JS無效注釋,一來可以減少體積,二來可以提高代碼安全?;蛘呖梢詫⑽募嚎s后傳輸。
  • 減少請(qǐng)求 :將資源數(shù)目多、體積小、頻繁創(chuàng)建http請(qǐng)求的文件合并,比如JS合并、矢量圖 SVG。
  • 轉(zhuǎn)移第三方:將請(qǐng)求轉(zhuǎn)移至第三方,例如oss。

資源緩存

常見的資源緩存就是圖片、樣式和腳本。有些場(chǎng)景可以利用客戶端的緩存幫助服務(wù)端分擔(dān)壓力,比如網(wǎng)約車中的預(yù)估價(jià)格,客戶端可以緩存計(jì)算規(guī)則并緩存,減少向服務(wù)端的請(qǐng)求。

資源解析

我們知道頁面中資源解析的順序是從上到下,如果上面有改變下面也需要變動(dòng),所以我們要縮小回流、重繪的范圍,比如虛擬dom。除此之外我們還可以利用懶加載和預(yù)加載進(jìn)行優(yōu)化:

  • 懶加載: 先加載基礎(chǔ)的,再根據(jù)用戶的操作進(jìn)行局部加載。將原來一次性要加載的拆分成多次加載,減少下載數(shù)量和耗時(shí)。比如:樹節(jié)點(diǎn)、折疊面板、二級(jí)菜單等。
  • 預(yù)加載: 當(dāng)前頁面對(duì)下個(gè)頁面的解析、拉取資源。

3. 使用CDN

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

我們可以通過CDN服務(wù)商購(gòu)買CDN服務(wù),綁定我們的域名,其他的事就不用我們管了。

4. 服務(wù)的集群

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

5. 服務(wù)端緩存

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

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

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

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

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

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

  • 表分區(qū)

在mysql中一張表的數(shù)據(jù)對(duì)應(yīng)一個(gè)ibd文件,當(dāng)文件過大時(shí)查找數(shù)據(jù)就會(huì)變的很慢。表分區(qū)是將一張表按照hash、list、key等規(guī)則進(jìn)行分流,在物理上將這一張表ibd文件分成多個(gè)文件,但是邏輯上還是一張表。訪問量不大,但是表數(shù)據(jù)很多的表,可以采用這種方式,這樣的好處就是查詢的數(shù)據(jù)在一個(gè)分區(qū)時(shí)會(huì)很快的查到。

  • 分庫(kù)分表

分庫(kù)分表是真正的把一張表分布在不同的庫(kù)或多張表,在訪問量大的時(shí)候可以把一張表分多張表并且分布在不同的庫(kù)減少單個(gè)數(shù)據(jù)庫(kù)的壓力,提高并發(fā)?;蛘甙凑諛I(yè)務(wù)劃分進(jìn)行分庫(kù)分表達(dá)到數(shù)據(jù)隔離的作用。但是這種方式往往會(huì)帶來分布式id、事務(wù)、join查詢等一系列問題,我們只能通過代碼層面來解決,無疑增加了復(fù)雜度。

  • 讀寫分離

在讀多寫少的場(chǎng)景下我們可以利用shardingjdbc、mycat等開源框架或組件路由到寫庫(kù)或者讀庫(kù)實(shí)現(xiàn)讀寫分離。同樣讀寫分離也存在一定的問題,比如主從復(fù)制問題、時(shí)間差問題等,可以結(jié)合業(yè)務(wù)場(chǎng)景規(guī)避。

7. 服務(wù)治理

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

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

8. 總結(jié)

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

到了這里,關(guān)于高并發(fā)架構(gòu)系統(tǒng)設(shè)計(jì)注意事項(xiàng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Xilinx FPGA電源設(shè)計(jì)與注意事項(xiàng)

    Xilinx FPGA電源設(shè)計(jì)與注意事項(xiàng)

    1 引言 隨著半導(dǎo)體和芯片技術(shù)的飛速發(fā)展,現(xiàn)在的FPGA集成了越來越多的可配置邏輯資源、各種各樣的外部總線接口以及豐富的內(nèi)部RAM資源,使其在國(guó)防、醫(yī)療、消費(fèi)電子等領(lǐng)域得到了越來越廣泛的應(yīng)用。當(dāng)采用FPGA進(jìn)行設(shè)計(jì)電路時(shí),大多數(shù)FPGA對(duì)上電的電源排序和上電時(shí)間是有

    2024年02月02日
    瀏覽(22)
  • 設(shè)計(jì)模式: 軟件設(shè)計(jì)的分層與軟件開發(fā)注意事項(xiàng)

    軟件設(shè)計(jì)的分層 系統(tǒng)級(jí)設(shè)計(jì)架構(gòu) 應(yīng)用級(jí)架構(gòu) 模塊級(jí)架構(gòu) 代碼級(jí)架構(gòu) 1) 系統(tǒng)級(jí)設(shè)計(jì)架構(gòu) 應(yīng)用在整個(gè)系統(tǒng)內(nèi),如與后臺(tái)服務(wù)如何通信,與第三方系統(tǒng)如何集成 包括業(yè)務(wù)的關(guān)系和協(xié)作的機(jī)制 設(shè)計(jì)后端:與后臺(tái)數(shù)據(jù)傳遞的機(jī)制 包括:api設(shè)計(jì)規(guī)則,訪問授權(quán)的一個(gè)開放標(biāo)準(zhǔn)(OAuth

    2024年02月07日
    瀏覽(28)
  • 2023年Java 畢業(yè)設(shè)計(jì)怎么選題,有哪些注意事項(xiàng)

    2023年Java 畢業(yè)設(shè)計(jì)怎么選題,有哪些注意事項(xiàng)

    個(gè)人簡(jiǎn)介: 程序員徐師兄 ,7 年大廠程序員經(jīng)歷,擅長(zhǎng)Java、微信小程序、Python、Android等,大家有這一塊的問題可以一起交流! 各類成品java畢設(shè) 。javaweb,ssh,ssm,springboot等等項(xiàng)目框架,源碼豐富,歡迎咨詢。學(xué)習(xí)資料、程序開發(fā)、技術(shù)解答、代碼講解、文檔報(bào)告,需要請(qǐng)

    2024年02月11日
    瀏覽(27)
  • C# 獲取Windows系統(tǒng)版本注意事項(xiàng)

    C# 獲取Windows系統(tǒng)版本注意事項(xiàng)

    首先通過微軟官方文檔:https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version了解各個(gè)操作系統(tǒng)對(duì)應(yīng)的版本號(hào) ?下面介紹3種獲取版本號(hào)的方式及弊端 1.?Environment.OSVersion.Version 該方式適合.NET Framework,并且 必須添加應(yīng)用程序清單文件,并且需要把程序應(yīng)用程序清單文

    2024年02月10日
    瀏覽(25)
  • 【Jetpack】ViewModel 架構(gòu)組件 ( 視圖 View 和 數(shù)據(jù)模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代碼示例 | 使用注意事項(xiàng) )

    【Jetpack】ViewModel 架構(gòu)組件 ( 視圖 View 和 數(shù)據(jù)模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代碼示例 | 使用注意事項(xiàng) )

    Activity 遇到的問題 : 瞬態(tài)數(shù)據(jù)丟失 : 操作 Activity 時(shí) , 如果 屏幕 自動(dòng)旋轉(zhuǎn) , 當(dāng)前 Activity 組件會(huì) 執(zhí)行銷毀操作 , 并重新創(chuàng)建新的 Activity 組件 , 該操作會(huì) 導(dǎo)致 Activity 的 瞬態(tài)數(shù)據(jù) 丟失 ; 內(nèi)存泄漏 : 在 系統(tǒng)組件 如 Activity 中 , 啟動(dòng)了一個(gè)線程 , 在線程中執(zhí)行一系列操作 , 如果 A

    2024年01月25日
    瀏覽(19)
  • IVI車載信息娛樂系統(tǒng)的網(wǎng)絡(luò)安全注意事項(xiàng)

    當(dāng)今新車購(gòu)買者的重點(diǎn)更多地集中在 “ 智能座艙生態(tài)系統(tǒng)體驗(yàn)”上 ,而不是動(dòng)力和油耗等傳統(tǒng)功能。汽車行業(yè)已將全連接車載信息娛樂(IVI)系統(tǒng)所提供的觸摸屏顯示器、語音命令和娛樂功能作為優(yōu)先開發(fā)項(xiàng)。 越來越多的終端消費(fèi)者希望獲得 “數(shù)字生態(tài)系統(tǒng)”體驗(yàn)。“智

    2023年04月11日
    瀏覽(20)
  • 手機(jī)自動(dòng)直播系統(tǒng)源碼交付與代理加盟注意事項(xiàng)解析!

    手機(jī)自動(dòng)直播系統(tǒng)源碼交付與代理加盟注意事項(xiàng)解析!

    隨著直播行業(yè)的不斷發(fā)展, 手機(jī)自動(dòng)直播 已經(jīng)成為了人們生活中不可或缺的一部分。 手機(jī)無人直播軟件 成了香餑餑,各類手機(jī)實(shí)景直播APP大批量涌現(xiàn)。因?yàn)閯?chuàng)業(yè)和技術(shù)門檻低,市場(chǎng)需求高,所以成了最火熱創(chuàng)業(yè)賽道。那么如果是不懂技術(shù)的人群,想找一做 手機(jī)自動(dòng)直播系

    2024年02月07日
    瀏覽(16)
  • C語言嵌入式系統(tǒng)編程注意事項(xiàng)之內(nèi)存操作

    C語言嵌入式系統(tǒng)編程注意事項(xiàng)之內(nèi)存操作

    在嵌入式系統(tǒng)的編程中,常常要求在特定的內(nèi)存單元讀寫內(nèi)容,匯編有對(duì)應(yīng)的MOV指令,而除C/C++以外的其它編程語言基本沒有直接訪問絕對(duì)地址的能力 數(shù)據(jù)指針 在嵌入式系統(tǒng)的編程中,常常要求在特定的內(nèi)存單元讀寫內(nèi)容,匯編有對(duì)應(yīng)的MOV指令,而除C/C++以外的其它編程語言

    2024年02月09日
    瀏覽(25)
  • 綜合布線實(shí)例 醫(yī)院綜合布線系統(tǒng)建設(shè)時(shí)需要注意的事項(xiàng)

    在分析醫(yī)院信息網(wǎng)絡(luò)傳輸平臺(tái)特點(diǎn)的基礎(chǔ)上,提出醫(yī)院信息網(wǎng)絡(luò)傳輸平臺(tái)綜合布線系統(tǒng)規(guī)劃建設(shè)的幾點(diǎn)意見。即如何針對(duì)高度復(fù)雜的醫(yī)院信息網(wǎng)絡(luò)的高性能、高穩(wěn)定、高管理要求,通過選擇適合產(chǎn)品,構(gòu)建合理系統(tǒng)架構(gòu),使其達(dá)到高的容錯(cuò)性、可用性、可擴(kuò)展性,通過先進(jìn)的

    2024年02月07日
    瀏覽(28)
  • 銀河麒麟V10服務(wù)器系統(tǒng)安裝教程及注意事項(xiàng)

    銀河麒麟V10服務(wù)器系統(tǒng)安裝教程及注意事項(xiàng)

    1.引導(dǎo)安裝 從U盤引導(dǎo)安裝時(shí)首先進(jìn)入的是安裝引導(dǎo)頁面,如下圖: 使用向上方向鍵↑選擇“Install Kylin Linux Advanced Server V10”, 按進(jìn)入安裝過程。 2.歡迎界面 安裝過程首先進(jìn)入歡迎頁面【歡迎使用 Kylin Linux Advanced Server V1 0】,如下圖: 默認(rèn)采用【簡(jiǎn)體中文(中國(guó))】。確定 安

    2024年02月02日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包