cog*_*ade 2 google-app-engine stateless
我曾被告知GAE是无国籍的.我一般都理解无状态的概念,但我可以在概念上将它应用于GAE类型系统.
我特意问这个问题,因为我开发的应用程序似乎存在干扰问题.也就是说,当两个或更多人同时使用它时,它会变得混乱.(我继续进行bug测试以确认错误仅在同时使用期间发生.)我认为理论上可能存在这样的干扰的两种方式:A,错误的GQL查询获取错误的db记录(我检查了这个,nope); 或b.在服务器级别.我的问题:后者究竟有可能吗?当应用程序正在服务时,一个用户是否可以通过改变程序中变量的状态来干扰另一个用户?或者,也许,无国籍状态会阻止这种情况吗?我很困惑,可能错误地提出了这个问题.合十礼.
GAE 仍然运行(虚拟?)服务器来处理 HTTP 请求。服务器实例可能会启动、处理大量请求并关闭。在任何给定时刻,大量服务器实例都可能正在运行。两个连续的 HTTP 请求可能最终由同一个服务器实例或不同的服务器实例提供服务。您需要将您的软件设计为无状态的,因为您不知道它在哪个服务器实例上运行。
但是,由于 GAE 仍然运行虚拟服务器,因此您可以设置某种全局静态变量,这些变量可以在给定服务器实例上的多个 HTTP 请求之间进行修改和访问。很可能你已经做了一些类似的事情。
这种状态通常是无用的,因为如上所述,您无法保证后续 HTTP 请求会命中同一个服务器实例,或者无法控制服务器实例何时关闭。但是,例如,如果您想对每个服务器实例平均服务多少请求进行实验,您可能可以这样做。
我认为你混淆了一些条款.首先,您使用的语言是什么?这是java还是python?
告诉你GAE是'无国籍'的人并不知道他们在谈论什么,否则你对他们告诉你的事情感到困惑.GAE是一个Web服务器平台,您的应用程序的状态由您自己决定.HTTP是一种无状态协议(GAE用于构建使用http的Web应用程序),但您绝对可以打开会话并以这种方式为用户实现状态.
您描述的错误条件是并发性.您已在GAE(数据存储区,内存缓存等)中共享资源,并且如果您使用高复制数据存储,则还可以在数据存储中具有最终一致性.
GAE并不保证同一个服务器实例将为同一个人提供多个请求,并且默认情况下没有多线程(无论如何,在java中我不确定python).没有多线程,在任何给定时间任何实例上只有1个人.但是,如果启用多线程,则必须确保代码是线程安全的,否则您可以让2个用户在单个实例上修改变量,但这不是GAE独有的.
你绝对可以有2个用户修改2台不同的服务器或相同的内存缓存条目中的同一数据存储实体,则需要使用交易等还与最终一致性对于这种情况下的代码可以有一个写和读这么之间存在滞后如果您写入数据而另一个用户立即读取它们,则可能无法获得相同的值.
| 归档时间: |
|
| 查看次数: |
1041 次 |
| 最近记录: |