高并发高可靠性系统思考1
CPU不是瓶頸,網絡才是;
墨菲定律:任何事情都沒表面看起來那么簡單;會出錯的總會出錯;
可靠性:
集群:無狀態集群;有狀態集群,很難處理,盡量剝離出狀態部分做集中式部署,其他做無狀態部署;
mater/slave,極端情況下快速切換,恢復系統的可用性,軟件層面和硬件層面;
數據:raid磁盤陣列,雙寫(同步,可靠性高,影響效率;異步,可靠性低);
跨機房,跨網絡(電信,移動),跨交換機部署;
限流/流量切換:超過系統預估負載能力時,可選擇直接將部分請求丟棄,來保證部分用戶的適用,一般在硬件或http服務器層面實現。一個系統中,可能不同的部分,其訪問量是不同的,對于有極大瞬發訪問量的系統,應該將其獨立出來,防止瞬發高并發帶來的風險擴散到小流量系統上;如通過域名分離秒殺系統的商品頁,和普通商品頁;
異步:大流量系統調用小流量系統時,可將瞬發的大流量請求異步化,平攤到小流量系統各個時段。關鍵點,中間件,確保系統做出的保證一定會成功。猜測支付寶與銀行系統的交互即是此種方式;
系統化/服務化:將內聚性高的功能獨立出來單獨服務,專業的人做專業的事;系統間通過高性能web service框架通訊,有在保證功能、性能的情況下,極大提高系統可靠性;
降級:如果系統依賴了第三方服務,需要系統能在第三方服務宕機的情況下正常工作,盡量不做到對第三方系統的強依賴;
高并發:
單機:
應用層面的數據庫優化:是否做讀寫分離,是否做分布式;合理的表設計,盡量避免大數據量表間的關聯,可通過合理的數據冗余實現;合理區分冷熱數據的存儲;合理規劃索引,參考sql執行計劃,優化sql;純數據庫層面的,應該由相關專業人員完成;
業務層面:優化業務流程,使系統能通過更少的業務流程完成請求;
并發:大部分并發是可以通過合理的規劃,避免競態;無法避免的,盡量通過atomic包同步;
異步化:如果一個請求,需要非常長的業務流程才能完成,可將這一串業務流程分為必需和可延后的兩部分,將必需的處理完成后,將可延后流程交給中間件去異步執行,系統依據中間件的可靠性保證語義,預先返回業務流程正常完成;
動靜分離&異步:靜態內容可通過緩存,動態內容實時調用;異步加載耗時長的內容,加快請求相應速度;
流量前置:本質是通過如緩存業務結果、cdn 等手段,將本來需要n個業務流程完成的請求,由<n個的業務流程完成處理;
緩存:jvm緩存/集中式緩存,jvm緩存無網絡開銷,但其在集群、和功能等方面較弱。寬泛來說,緩存可看做流量前置的一種手段。關鍵點:高命中率,緩存失效策略(此處更多考慮系統能否容忍不一致的情況)。緩存策略,和失效策略會極大影響緩存命中率,緩存策略一般遵循局部性原理(2-8原則),根據具體的業務邏輯設計。緩存還可用作容災手段,緩存數據,在第三方系統異常的情況,作為數據的后備來源;
集群:盡量采用無狀態架構,即使必需有狀態,也盡量要將狀態剝離,做單獨的集中式部署。
負載均衡:f5,lvs。考慮使用的算法;lvs盡量采用響應流量由處理請求的服務器直接發送的方式,避免負載均衡成為系統的瓶頸;
分布式:沒實際經驗,感覺其規劃層面和編碼層面都比較難;
后續記錄在實際系統中應用;
轉載于:https://www.cnblogs.com/ze2200/p/4294322.html
總結
以上是生活随笔為你收集整理的高并发高可靠性系统思考1的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 比较规则
- 下一篇: Linux信号实践(3) --信号内核表
