簡體   English   中英

如何處理長時間運行不穩定的服務器

[英]How to handle long-running unstable server

我們有一個不穩定的舊單體系統,95% 的請求在 500 毫秒內處理,但另外 5% 需要 > 10 秒並且連接超時。 我想讓我們的服務更具彈性。 通信是通過 REST 完成的,架構是這樣的

我們目前的方法是使用具有指數退避重試機制的異步 http 客戶端。 但是隨着流量的增加,這會導致性能問題

我的想法是在 S 中進行同步 http 調用,超時為 500ms 和回退方法,該方法將任務添加到隊列中以便將來重試 http 請求,同時向 C 返回 202 以及檢查狀態的鏈接任務類似於/queue/task-123 我知道我需要讓 S 暴露服務給 C 冪等,所以每次我收到來自 C 的新請求時我都必須檢查隊列以確保我沒有重復的任務。

問題:

  1. 有沒有更好的方法來解決我的問題?
  2. 隊列中的任務是處理 REST 端點中重試的最佳方式嗎?

我們的堆棧:Java 使用 Spring Boot 和隊列我認為 RabbitMQ

讓對 S 的請求為 AsyncHttpResponse 創建 Futures,並將它們發送到一個線程池足夠容納您的負載的 Executor,但不要高到會淹沒您的 Monolith。 這樣當事情開始失敗時,它不會滾雪球在你身上,其他請求可以排隊。 您仍然可以在此模型中使用重試模型,但將其控制在未來之外,以便在重試之前允許成功的請求進入。

暫無
暫無

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

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