java 高并發設計

?文章目錄

目錄

?文章目錄

前言

一、通用設計

一、動靜分離

二、數據庫獨立部署

三、問題

1.高并發通用設計方法

2.高并發系統的拆分順序

二、計算資源高并發

三、網絡資源高并發

超高性能場景(10萬+ QPS)

中小規模場景(5萬 QPS以下)

四、數據庫高并發

五、



前言

高并發設計可以分為5個部分1.通用設計

1.

面對100萬級別的QPS該怎么設計?

請看以下步驟


一、通用設計

一、動靜分離

動靜分離是高并發的第一步

最開始的項目我們都是要apache tomcat 來承載動態(java http請求)和靜態文件(將html、css等放入static文件),而使用動靜分離是指的將靜態文件(前端預先加載到頁面上的內容)放入nginx中

為什么用nginx,nginx處理性能大概是tomcat的4倍

使用云服務?

CDN(Content Delivery Network,內容分發網絡)?是優化靜態資源訪問速度和降低服務器負載的核心手段

將全部資源交給云服務廠商的CDN來承載,還以獲得90%的CPU節省

對比

場景CDN 直接承載Nginx + CDN
架構復雜度無需服務器,純云服務需維護 Nginx 服務器
成本按需付費(存儲+流量)服務器固定成本 + CDN 流量成本
擴展性自動彈性擴展需手動擴容服務器
適用場景純靜態資源

需動態生成內容(如縮略圖)

二、數據庫獨立部署

如果使用nginx來承載靜態資源之后,云主機還是扛不住流量,那么這時候就應該再用一臺主機來:專門跑數據庫,甚至有些數據庫是部署到多臺服務器上

一般來說我們不會將項目(后端代碼)和數據庫部署到同一臺服務器上,這種是典型的災難架構

這里建議直接使用云服務商的云數據庫,因為一旦你的qps超過1000,自建數據庫就很難滿足要求了,如果搭建集群,小公司成本又太高,而直接使用云數據庫就不會出現這種問題,他會自動調整資源



三、問題

1.高并發通用設計方法

高并發系統遇見瓶頸,一定是某個資源點到達極限,例如數據庫,服務器,帶寬等,因此需要找到這個受限點,拆分并解決

1.負載均衡:分散請求到多個服務器,減少單臺服務器壓力,例如nginx

2.緩存技術:將經常訪問的數據放入緩存(內存中),減少數據庫壓力,并提高系統響應速度,例如redis

3.異步處理:多線程方式,讓任務在后臺處理,而主線程先返回。提高系統響應速度,釋放服務器占用線程

4.消息隊列:將龐大的任務,放入消息隊列,由另一個線程或者多個線程來處理,實現異步,削峰,解耦等作用

5.數據庫優化:優化SQL,設置數據庫集群都可以提高數據庫響應速度,從而提高系統響應

6.水平擴展:拆解系統,分別部署到不同服務器,來減少單臺服務器cpu壓力

7.服務隔離:高并發系統中,不同的模塊或者說平臺,一般都有隔離開,保證不同服務之間互不影響

2.高并發系統的拆分順序

高并發系統的拆分應該從靜態資源開始拆分,然后在到數據庫和服務器機器分離,然后再設計負載均衡和分布式架構,最后再利用數據庫集群和分布式數據庫來提升數據庫能力,期次再考慮其他優化手段

1.靜態資源拆分:將原本后端項目集成的靜態資源,拆分到nginx或者cdn中進行存儲

2.數據庫和后端服務機器分離:將數據庫和后端服務放到不同的機器上,這樣能減少數據庫壓力,并提高擴展能力

3.負載均衡和分布式架構:通過負載均衡將同一個項目部署到多臺機器(也就是多個實例,換句話來說就是用戶的請求分發到不同的機器上),提高系統處理能力,同時,采用分布式架構(將系統拆分成獨立模塊,再),利用多個機器同時進行服務,進一步提高系統并行能力

