[英]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 的新請求時我都必須檢查隊列以確保我沒有重復的任務。
問題:
我們的堆棧:Java 使用 Spring Boot 和隊列我認為 RabbitMQ
讓對 S 的請求為 AsyncHttpResponse 創建 Futures,並將它們發送到一個線程池足夠容納您的負載的 Executor,但不要高到會淹沒您的 Monolith。 這樣當事情開始失敗時,它不會滾雪球在你身上,其他請求可以排隊。 您仍然可以在此模型中使用重試模型,但將其控制在未來之外,以便在重試之前允許成功的請求進入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.