比方說,我有幾個微服務(REST API),問題是,如果一個服務是無法訪問的(我們稱之爲服務「A」)將其發送給服務「A」將被保存在臨時數據庫中的數據。服務完成後,數據將再次發送。 問題: 1.我應該每10秒鐘創建一次服務「A」服務來知道服務工作嗎?或者是否可以通過任務隊列來完成?有什麼建議麼?如何管理微服務失敗?
回答
輪詢是浪費帶寬。你想使用一個事務性的隊列。
擲所有出站隊列中的消息,並有一些其他的進程來處理消息。
這將如何工作 - 後您的過程從隊列中讀取,並試圖發送到REST服務:
- 如果它工作,提交事務(隊列)
- 如果不起作用,不要犯。開始延遲(分鐘,秒 - 你最清楚),直到你再次從隊列中讀取。
有多個維度對您的問題。首先,您需要考慮使用提供彈性的基礎架構並使用self healing
。這意味着您要部署容器集羣,所有容器均包含您的服務A.現在,您可以在服務前使用負載平衡器或API網關來分配呼叫/加載。它還會定期檢查您的服務的健康狀況。當它檢測到容器沒有正確響應時,它可以殺死容器並啓動另一個容器。這可以通過一個容器的基礎設施,如kubernetes /泊塢窗羣等
現在,這並不保護丟失任何請求提供。如果容器發生故障,那麼在故障與下一次健康檢查之間仍然會有很短的時間,因爲請求可能無法提供。在許多應用程序中,這是可以接受的,客戶端將重新請求並擊中另一個(健康容器)。如果您的應用程序要求絕對不會丟失請求,則必須將請求緩存在例如API網關中,並確保其保留到服務完成之前(也稱爲Circuit Breaker
)。 Netflix Zuul和Hystrix就是一個示例技術。使用這種內置容錯的關守可以進一步提高彈性。作爲一個方面說明 - 使用API網關還可以解決中央認證/授權,路由和監控問題。
的另一種方法來添加彈性/解耦是使用快速流/消息隊列,如Apache卡夫卡,用於記錄所有傳入消息,並且具有準備的消息處理器處理他們時。然後,訣竅是隻在您的請求完全投放時將消息標記爲已處理。這也有助於在由於服務無法實時處理大量請求而導致出現故障的情況下(Asynchronous Decoupling with Cache
)。
您可以使用斷路器模式,例如,來自netflix的hystrix斷路器。
有可能在超時或者當服務調用失敗或難以接近打開斷路器基。
服務可用時「A」應該解僱「就緒」事件。只聽那個,然後重新發送你的請求。
- 1. 微服務管理
- 2. 如何使用Mantl管理微服務?
- 3. 授權失敗/服務/管理
- 4. 微軟的SQL服務器管理
- 5. WordPress管理失敗
- 6. 如何使用微服務管理持續交付?
- 7. 如何管理微服務/容器/雲環境中的祕密?
- 8. 如何在沒有服務發現的情況下管理nodejs微服務?
- 9. 針對Azure服務管理API的Python HTTPS在Windows上失敗
- 10. 發佈管理服務器成功手動,但自動失敗
- 11. 通過AD Oauth的Azure服務管理API訪問失敗
- 12. 雲服務器上的Magento管理登錄失敗
- 13. Strongloop/Loopback - 開始 - 服務管理器啓動失敗
- 14. 連接驗證失敗的數據源 - ColdFusion服務器管理
- 15. 部署到服務器失敗,本地管理員
- 16. 在微服務架構中,微服務將如何服務?
- 17. 地理位置服務失敗 - 錯誤
- 18. Web服務對象失敗處理
- 19. 服務EventLogPermission失敗
- 20. Django管理認證失敗
- 21. Django站點管理失敗
- 22. android服務需要處理連接失敗 - 如何?
- 23. 微小的PHP腳本運行良好的開發服務器上,託管服務器上失敗
- 24. 微軟服務總線1.1配置嚮導失敗 - LDAP服務器不可用
- 25. 當微服務失敗時,JHipster不會向UI發送錯誤
- 26. 安裝失敗微軟SQL服務器2008 R2開發者版
- 27. 如何監控(微)服務?
- 28. 互通微服務 - 如何?
- 29. HttpModule ATL服務器服務InputStream失敗
- 30. 微服務:如何存儲許多微服務的源代碼?
爲什麼服務'A'不發送'ACK',以確保它已收到數據? – Xaqron