2017-07-26 66 views
1

在我的應用程序(Google App Engine標準Python 2.7)中,我在實例啓動時初始化了全局變量中的一些標誌(從memcache/Datastore讀取值)在第一個請求)。這些變量值不會經常變化,每月只發生一次或發生緊急情況時(例如,當谷歌應用程序引擎Taskqueue或Memcache服務運行不正常時,發生的情況每年不會超過GC狀態報告的一年兩次,但會嚴重影響我的應用程序和我的客戶:https://status.cloud.google.com/incident/appengine/15024https://status.cloud.google.com/incident/appengine/17003)。GAE關閉或重新啓動服務/應用程序的所有活動實例

我不想將這些標誌存儲在memcache或Datastore中以提高效率和成本。

我正在尋找一種方式來發送消息給所有實例(見我以前的帖子GAE send requests to all active instances):

正如https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed

注說:瞄準一個實例中服務不支持配置爲自動縮放或基本縮放。實例ID必須是0範圍內的整數,直到運行的實例總數。無論您的縮放類型或實例類如何,都無法將請求發送到特定實例,而無需在該實例中定位服務或版本。

但另一種解決方案可以是:

1)發送一個關閉消息/命令到我的應用程序或服務

2)的所有實例發送重啓消息/命令的所有實例我應用程序或服務

我只使用自動縮放,所以我不能發送針對特定實例的請求(我可以使用GAE管理API獲取活動實例的列表)。

有沒有辦法在Python GAE中以編程方式執行此操作?手動在GCP控制檯中很容易有幾個實例,但對於50多個實例,這是一個痛苦...

回答

0

受您對相關帖子的評論啓發,一種可能的解決方案(實際上更多的解決方法)是通過重新部署相同版本的應用程序代碼來獲得所有實例的重新啓動。

自動部署,也可以使用Google App Engine Admin API,看到Deploying Your Apps with the Admin API

部署與管理API一個應用程式版本:

  1. Upload your app's resources to Google Cloud Storage.
  2. Create a configuration file that defines your deployment.
  3. Create and send the HTTP request for deploying your app.

應當指出的是(重新)部署它處理100%的流量可能會導致錯誤和流量損失的應用程序版本,因爲:

  • 重寫應用程序文件實際上在使用中(見注在Deploying an app
  • 沒有給GAE足夠的時間旋轉足夠的情況下,快速,足以應付高收入流量速率(更多詳情here

使用不同的應用版本爲部署和逐漸將流量遷移到新部署的應用程序可以完全消除此類損失。這可能與您的特定情況無關,因爲舊的應用版本已經受損。

流量自動遷移也是可能的,請參閱Migrating and Splitting Traffic with the Admin API

相關問題