4.數據庫集群和分布式數據庫:數據庫集群是將多個數據庫實例分布到不同的服務器上,通過數據同步和故障轉移機制,保證數據庫的高可用,分布式數據庫是將數據分散到多個節點上,每個數據只負責部分數據的存儲和查詢,從而提高整個系統的讀寫能力

5.基于地域進行數據庫拆分:

3.靜態資源如何加速:

1.高性能web服務器

2.CDN服務:將靜態資源分散到全國,用戶就能從最近的服務器獲取消息,減少延遲

二、計算資源高并發

目標:拆分計算單點,提升并行能力。

主要是部署方法的轉變?物理機 → 虛擬機 → 容器化,解決計算資源利用率與彈性問題。

階段核心方案解決的問題瓶頸
單服務部署單機運行所有服務簡單部署資源爭搶(CPU/內存耗盡)
虛擬機部署VMware/KVM 虛擬化資源隔離,多應用共存虛擬機啟動慢(分鐘級)
容器化Docker + Kubernetes進程級隔離,秒級啟動內核兼容性

三、網絡資源高并發

這里大致總結:就是在7層網絡模型上進行高并發的設計

首先gateway或者nginx單臺支持的最大qps有限,通常32核的支持萬級qps,那么怎么承擔上百萬QPS呢,這時候就需要在傳輸層搭建服務LVS,這里能支持百萬級別QPS

層級OSI模型代表組件核心職責
數據鏈路層L2 (鏈路層)F5 (部分功能)MAC地址轉發、VLAN隔離
網絡層L3 (網絡層)LVS、F5 (IP轉發)IP包路由、四層負載均衡(TCP)
傳輸層L4 (傳輸層)LVS、HAProxyTCP/UDP連接分發
應用層L7 (應用層)Nginx/Kong/GatewayHTTP協議解析、動態路由

通過分層架構:

  1. L4 負載層:用低成本解決海量連接分發(LVS/硬件)

  2. L7 網關層:專注業務協議處理(Kong/Nginx)

  3. 業務層:無網絡負擔,專注計算

超高性能場景(10萬+ QPS)

  • 優勢

    • Nginx專做TLS解密(C語言極致性能)

    • Gateway專注業務路由(無需處理加密)

    • 整體吞吐量提升2倍+

實例:加入現在目標6萬QPS

中小規模場景(5萬 QPS以下)

下面是百萬QPS的真實案例

層級組件配置數量總處理能力
網絡入口LVS + DPDK64核/128G/100G網卡4臺400萬 CPS
TLS卸載Nginx + 加速卡32核/64G/SSL卡20臺120萬 TPS
業務網關Rust網關(io_uring)32核/64G30臺450萬 QPS
微服務商品服務16核/32G50臺200萬 QPS

四、數據庫高并發

核心挑戰:數據庫是“最難以解決的單點”,因其需保證 ACID 事務。

  • 存儲技術演進

    • 集中式存儲(如 EMC):硬件級高可用,但成本極高(單 SAN 交換機超 40 萬元)。

    • 分布式存儲:通過 x86 服務器集群構建存儲池,依賴 PCIe 5.0 和 CXL 協議提升 IO 性能,降低成本。

  • 數據庫架構優化

    • 緩存策略:Redis 緩存熱點數據,OceanBase 等分布式數據庫采用“內存全緩存 + Redo Log 落盤”方案。

    • 分布式方案

      • TiDB(計算存儲分離)、ClickHouse(列存儲)解決海量數據分析瓶頸。

      • 分庫分表 + Paxos 協議保障數據一致性與高可用。

為了提高數據庫讀寫能力,搭建讀寫分離1主多從,提高讀能力,那么寫能力呢,寫是往主節點寫入的,這時候就需要分布式架構了

第一代分布式架構 使用中間件 sharding-jdbc,但是可以說是屬于應用層面不,不屬于通用數據庫范疇

第二代,出現了kv型數據庫,nosql(redis)KV 數據庫結構簡單,性能優異,擴展性無敵,但是它只能作為核心數據庫的高性能補充

第三個時代,newSQL,目前比較常見的 NewSQL 有 ClustrixDB、NuoDB、VoltDB,國內的 TiDB 和 OceanBase 也屬于 NewSQL

