(精華)2020年10月7日 高併發高可用 非同步架構
同步架構與非同步架構
背景
把智慧系統比喻成KFC營業廳,處理器是視窗和視窗後面的服務員(把一個視窗當作一個核心),指令集是後面排隊的人,視窗是資料吞吐量。 當中午就餐人多的時候,一個視窗肯定忙不過來, 這時候就需要增加視窗
解決方案
1.在視窗後面增加多個服務員,分擔一下工作
2.新增多個視窗
分析
方案一就是非同步架構,方案二同步架構
一個視窗是不可能比上多個視窗的工作效率
對比結論
優點:非同步架構設計簡單,實現方便。
缺點:效能低,吞吐量差。
總結:如果對處理併發量不高的系統。優先選擇非同步架構!!!
非同步能夠給架構帶來什麼
優化前端,主動把控與使用者的會話,讓使用者體驗更好。
高併發處理,能夠比較簡單實現負載均,案例:12306
提供架構容錯能力。高可用
系統程式碼更加安全,不用使用多執行緒,所以也會碰到執行緒死鎖等問題,對資訊同步也更加方便。
非同步–高併發場景
非同步程式設計—給我們帶來什麼
async/await
非阻塞I/O可以使CPU與I/O並不依賴,可以更大程度的利用資源
對於網路應用,並行帶來的優勢更大,利於分散式和雲的應用
非同步,自動多執行緒,主動處理軟體架構問題,如:高併發,高可用。
非同步—高可用場景
高可用實現
反向代理/負載均衡,實現網站的高可用
Processor,通過重複Worker實現高可用的架構
微服務-高併發/高可用實現
前端MQ訂閱,後端Processer呼叫微服務實現
高併發,利用閘道器,很方便的進行服務分流,eg:Docker
高可用,MQ防止資料丟失,結合線程池/反向代理閘道器[k8s]外掛,實現微服務的高可用
快取—給我們帶來什麼
提高資料使用效能和安全……
高可用,實現記憶體資料的高可用,結合nginx等,可以很方便的實現軟體高可用
高併發,Redis資料多節點異地儲存,可以實現多節點分流
微服務-高併發/高可用場景
前端MQ訂閱,後端Processer呼叫微服務實現
高併發,利用閘道器,很方便的進行服務分流,eg:Docker
高可用,MQ防止資料丟失,結合線程池/反向代理閘道器[k8s]外掛,實現微服務的高可用
MQ–高可用/高併發
高可用
高可用,服務的持續響應
解耦,MQ的訊息生產者和消費者互相不關心對方是否存在
併發,MQ有生產者叢集和消費者叢集,所以客戶端是億級使用者時,他們都是並行的。從而大大提升響應速度。
削峰,因為MQ能儲存的訊息量很大,所以他可以把大量的訊息請求先存下了,然後再併發的方式慢慢處理。
CQRS(讀寫分離)—高併發場景
-
分工明確,可以負責不同的部分
-
將業務上的命令和查詢的職責分離能夠提高系統的效能、可擴充套件性和安全性。並且在系統的演化中能夠保持高度的靈活性,能夠防止出現CRUD模式中,對查詢或者修改中的某一方進行改動,導致另一方出現問題的情況。
-
邏輯清晰,能夠看到系統中的那些行為或者操作導致了系統的狀態變化。
-
可以從資料驅動(Data-Driven) 轉到任務驅動(Task-Driven)以及事件驅動(Event-Driven)
Kafka—阿里雲PAAS產品
訊息佇列Kafka版是阿里雲提供的分散式、高吞吐、可擴充套件的訊息佇列服務。訊息佇列Kafka版廣泛用於日誌收集、監控資料聚合、流式資料處理、線上和離線分析等大資料領域,已成為大資料生態中不可或缺的部分。 https://help.aliyun.com/document_detail/68151.html?spm=5176.167616.1288903.btn3.537a5a1cQ3KmhQ
高容量儲存:能在商業硬體上儲存高容量的資料,實現可橫向擴充套件的分散式系統。
一對多消費模型:“釋出/訂閱”模型,支援同份資料集能同時被消費多次。
同時支援實時和批處理:支援本地資料持久化和Page Cache,在無效能損耗的情況下能同時傳送訊息到實時和批處理的消費者
資料庫—高可用/併發
資料庫:資料持續化,把記憶體資料儲存為檔案【系列化持久化】 儲存資料,保障資料安全,傳輸
高併發給它帶來那些調整:資源【磁碟/cpu/記憶體】,I/O Buffer 解決方案:讀寫分離【釋出訂閱】分庫分表【入門級】,
高可用給它帶來什麼問題:資料庫宕機危機 解決方案:主從熱備,定時BackUp【入門們】 周全量備份,週一對資料庫做一個全面備份,儲存到其他OSS 日增量備份,每天相對於前天,對比資料做一個增量備份。儲存到其他OSS
非同步架構常見的坑
1.複雜度變高,程式之間來回回撥,工程師剛入手時,除錯或解決問題很不方便 比較合適的方法,多用中介軟體,Redis/MQ/Kafla/DB,少用多執行緒/程式回撥
2.時間成本 對實時性比較強的程式,有很大時間消耗。不建議使用非同步程式設計
3.比較推薦:缺點,非同步的程式碼同步化,可能會導致效能上的問題(降低效能)