我的申请希望:
自动扩展性
客户端/服务器亲和力
我该如何做到这一点?
答案 0 :(得分:5)
您可以使用App Engine后端(长时间运行,可配置,可寻址,持久性服务器)实现这些目标:
将后端配置为 public 和 dynamic
# backends.yaml
backends:
- name: foo
instances: 20
options: public, dynamic
除了以通常的方式部署您的应用程序外:
appcfg.py update .
记得部署你的后端:
appcfg.py backends . update
对于初始连接,请让您的客户使用 非实例特定的后端主机名,例如:
foo.your_app_id.appspot.com
App Engine会将您的请求路由到可用的后端 实例,在可选地启动新的后端实例之后。
在服务器上的请求处理代码中,使用后端 用于确定处理请求的实例的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)
客户端与特定实例建立后续连接 后端网址:
http://3.foo.your_app_id.appspot.com
注意:使用https时,请务必使用-dot-
替换子域点
为了避免SSL证书问题。
https://3-dot-foo.your_app_id.appspot.com
答案 1 :(得分:4)
补充Adam的好答案:在GAE中不需要服务器关联,因为存储在HTTP会话中的数据不是保存在内存中,而是保存在持久数据存储中。因此,任何服务器都将找到先前存储在会话中的任何其他服务器。见the documentation:
App Engine包含使用servlet的会话实现 会话界面。该实现将会话数据存储在App中 用于持久性的引擎数据存储,还使用memcache来提高速度。如 与大多数其他servlet容器一样,会话属性是 在请求期间使用
session.setAttribute()
设置将保留在 请求结束。默认情况下,此功能处于关闭状态。要打开它,请添加以下内容 应用服务引擎-web.xml中:
<sessions-enabled>true</sessions-enabled>
该实现创建了
_ah_SESSION
类型的数据存储区实体, 和memcache条目使用前缀为_ahs
的键。注意:因为App Engine将会话数据存储在数据存储区中 memcache,会话中存储的所有值都必须实现
java.io.Serializable
界面。通过配置您的服务可以减少请求延迟 应用程序以异步方式将HTTP会话数据写入 数据存储区:
答案 2 :(得分:0)
自动可扩展性是AppEngine最擅长的,也是最能与其他云托管提供商区别开来的。满足您的两个要求,而无需您做任何额外的工作。
AppEngine没有单个服务器的概念。在创建一个好的,可扩展的AppEngine应用程序时,您无法用这样的术语思考。但是,您可以在Memcache或数据存储区中的请求之间存储客户端状态,这些请求在应用程序代码的所有实例之间共享。