高併發系統主要是為了解決在有限的資源下解決最核心的問題,**並發現以後可能會出現的問題。
高併發原則一般遵守如下幾個設計原則:
1.無狀態:指的是應用在處理業務邏輯期間盡量減少鎖的使用、降低網路通訊延遲、無資料持久化操作等,以此來增加應用系統的效能。
2.拆分:大而全的系統,可根據實際的訪問量來拆分系統,來實現流量分片,提高併發能力;主要維度有系統(商品系統,訂單系統,購物車系統,結算系統等),功能(優惠劵建立,優惠劵核銷等),模組(web,service,dao等),aop(cdn系統,頁面渲染系統),讀寫(商品讀服務,可使用快取;寫服務,可使用分庫分表,資料聚合儲存等)。
3.服務化:將程序內服務統一封裝對外提供,服務分組,隔離請求,提高系統併發能力。
4.資料異構:實現資料的自我控制,當其他系統出現問題時不影響自己的系統,分資料異構和資料閉環(包括異構,聚合,前端展示);異構是指多資料來源原子化儲存,聚合是指多請求資料聚合成乙個資料進行響應,前端展示是指減少介面的呼叫次數能拿到更多的資料。
5.訊息佇列:作用是服務解耦,非同步處理,流量削峰/緩衝等;訊息生產時可能會失敗,通過日誌,報警等監控;訊息接收時可能會重複,超時等,通過業務層的防重處理,超時重試機制等處理重複。訊息佇列可以作用於大流量緩衝的系統中,通過保證最終一致性來保證系統一致性;在使用訊息非同步機制的場景下,通過資料校對和修正來保證資料的一致性和完整性。
7.併發化:如乙個讀服務中,兩個不相互依賴的資料可以併發進行拉取,併發數視cpu數量,併發型別決定。
高可用原則一般遵守如下幾個設計原則:
1.降級處理:防止流量高峰導致系統不可用,此時可切換降級服務或者備用服務來保證系統的可用性。
(1)降級開關集中化處理:通過推送機制,將開關推送到各個服務中。
(2)開關前置化:可將開關前置到nginx,是請求盡量不回流應用層。
(3)多級讀服務降級:服務呼叫資料不通過資料庫,通過本地快取,分布式快取,預設降級資料等讀取。
(4)業務降級:將一些次要的系統服務延遲,保障核心業務功能,保證最終一致性,從而保證系統可用。
2.限流:防止惡意請求流量,惡意攻擊,防止請求流量超出系統峰值等;可使用快取,nginx的limit配置,nginx的deny配置等限制流量穿透到應用層。
3.切流量:主要目的是遮蔽異常的服務,可通過dns切換入口,通過lvs/haproxy切換接入層,通過nginx切換應用層等方式來實現可用性。
業務設計的一些原則:
1.防重設計,冪等設計,流程自定義,狀態與狀態機,後台系統審批化,備份,文件及注釋,後台操作可記錄。
高併發系統設計 限流
前面學習過的熔斷和降級都是通過暫時關閉某些非核心服務或者元件來保護核心系統的可用性。但是並不是所有的場景下都可以使用熔斷降級的策略,例如當核心服務產生比較大的影響時,總不能把核心服務進行熔斷與降級,些時一般採用限流方案來進行保護。限流指的是通過限制到達系統的併發請求數量,保證系統能夠正常響應部分使用...
面試 高併發系統設計
在高併發的情景下進行系統設計,可以分為以下 6 點 快取mq 分庫分表 讀寫分離 elasticsearch 將乙個系統拆分為多個子系統,用 rpc 來搞。然後每個系統連乙個資料庫,這樣本來就乙個庫,現在多個資料庫,不也可以扛高併發麼。大部分的高併發場景,都是讀多寫少,那你完全可以在資料庫和快取裡都...
高併發系統設計方法
在網際網路時代,併發,高併發通常是指併發訪問。也就是在某個時間點,有多少個訪問同時到來。1 qps 每秒查詢率 每秒鐘請求或者查詢的數量,在網際網路領域,指每秒響應請求數 指http請求 2 pv page view 綜合瀏覽量,即頁面瀏覽量或者點選量,乙個訪客在24小時內訪問的頁面數量 3 吞吐量...