第四個時代,云上數據庫 例如阿里的PolarDB?

緩存和隊列

緩存(redis)消讀的峰,而隊列(rockemq,kafka)消寫的峰

五、

持續更新。。。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84727.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker compose搭建elk 8.6.2

環境搭建 選用版本是比較新的版本 (ELK) 8.6.2 ,elk的環境做的還是比較好的又windows和Linux多個版本,并且開箱即用。本地直接下載官方軟件也是可以的。最近在學習docker compose,就使用這個環境搭建一下。 前置條件 安裝好docker和 docke…

Springboot3+的id字符串轉化問題

以下是純后端實現 Long/BigInteger ID 轉為 JSON 字符串 的詳細配置方案&#xff0c;基于 Spring Boot 3 和 SpringDoc (OpenAPI) 最新實踐 ? 1. 添加依賴 確保你的 pom.xml&#xff08;或 Gradle&#xff09;中包含&#xff1a; <dependency><groupId>com.fast…

C#學習第30天: 匹配模式

模式匹配&#xff08;Pattern Matching&#xff09;是 C# 中一個強大且靈活的特性&#xff0c;允許開發者以更直觀的方式檢查數據結構&#xff0c;并根據特定模式執行操作。 隨著 C# 語言版本的發展&#xff0c;模式匹配的功能越來越豐富&#xff0c;為處理復雜數據提供了極大…

SQL進階之旅 Day 29:NoSQL結合使用策略

【SQL進階之旅 Day 29】NoSQL結合使用策略 文章簡述 隨著數據量的激增和業務場景的復雜化&#xff0c;傳統關系型數據庫在某些場景下已難以滿足高性能、高擴展性和靈活數據結構的需求。NoSQL&#xff08;非關系型數據庫&#xff09;以其高可擴展性、靈活的數據模型和分布式架構…

PostgreSQL 對 IPv6 的支持情況

PostgreSQL 對 IPv6 的支持情況 PostgreSQL 全面支持 IPv6 網絡協議&#xff0c;包括連接、存儲和操作 IPv6 地址。以下是詳細說明&#xff1a; 一、網絡連接支持 1. 監聽 IPv6 連接 在 postgresql.conf 中配置&#xff1a; listen_addresses 0.0.0.0,:: # 監聽所有IPv4…

模板字符串使用點擊事件【VUE3】

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 項目中使用模板字符串的時候很多&#xff0c;有些時候需要再模板字符串中使用點擊事件&#xff0c;那么在模板字符串中可以使用點擊事件么&#xff1f;如果這個點擊事件需要傳參呢&#xff1f; 答案…

AI——DeepSeek+LangChain+streamlit 實現智能汽車維修服務

效果圖 分析流程 代碼實現 廢話少說&#xff0c;直接上代碼 from langchain_core.language_models.llms import BaseLLM from langchain_core.outputs import Generation, LLMResult from pydantic.v1 import Field, validator from typing import Any, Dict, List, Optional…

《C++ 繼承》

目錄 繼承的定義 繼承類模板 派生類和基類之前的轉換 隱藏 派生類的默認成員函數 不能被繼承的類 繼承中的友元和靜態成員 繼承模型 繼承的定義 繼承的本質是一種復用。規定Person類為基類&#xff0c;Student類為派生類 。 繼承方式分為public繼承&#xff0c;prote…

金蝶K3 ERP 跨網段訪問服務器卡頓問題排查和解決方法

我一朋友公司反應&#xff0c;公司網絡卡頓&#xff0c;測試掉包嚴重&#xff0c;抓包wireshark測試&#xff0c;發現arp包有大量mac欺騙&#xff0c;因為公司有幾百臺電腦&#xff0c;所以建議更換了三層交換機&#xff0c;劃分了vlan&#xff0c;這樣有效的避免了網絡風暴等&…

無需安裝!在線數據庫工具 :實戰 SQL 語句經典案例

