假設我們有以下應用程式,
- API app :負責服務用戶請求。
- 后端應用程式:負責處理長時間運行的任務的用戶請求。它更新資料庫(postgres)和分布式快取(Redis)的進度。
這兩個應用程式都是可擴展的服務。單個后端應用程式處理多個租戶,例如此處的客戶,但一個客戶僅分配給單個后端應用程式。
我有一個用例,我需要 API 層連接到處理該客戶的特定副本。我們有一個共同的模式嗎?
考慮的策略很少
- Pub/Sub:問題是我們想要同步保證回應,可能使用 Redis
- gRPC : 使用 POD IP 連接特定 pod 不是標準方式
- 通過向副本添加標簽并使用這些標簽在運行時創建服務。-- 看起來很有希望
讓我知道是否有這種通用模式或示例架構或執行此操作的標準方式?
注:[以上為模擬生產用例,名稱與實際用例有所變化]
uj5u.com熱心網友回復:
您的目標應該是保持您的服務無狀態,在 Kubernetes 環境中,由于作業節點維護,不知道何時一個 pod 可能被另一個 pod 替換。
如果您有長時間運行的任務無法在配置的寬限期內完成,以便在作業節點耗盡/撤離期間關閉 pod,您需要實施某種持久作業佇列,就像您在選項 1 中考慮的那樣。我建議您查看傳奇模式。
我們通常采用的另一種模式是讓作業服務將作業的當前狀態寫入資料庫,并讓客戶端每隔幾秒拉一次狀態。然而,這確實需要某種方式來處理可能被強制關閉的 pod 放棄的半完成作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/456904.html
標籤:Kubernetes 雷迪斯 grpc 端点