1. 程式人生 > 實用技巧 >(精華)2020年10月7日 高併發高可用 非同步架構

(精華)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(讀寫分離)—高併發場景

  1. 分工明確,可以負責不同的部分

  2. 將業務上的命令和查詢的職責分離能夠提高系統的效能、可擴充套件性和安全性。並且在系統的演化中能夠保持高度的靈活性,能夠防止出現CRUD模式中,對查詢或者修改中的某一方進行改動,導致另一方出現問題的情況。

  3. 邏輯清晰,能夠看到系統中的那些行為或者操作導致了系統的狀態變化。

  4. 可以從資料驅動(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.比較推薦:缺點,非同步的程式碼同步化,可能會導致效能上的問題(降低效能)在這裡插入圖片描述