在數字化時代&#xff0c;SQL&#xff08;結構化查詢語言&#xff09;已成為數據從業者、開發人員乃至業務分析人員必備的核心技能。無論是處理日常數據報表&#xff0c;還是應對復雜的業務邏輯&#xff0c;SQL 都能高效實現數據的查詢、操作與分析。本文將通過經典的 SQL 練習…

如何在網頁里填寫 PDF下拉框

對于PDF 開發者或網頁開發者來說&#xff0c;讓用戶在網站上填寫 PDF 下拉框&#xff08;Combo Box&#xff09;是一個棘手的問題。因為 PDF 并不是一種原生的 Web 格式&#xff0c;瀏覽器通常不允許用戶與 PDF 下拉框進行交互。 那么&#xff0c;如何讓用戶在 HTML 中填寫 PD…

.Net 優秀框架 ABP全面詳解

文章目錄 第一部分&#xff1a;ABP框架概述與核心架構1.1 ABP框架簡介1.2 ABP框架架構解析1.2.1 表現層(Presentation Layer)1.2.2 分布式服務層(Distributed Service Layer)1.2.3 應用層(Application Layer)1.2.4 領域層(Domain Layer)1.2.5 基礎設施層(Infrastructure Layer)…

力扣-198.打家劫舍

題目描述 你是一個專業的小偷&#xff0c;計劃偷竊沿街的房屋。每間房內都藏有一定的現金&#xff0c;影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統&#xff0c;如果兩間相鄰的房屋在同一晚上被小偷闖入&#xff0c;系統會自動報警。 給定一個代表每個房屋…

windows 安裝vllm cuda版本

windows 安裝cuda版本 查看window cuda版本 nvidia-smi vllm 獲取鏡像,此版本需要cuda 版本12.8 或以上 docker pull vllm/vllm-openai:latest下載模型 git lfs installcd e:\ai mkdir vllm\models\qwen2cd vllm\models#通過git下載git clone https://www.modelscope.c…

Node.js特訓專欄-基礎篇:1. Node.js環境搭建與項目初始化詳細指南

我將為你詳細講解 Node.js 環境搭建與項目初始化的步驟&#xff0c;包含常見問題解決和最佳實踐&#xff0c;幫助你快速上手。 詳細步驟說明 1. 環境搭建 Windows用戶&#xff1a; 訪問Node.js官網(https://nodejs.org)下載LTS版本安裝包&#xff08;推薦長期支持版&#xf…

13.安卓逆向2-frida hook技術-HookJava構造方法

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

php基礎:常見函數

內建函數 文章目錄 內建函數1、文件操作函數&#xff1a;2、代碼執行函數&#xff1a;3、反序列化函數&#xff1a;4、數據庫操作函數&#xff1a;5、類型轉換與比較函數&#xff1a;6、其他常見函數&#xff1a; 1、文件操作函數&#xff1a; include(): 導入并執行指定的 PHP…

教程:PyCharm 中搭建多級隔離的 Poetry 環境(從 Anaconda 到項目專屬.venv)

核心思維&#xff1a;為什么需要 “多級隔離”&#xff1f; 在復雜項目中&#xff0c;環境沖突是最棘手的問題&#xff08;比如系統 Python 版本不同、依賴包版本沖突&#xff09;。通過 “Anaconda 虛擬環境 → 項目 Poetry 環境 → 工具級隔離” 的三層架構&#xff0c;實現…

Rollup vs Webpack 深度對比:前端構建工具終極指南

前端工程領域始終面臨一個根本選擇&#xff1a;如何在模塊化編碼規范與工程化構建效率之間取得最佳平衡。Rollup與Webpack分別代表著兩種不同維度的解決方案&#xff0c;本文將揭示它們的真實應用場景與核心差異。 一、核心差異全景圖&#xff08;附最新對比&#xff09; 核心能…

Module Federation 和 Native Federation 的比較

前言 Module Federation 是 Webpack 5 引入的微前端架構方案&#xff0c;允許不同獨立構建的應用在運行時動態共享模塊。 Native Federation 是 Angular 官方基于 Module Federation 理念實現的專為 Angular 優化的微前端方案。 概念解析 Module Federation (模塊聯邦) Modul…