服務架構:事件驅動架構

事件驅動架構是由生產者和消費者組成,生產者負責生產事件,消費者監聽並消費事件。

事件驅動架構

事件分發以近實時的方式進行,所以當事件產生時,消費者可以立即做出應對。

還有一種模式,多個消費者是競爭的關係,它們從同一個隊列消費,不出現錯誤的情況下每個事件都只被處理一次。

另外,在某些系統中,事件導入的吞吐量要求也很高,比如 IoT 系統。

事件驅動架構可以通過發佈 / 訂閱模型或事件流模型來實現:

在事件的消費上,也可以有一些略微不同的方式:

事件通常來源於外部系統,比如 IoT 中的物理設備、互聯網用戶的端上。我們在設計時,必須認真評估總體的數據量和吞吐量,以保證系統能支撐這個量級。

在上面的流程圖中,右側的三個格子表示三種類型的消費者,每種類型的消費者下面有多個實例。在實際場景中,出於容災的目的,多個消費者實例的情況非常普遍。爲了保證事件處理的吞吐量,多個實例也是有必要的。

在處理事件時,一個消費者實例可以創建多個線程。這也能提高處理的吞吐量,不過事件被處理的順序就亂了,業務上可能無法接受;另外多線程處理也很難保證 exactly-once 語義。

應用場景

架構優勢

有哪些挑戰

補充說明

在設計系統時,我們通常需要考慮單條消息的大小,它對系統的性能和金錢成本影響都非常大。如果走兩個極端的話,可以是:

如果將所有需要的信息都放到單個事件裏,處理起來會很方便,並且能夠避免額外的信息查詢;

如果將非常少的信息放到單個事件裏,比如 ID 字段,那麼會節省大量傳輸數據的時間和金錢成本,但其他信息需要訪問其他服務才能獲取到;

這其中的利益權衡,看自己的業務來定了。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/xBTClzBfG9HV-k8OfuJcLw