3 回答

TA貢獻1876條經驗 獲得超6個贊
一種常見的方法是 - 將所有異常報告給集中式異常跟蹤服務,該服務聚合和跟蹤異常并通知開發人員。
這種模式的好處是 - 更容易查看異常并跟蹤其解決方案。
這種模式的缺點是——異常跟蹤服務是額外的基礎設施。
在Careem 中,我們使用ELK 堆棧——我們使用 Logstash,它是一個服務器端數據處理管道,可以同時從所有微服務中攝取數據,對其進行轉換并將其發送到Elasticsearch。Kibana允許我們通過圖表和圖形來可視化數據,并具有廣泛的過濾、搜索等功能。
而且,如果是Microservice 1 --> Microservice 2 --> Microservice 3
同步的通信方式,你總是可以在Microservice 1
from Microservice 3
through 中生成和接收一些自定義的錯誤響應Microservice 2
。但是要獲得異常的完整堆棧跟蹤,最好將異常日志聚合在某個集中的地方。

TA貢獻1775條經驗 獲得超8個贊
微服務架構的特性之一是分離關注點,這意味著在理想情況下,微服務 1 不應該知道微服務 3 的存在。它適用于 M2 并且唯一重要的事情是它的響應是否有效。
無論如何,如果您想跟蹤呼叫,可能有多種方法:
當 M3 生成異常時,它會將其發送回 M2,M2 將其按原樣傳播到 M1(或在不丟失信息的情況下包裝它)。
另一種變體是對trace信息有單獨的存儲,所以M1會生成唯一的ID,發送給M2,M2發送給M3,表示是單次請求。然后每個服務使用這個 ID 來存儲有關執行或任何其他指標的信息(通過調用一些 X 服務)。

TA貢獻1818條經驗 獲得超8個贊
首先,您需要在開始處理的第一個服務時或之前分配一個唯一的請求 ID。
您如何為分布式跟蹤生成唯一的請求 ID?使其結合實例 ID/名稱和時間戳。
如果微服務正在同步通信,那么您可以將其作為 http 響應發送。但是如果微服務通過像 kafka 這樣的流異步通信,那么您可以使用流來提供回調機制。流可能是例外,請求 id 成為分區鍵。
添加回答
舉報