如何在 App Engine 上实现服务器亲和性或粘性会话?

2023-11-27

我的申请希望有:

  1. 自动扩展

    • 我希望 App Engine 在流量增加时启动应用程序的新实例
    • 当实例空闲时,我希望 App Engine 将其关闭
  2. 客户端/服务器关联性

    • 在初始客户端->服务器 HTTP 请求之后,我想要客户端 能够连接到同一个应用程序服务器,以便该应用程序服务器 可以维护一堆客户端状态
    • 状态可能会频繁更新(以支持实时交互), 所以基于memcache+datastore的持久化是不可取的。
    • 服务器可能需要根据多个客户端的状态做出决策, 例如实时多人游戏

我怎样才能做到这一点?


您可以使用 App Engine 后端(长期运行、可配置、可寻址、持久的服务器)实现这些目标:

  • https://developers.google.com/appengine/docs/python/backends/
  • https://developers.google.com/appengine/docs/java/backends/

Python实现

  1. 将后端配置为两者public and dynamic

    # backends.yaml
    
    backends:
    - name: foo
      instances: 20
      options: public, dynamic
    
  2. 除了以通常的方式部署您的应用程序之外:

    appcfg.py update .
    

    记得部署你的后端:

    appcfg.py backends . update
    
  3. 对于初始连接,让您的客户端使用 非实例特定的后端主机名,例如:

    foo.your_app_id.appspot.com
    

    App Engine 会将您的请求路由到可用的后端 实例,可选地启动一个新的后端实例之后。

  4. 在服务器上的请求处理代码中,使用后端 用于确定哪个实例正在处理请求的 API 返回给客户端一个实例特定的 URL。

    from google.appengine.api import backends
    
    import webapp2
    
    class GetPersistentUrlHandler(webapp2.RequestHandler):
    
      def get(self):
        """Return the current backend's instance-specific URL."""
    
        my_url = backends.get_url(instance=backends.get_instance())
        self.response.write(my_url)
    
    app = webapp2.WSGIApplication([
      ('/get_peristent_url', GetPersistentUrlHandler),
    ], debug=True)
    
  5. 客户端与特定实例建立后续连接 后端网址:

    http://3.foo.your_app_id.appspot.com
    

    注意:使用 https 时,请务必将子域点替换为-dot-以避免 SSL 证书问题。

    https://3-dot-foo.your_app_id.appspot.com
    

