簡體   English   中英

存儲和轉發具有多個微服務實例的設計模式

[英]Store and forward design pattern with multiple instances of a microservice

我正在設計一個服務,它將接收只能執行一次的請求(由於唯一的id存在,可以多次接收)。

流程是:

外部世界 - > HTTP - > [一組Myservice實例] - > HTTP - >供應商服務

所以,我通過HTTP收到一堆請求,我希望進行一些轉換,檢查,將請求存儲在數據庫中,並通過HTTP發送給供應商服務。

我的問題是:

什么是在我的服務中實現存儲和轉發模式的有效方式,即接收請求並立即存儲它,因此立即將其應用到“外部世界”,然后在我自己的時間將其轉發到目標服務,重試盡可能多的根據需要的時間?


問題:

  • 如果myservice的一個實例在向供應商服務發送請求時發生故障,該怎么辦?
  • 如果有一堆未被轉發的請求,我將如何監控?
  • 如何避免另一個業務流程服務?
  • 如何避免另一個有效監視數據庫並轉發任何尚未轉發的請求的單實例服務。
  • 如何最小化外部依賴 - 例如我知道這里的某種隊列可能有助於解決這個問題,但我想知道我是否可以避免這種情況。

我建議不要使用NIH綜合症,並依賴於成熟的技術,這些技術可以滿足您的所有可靠性要求。

Cadence Workflow能夠以最小的努力支持您的用例。

Cadence提供了許多難以匹配構建自定義任務編排解決方案的功能:

  • 構建指數重試,具有無限的到期間隔
  • 失敗處理。 例如,如果在配置的間隔期間兩個更新都無法成功,則它允許執行通知另一個服務的任務。
  • 支持長時間運行的心跳操作
  • 能夠實現復雜的任務依賴性。 例如,在無法發生故障的情況下實現呼叫鏈接或補償邏輯( SAGA
  • 提供對當前更新狀態的完全可見性。 例如,當使用隊列時,您知道隊列中是否有一些消息,並且您需要額外的數據庫來跟蹤整體進度。 使用Cadence記錄每個事件。
  • 能夠取消飛行中的更新。
  • 分布式CRON支持

請參閱Cadence編程模型的演示文稿

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM