分布式事件匯流排首先要解決如下幾個問題:
1.如何傳送事件物件給遠端訂閱者伺服器..
2.需要知道向哪些伺服器發布事件,而不是所有伺服器都發布,因為有些伺服器沒有訂閱這種事件
3.伺服器接受到一種事件時,要知道該種事件在本伺服器內有哪些監聽物件在監聽,從而好呼叫
4.系統執行過程中,新增監聽和去除監聽乙個事件時,如何通知發布者來同步本地的資訊
5.監聽者在處理事件時時間很長怎麼辦
6.某台訂閱伺服器不可用怎麼辦
7.如何監控事件匯流排的效率?
答:1.每台伺服器 都起乙個事件接受服務,以接受傳送者 發過來的事件。事件傳送者在傳送事件時,呼叫該遠端服務來傳送事件。
2.每台伺服器都維護每個事件型別對應遠端事件接受服務的關係記錄。 發起事件時查詢該對應關係就能找到有哪些遠端機器在訂閱該型別事件了。
3.應用在訂閱乙個事件時,會將該事件對應監聽物件儲存在自己機器的快取中。當事件接受服務接受到了遠端(或本地)的事件時,再查詢對應關係
將事件物件作為引數傳給其監聽物件即可.
4.部署乙個master伺服器,由master維護事件與監聽物件的關係的最新版本, 當新增/去除監聽時,呼叫master的更新服務。master更新完後,向所有註冊的node節點傳送
更新事件,所有node都監聽此類事件,收到事件後立馬和伺服器最新版本對比,使自己的快取列表和master同步
5.事件接受到事件後,將事件統一放到阻塞佇列中,對每個監聽者,都對應乙個執行緒來處理,這樣即使乙個監聽者有問題,也不會影響到其他監聽者接受事件
6.可以採取重試3次,一般都會由master節點將其節點所有服務解除掉
分布式 分布式鎖
本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...
分布式架構問題
如此多的服務,如何管理呼叫位址 服務掛了,如何解決?備份方案,應急處理機制 高併發,高可用,高效能 在後台 n 個服務和 ui 之間加乙個 或者叫 api gateway 為前台 通常是移動應用 提供後台服務的聚合,提供乙個統一的服務出口,解除他們之間的耦合,不過 api gateway 也有可能成...