2016-11-30 24 views
1

有什麼辦法將請求發送到一個模塊/服務的所有活動實例在谷歌應用程序引擎?GAE發送請求到所有活動實例

如果我能得到的所有活動實例ID列表,我可以作出這樣https://instance-dot-version-dot-service-dot-app-id.appspot.com爲每個實例的請求。

我需要這個改變一些內存的全局變量(即節省了我的請求到數據存儲或內存緩存和時間)在非常特殊的情況下。如果他們頻繁變動顯然我更喜歡使用內存緩存......

+0

雖然丹發佈了一個答案,我不知道這是真的,你需要達到什麼樣的最好的辦法。你認爲你可以進一步闡述? – BrettJ

+0

您可以在實例的RAM內存的標誌,在MEMCACHE或數據存儲(或其他NSQL)。取決於所選存儲的時間可以是0.001,2或50毫秒(示例)。如果我的應用程序的所有請求都讀取了該標誌,那麼如果您從實例的RAM內存中讀取該數據(支持10 M請求/日期並執行數字),則可以節省金錢和時間。當實例啓動時,您從Datastore中讀取值並將其作爲全局變量放入RAM中。但是如果標誌改變了,我正在尋找一種方法來發送消息給ALL INSTANCES以更新RAM中標誌的值。 –

+0

在我以前的例子中,該標誌每月只能改變一次,或者在某些Google服務失敗的情況下(如GAE任務隊列),但是在發生這種情況時,我們需要一箇中間傳播。目前的解決方案是刷新memcache並再次上傳應用程序的最新版本,因此所有實例都將初始化並重新啓動,並帶有新的標誌值...我正在尋找一種更優雅的方式來執行此操作。我需要它用於自動縮放實例。 –

回答

0

你可以得到的實例列表的使用特定服務版本的Google App Engine Admin API的REST apps.services.versions.instances.list方法:

名單的情況下,厭惡。

HTTP請求

GET https://appengine.googleapis.com/v1/{parent=apps/*/services/*/versions/*}/instances

URL使用Google API HTTP annotation語法。

另請參見相應的Google App Engine Admin API Client Library for Python的pydoc頁面here

有了你可以實例的列表,如你所說,使用GAE的routing via URL根據需要將請求發送到每個特定實例。

有關這一假設的問題重要提示

如果我能得到的所有活動實例ID列表,我可以做一個 要求如 https://instance-dot-version-dot-service-dot-app-id.appspot.com爲 每個實例。

Targeted routing

注:瞄準一個實例中被配置爲自動縮放或基本縮放服務不支持。

+1

此解決方案不適用於自動縮放實例。我得到de實例ID,但是instance.service.version.app.appspot.com請求不起作用。該文檔指出「在配置了自動縮放或基本縮放的服務中不支持定位實例。」 –

+0

確實如此,但我認爲這是由原始帖子設置的上下文的問題,其中陳述了「我可以提出如https:// instance-dot-version-dot-service-dot-app-id .appspot.com for each instance.' :) –

+0

我嘗試了所有符號變體,但不起作用。我的實例是自動縮放,對於文檔說不起作用。我希望他們將來可以改變這一點。 –