高併發的解決方案

2022-09-16 17:24:18 字數 4072 閱讀 6740

除了資料量大, 另乙個常見的問題就是併發量高, 很多架構就是針對這個問題設計出來的, 下面分別介紹。

1.應用和靜態資源分離

2.頁面快取

頁面快取是將應用生成的頁面快取起來, 這樣 就不 需要 每次 都 重新 生成 頁面 了, 從而 可以 節省 大量 cpu 資源, 如果 將 快取 的 頁面 放到 記憶體 中 速度 就 更快 了。 如果 使用 了 nginx 伺服器 就可以 使用 它 自帶 的 快取 功能, 當然 也可以 使用 專門 的 squid 伺服器。 頁面 快取 的 預設 失效 機制 一般 是按 快取 時間 處理 的, 當然 也可 以在 修改 資料 之後 手動 讓 相應 快取 失效。

有部分經常變化的資料的頁面怎麼使用頁面快取

頁面快取主要是使用在資料很少發生變化的頁面中, 但是 有很 多 頁面 是 大部分 資料 都很 少發 生 變化, 而 其中 有 很少 一部分 資料 變化 的 頻率 卻 非常 高, 比如, 乙個 顯示 文章 的 頁面 正常 來說 是 完全可以 靜態 化 的, 但是 如果 在 文章 後面 有「 頂」 和「踩」 的 功能 而且 顯示 的 有 相應 的 數量, 這個 資料 的 變化 頻率 就比 較高 了, 這就 會 影響 靜態 化, 在 電 商 系統 中 顯示 商品 詳情 的 頁面 中的 銷售 數量 也是 這種 情況, 對於 這個 問題 可以 先生 成 靜態 頁面 然後 使用 ajax 來 讀取 並修 改 相應 的 資料, 這樣 就可以 一舉兩得 了, 既可以 使用 頁面 快取 也可以 實時 顯示 一些 變化 頻率 高的 資料 了。

3.集群與分布式

集群和分布式處理都是使用多台伺服器進行處理的, 集群 是 每 臺 伺服器 都 具有 相同 的 功能, 處理 請求 時 呼叫 哪 臺 伺服器 都可以, 主要 起 分流 的 作用, 分布式 是將 不同 的 業務 放到 不同 的 伺服器 中, 處理 乙個 請求 可能 需要 用到 多台 伺服器, 這樣 就可以就可以 提高 乙個 請求 的 處理 速度, 而且 集群 和 分布式 也可以 同時 使用, 結構圖 如圖 1- 9 所示。

集群 有兩 個 方式: 一種 是 靜態 資源 集群。 另一種 是 應用 程式 集群。 靜態 資源 集群 比較 簡單, 而 應用 程式 集群 就有 點 複雜 了。 因為 應用 程式 在 處理 過程中 可能 會使 用到 一些 快取 的 資料, 如果 集群 就 需要 同步 這些 資料, 其中 最重要的 就是 session, session 同步 也是 應用 程式 集群 中非 常 核心 的 乙個 問題。 session 同步 有兩 種 處理 方式: 一種 是在 session 發生 變化 後 自動 同步 到 其他 伺服器, 另外 一種 方式 是 用 乙個 程式 統一 管理 session。 所有 集群 的 伺服器 都 使用 同乙個 session, tomcat 預設 使用 的 就是 第一 種 方式, 通過 簡單 的 配置 就可以 實現, 第二 種 方式 可以 使用 專門 的 伺服器 安裝 memcached 等 高效 的 快取 程式來 統一 管理 session, 然後 在 應用 程式 中 通過 重寫 request 並 覆蓋 getsession 方法 來 獲取 指定 伺服器 中的 session。 對於 集群 來說 還有 乙個 核心 的 問題 就是 負載 均衡, 也就是 接收 到 乙個 請求 後 具體 分配 到 哪個 伺服器 去 處理 的 問題, 這個 問題 可以 通過 軟體 處理 也可以 使用 專門 的 硬體( 如 f5) 解決。

另外還想到了 一種 思路 可以 簡單 地 解決 session 同步 的 問題, session 需要 同步 的 本質 原因 就是 要使 用 不同 的 伺服器給 同乙個 使用者 提供 服務, 如果 負載 均衡 在 分配 請求 時 可以 將同 乙個 使用者( 如按 ip) 分配 到 同 一台 伺服器 進行 處理 也就 不需要 session 同步 了, 而且 這種 方法 一般 也不 會對 負載 均衡 帶來 太大 的 問題, 如果 考慮到 穩定性, 為了 防止 有 機器 宕 機 後 丟失 資料 還可以 將 集群 的 伺服器 分成 多個 組, 然後 在 小 範圍 的 組( 如 2、 3 臺 伺服器) 內 同步 session。

架設 分布式 應用 程式 是一 件 非常 複雜 的 事情, session 同步 肯定 是 需要 的, 分布式 事務處理 和 各個 節點 之間 複雜 的 依賴 關係 也是 分布式 中非 常 複雜 的 問題, 如果 要 使用 分布式 一定 要做 好 足夠 的 準備。

4.反向**

反向**指的是客戶端直接訪問的伺服器並不 真正 提供 服務, 它 從 別的 伺服器 獲取 資源 然後 將 結果 返回 給使用者 的, 如圖 1- 10 所示。

反向**伺服器和**伺服器的區別

