我在 docker 映像中有一個機器學習模型。我將 docker 鏡像推送到 google 容器注冊表,然后將其部署到 Kubernetes pod 中。有一個 fastapi 應用程式在埠 8000 上運行,并且這個 Fastapi 端點是公共的(呼叫它mymodel:8000)。
fastapi的結構是:
app.get("/homepage")
asynd def get_homepage()
app.get("/model):
aysnc def get_modelpage()
app.post("/model"):
async def get_results(query: Form(...))
用戶可以提出查詢并提交它們,并從 docker 內運行的機器學習模型中獲取結果。我想限制所有用戶組合進行查詢的次數。因此,如果查詢限制為 100,則所有用戶加起來總共只能進行 100 次查詢。
我想到了一種方法來做到這一點:
存盤一個資料庫,該資料庫存盤呼叫 GET 和 POST 方法的次數。一旦呼叫 POST 的總次數超過限制,就停止接受更多查詢。
有沒有使用 Kubernetes 限制的替代方法?比如我可以定義一個limit_api_calls這樣的總mymodel:8000訪問次數最大等于limit_api_calls。
我查看了檔案,我只能找到 CPU、記憶體和 rateLimits 的設定限制。
uj5u.com熱心網友回復:
有幾種方法可以滿足您的需求。
- 自定義實作:正如您所提到的,將收到的 API 呼叫數量保存在持久層中,并在達到請求后拒絕請求。
- 使用服務網格:Istio(例如)將允許您限制接收到的請求數量并充當斷路器。
- 使用外部 Api Manager:Apigee 還可以讓您限制甚至向您的用戶收費,但是如果它僅供內部使用(不按使用付費),我絕對不會推薦它。
棘手的部分是在達到限制后您想要發生的事情,如果它只是一個 pod,您可以退出應用程式以完成并清除它。
否則,如果您的部署具有其副本集和與之關聯的多個資源(如配置映射),您可能希望使用某種異步警報或輪詢檢查來清理與您的部署相關的所有內容。您可能希望深入了解 Airflow (Composer) 等編排器,并使用 Helm 等多種工具來簡化部署。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/517191.html
標籤:Google Cloud Collective Kubernetes谷歌 Kubernetes 引擎快速APIKubern
