2017-03-13 62 views
2

我想向特定的App Engine應用程序當前運行的每個(動態/自動擴展的)實例發送特定的HTTP請求(或以其他方式傳遞消息)。以編程方式列出並向動態App Engine實例發送請求

我的目標是觸發每個實例放棄一些本地緩存的數據(因爲我剛剛修改了底層數據並希望它們重新加載它)。

一個可能的解決方案是將值存儲在Memcache中,每次處理請求時都會檢查此實例以查看是否應刷新其緩存。但是這增加了每個請求的延遲。

另一種可能的解決方案是以某種方式停止所有正在運行的實例。沒有固定的開銷,但在實例重新啓動時會產生一些影響。

更不理想的解決方案是重新部署應用程序代碼以使所有實例停止。由於部署需要一些時間,現在這會增加額外的延遲。

+0

我不認爲目前有任何API可以這樣做,但是您可以讓每個API追加到memcache中的列表中,因爲它可以啓動,因此您可以全部跟蹤它們。 – technomage

+0

您好,請看看下面的文檔,它將討論如何調用專用實例的主題https://cloud.google.com/appengine/docs/standard/java/how-requests-arerourouted –

+0

** Technomage ** - 如另一條評論所述,它看起來像關閉鉤子不會被自動調整的實例調用,所以雖然我可以讓它們在啓動時自己註冊,但我目前無法從它們在關閉時取消註冊。 ** Michael ** - 這些是動態(自動調整)的實例,所以我不認爲基於URL的路由將能夠解決特定的實例。 – CAW

回答

0

對於給定版本,您可以使用管理API至list instances,但我建議您可能希望在每個App Engine實例上使用類似PubSub API的create a subscription。由於每個實例都有自己的訂閱,所有發送到受監控隊列的消息都將被所有實例接收。

您可以在啓動時創建訂閱(the /_ah/start endpoint可能有用),然後在關機時使用/_ah/stop endpoint將其刪除。

+0

Pub/Sub看起來很有希望。但是我遇到了一個問題,那就是從不調用shutdown hook(通過LifecycleManager.getInstance()。setShutdownHook註冊)。 我正在使用自動調整的實例。爲了測試,我添加了一個單行關閉鉤子,它只是創建一個具有特定鍵的數據存儲實體。通過控制檯導致實例關閉後,或者通過部署新版本的應用程序,我可以看到數據存儲實體從未被創建。 – CAW

+0

我也剛剛發現它似乎無法通過URL解決特定的自動縮放實例,所以我無法爲發佈/訂閱推送訂閱註冊每個端點的端點。 拉訂閱也是有問題的。在處理每個傳入的請求之前,我必須輪詢pub/sub(爲每個請求添加延遲並不是所希望的)。或者可能只是通過輪詢每個第N個請求來進行分析(但這意味着陳舊的數據在一段時間內仍然是用戶)。 真的是一種適當的「推」是最好的,但我擔心可能是不可能的自動縮放? – CAW

+0

我相信*您可以使用[模塊API](https://cloud.google.com/appengine/docs/standard/python/using-the-modules-api)中的實例ID將請求路由到自動調節實例。 –

相關問題