** 伺服器 的 作用 是 代我 們 獲取 想要 的 資源 然後 將 結果 返回 給我 們, 所要 獲取 的 資源 是我 們 主動 告訴 ** 伺服器 的, 比如,我們 想 訪問 facebook, 但是 直接 訪問 不了, 這時 就可以 讓 ** 伺服器 訪問, 然後 將 結果 返回 給我 們。

反向 ** 伺服器 是我 們 正常 訪問 一台 伺服器 的 時候, 伺服器 自己 呼叫 了 別的 伺服器 的 資源 並將 結果 返回 給我 們, 我們自己 並不 知道。

** 伺服器 是我 們 主動 使用 的, 是 為我 們 服務 的, 它不 需要 有 自己的 網域名稱; 反向 ** 伺服器 是 伺服器 自己 使用 的, 我們 並不 知道, 它有 自己的 網域名稱, 我們 訪問 它 跟 訪問 正常 的 ** 沒有 任何 區別。

反向 ** 伺服器 可以 和 實際 處理 請求 的 伺服器 在 同一 臺 主機 上, 而且 一台 反向 ** 伺服器 也可以 訪問 多台 實際 處理 請求的 伺服器。 反向 ** 伺服器 主要 有 三個 作用:

① 可以 作為 前端 伺服器 跟 實際 處理 請求 的 伺服器( 如 tomcat) 整合;

② 可 以用 做 負載 均衡;

③ ** 請求, 比如, 可以 將不 同型別 的 資源 請求 ** 到 不同 的 伺服器 去 處理, 可以 將 動態 資源 ** 到 tomcat、 php 等 動態 程式 而將 等 靜態 資源 的 請求 ** 到 靜態 資源 的 伺服器, 另外 也可 以在 url 位址 結構 發生 變化 後 將 新地 址 ** 到 原來 的 舊 位址 上。

5.cdn

cdn 其實 是一 種 特殊 的 集群 頁面 快取 伺服器, 它 和 普通 集群 的 多台 頁面 快取 伺服器 比 主要 是它 存放 的 位置 和 分配 請求 的 方式 有點 特殊。 cdn 的 伺服器 是 分布 在 全國各地 的, 當 接收 到 使用者 的 請求 後 會 將 請求 分配 到 最 合適 的 cdn 伺服器 節點 獲取 資料, 比如, 聯 通 的 使用者 會 分配 到 聯 通 的 節點, 電信 的 使用者 會 分配 到 電信 的 節點; 另外 還會 按照 地理 位置 進行 分配, 北京 的 使用者 會 分配 到 北京 的 節點, 上海 的 使用者 會 分配 到 上海 的 節點。 cdn 的 每個 節點 其實 就是 乙個 頁面 快取 伺服器, 如果 沒有 請求 資源 的 快取 就會 從 主 伺服器 獲取, 否則 直接 返回 快取 的 頁面。cdn 分配 請求 的 方式 比較 特殊, 它 並不是 使用 普通 的 負載 均衡 伺服器 來 分配 的, 而是 用 專門 的 cdn 網域名稱 解析 伺服器 在 解析 網域名稱 的 時候 就 分配 好的, 一般 的 做法 是在 isp 那裡 使用 cname 將 網域名稱 解析 到 乙個 特定 的 網域名稱, 然後 再將 解析 到 的 那個 網域名稱 用 專門 的 cdn 伺服器 解析 到 相應 的 cdn 節點, 結構圖 如圖 1- 11 所示。

第二 步 訪問 cdn 的 dns 伺服器 是因為 cname 記錄 的 目標 網域名稱 使用 ns 記錄 指向 了 cdn 的 dns 伺服器。 cdn 的 每個 節點 可能 也是集群 了 多台 伺服器。 cdn 的 原理 並不 複雜, 不過 如果 要 自己 去 架設 則需 要 投入 大量 的 資金, 現在 有 專門 的 cdn 服 務商, 可以 直接 購買 它們 的 服務。

來自:韓路彪 著. 看透spring mvc:源**分析與實踐 (web開發技術叢書)

高併發解決方案

時常看到高併發的問題,但高併發其實是最不需要考慮的東西。為何,他虛無縹緲,很少有 真的需要這些東西,而且其中很多技術,其實你已經在用了。有這個意識就夠了,不需要時刻盯著這個問題。只有很少的 真的能達到高併發。簡單做乙個歸納,從低成本 高效能和高擴張性的角度來說有如下處理方案 1 html靜態化 2 ...

高併發解決方案

將靜態資源分離到靜態站,對靜態資源的請求打到靜態站,增加動態站的請求處理量 頁面靜態化是將程式生成的頁面儲存起來,使用模板技術如freemarker和velocity生成靜態頁面 nginx快取頁面資訊,再次請求時直接從快取中獲取,不需要重新生成,頁面快取記憶體中,提高訪問速度 具有相同處理功能的伺...

高併發解決方案

秒殺場景一般會在電商 舉行一些活動或者節假日在12306 上搶票時遇到。對於電商 中一些稀缺或者 商品,電商 一般會在約定時間點對其進行限量銷售,因為這些商品的特殊性,會吸引大量使用者前來搶購,並且會在約定的時間點同時在秒殺頁面進行搶購。限流 鑑於只有少部分使用者能夠秒殺成功,所以要限制大部分流量,...