局限性

  1. 后端不会永远存在,可能会在没有通知的情况下意外关闭
  2. 您的应用程序可以拥有的后端数量目前有限
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 App Engine 上实现服务器亲和性或粘性会话? 的相关文章

  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • 使用溢出支持定位粘性填充材料[重复]

    这个问题在这里已经有答案了 我在用position sticky在我的应用程序中 在使用overflow属性来显示滚动条 我已经寻找了一个确实支持这种情况的polyfill 但到目前为止没有任何运气 有谁知道这样的polyfill shim
  • 使用 AngularJS 多部分表单数据将文件上传到 Google Cloud Storage

    我正在尝试使用 AngularJS 中指定的多部分方法将图像文件上传到 Google Cloud Storagehttps cloud google com storage docs json api v1 how tos upload m
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 如何在不同版本的Google App Engine中使用自定义域名?

    我使用谷歌应用程序引擎作为我的 Android 和 Web 应用程序的服务器 我使用 Android Studio 开发了 Android 应用程序 并使用 Eclipse 开发了 Web 应用程序 我在应用程序引擎中部署了两个版本 第一个
  • Google Cloud SQL 上的故障转移如何运作?

    我打算将 PHP 应用程序 从 Google Cloud Platform 外部的服务器 连接到 Google Cloud SQL 我想知道如何设计应用程序以正确地对其数据库进行故障转移 根据manual https cloud googl
  • ASP.NET 会话状态和多个工作进程

    我需要了解一些有关 ASP NET 会话状态的信息 因为它适用于 IIS 7 和 ASP net 3 5 如果应用程序配置为使用进程内会话状态 那么如果有多个工作进程 该应用程序是否可以正常工作 换句话说 工作进程是否共享会话状态 IIS
  • Google App Engine 超时:数据存储操作超时,或数据暂时不可用

    这是我每天都会在应用程序日志中看到的一个常见异常 通常每天 5 6 次 流量为 1K 访问 天 db error trying to store stats Traceback most recent call last File base
  • 如何以编程方式创建和暂停 Google App Engine 任务队列

    我正在使用 Google App Engine 并且一直在使用命名推送队列来处理一些任务 队列是使用queue xml 定义和配置的 没关系 现在我正在尝试做更多的事情 1 有没有办法动态创建和配置Java 中的新队列 动态 2 另外 一旦
  • 如何以编程方式确定哪些数据存储区索引有错误?

    当我跑步时更新索引在 Google 数据存储上我收到以下消息 它告诉我通过查看 GUI 来确定哪些索引有错误 然后删除这些索引 我的 200 个索引中有 51 个错误 从 GUI 中复制它们是不可行的 编辑 通过费力地从 datastore
  • Google App Engine queue.yaml 无法在开发服务器中工作

    我无法让 dev appserver py 识别我使用queue yaml 创建的自定义队列 他们没有出现在http localhost 8000 taskqueue http localhost 8000 taskqueue 当我尝试向其
  • 节点应用程序之间共享会话?

    我目前有两个独立的节点应用程序在两个不同的端口上运行 但共享相同的后端数据存储 我需要在两个应用程序之间共享用户会话 以便当用户通过一个应用程序登录时 他们的会话可用 并且他们似乎已登录到另一个应用程序 在本例中 它是一个面向公众的网站和一
  • AppEngine异常实例预热java

    在过去的两天里 我们每分钟左右就会经历一次实例预热 实例出现 然后立即关闭 上周我们没有改变任何事情 但它突然开始发生 我们暂时增加了居民数量 但系统仍然出现异常生成动态实例的情况 我们还发现平均冷热身时间从 11 秒增加到 47 秒 无需
  • 使用 Google 应用引擎接收多文件帖子

    我想从图像上传器接收多文件帖子 我用这个 http www adylevy com index php 2009 07 22 multiple files uploader with preview on client side 大多数示例
  • 如何使用 Google App Engine 和 Python 创建 REST 服务?

    我想创建一个 RESTFUL Web 服务 通过访问的 URL 获取请求 然后为该客户端返回适当的文档 例如 如果它是一个天气应用程序 我想通过网络浏览器获取亚特兰大的天气 我会访问http weatherapp appspot com T
  • appengine 新应用程序部署失败并出现“版本未就绪”异常

    我正在尝试在应用程序引擎上部署一个应用程序 它是一个新应用程序 我尝试更改版本名称并再次部署 我什至创建了一个新的应用程序 ID 并使用了相同的应用程序 但没有成功 2013 06 10 19 47 41 615 WARNING appcf
  • 谷歌应用程序引擎 app.yaml url 处理程序

    我正在尝试使用 python27 来使用谷歌应用程序引擎 如何将脚本放在不同的文件夹中 而不是与 app yaml 放在同一文件夹下 handlers url script code helloworld app this give err
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 达到 Google App Engine 的文件和 blob 最大数量

    当尝试部署我的应用程序时 appcfg py update oauth2 我越来越 PM Rolling back the update Error 400 begin server output Max number of files a
  • 不断收到错误消息,表示 localhost 的 Server App Engine Standard 无法启动

    当尝试在 Eclipse 中启动 Google 应用程序引擎项目时 我不断收到错误消息 指出本地主机上的服务器应用程序引擎标准无法启动 错误日志如下 以前有人遇到过这个问题吗 问题的原因是什么 WARNING An illegal refl

随机推荐