我曾经被告知 GAE 是无国籍的。我总体上理解无状态的概念,但我可以使用一些指导来从概念上将其应用于 GAE 类型的系统。
我专门问这个问题是因为我开发的一个应用程序似乎存在干扰问题。也就是说,当两个或更多人同时使用它时,它就会变得混乱。 (我正在继续进行错误测试,以确认该错误仅在同时使用期间发生。)我认为理论上可能有两种方式发生此类干扰:A,错误的 GQL 查询获取错误的数据库记录(我检查了这一点,不);或 b.在服务器级别。我的问题:后者实际上可能吗?当应用程序运行时,一个用户是否可以通过更改程序内变量的状态等方式干扰另一个用户?或者,也许这是无国籍状态所阻止的?我很困惑,可能错误地表达了这个问题。合十礼。
我认为您混淆了一些术语。首先,您使用什么语言?这是java还是python?
告诉你 GAE 是“无国籍”的人并不知道他们在说什么,或者你对他们告诉你的内容感到困惑。 GAE 是一个 Web 服务器平台,应用程序的状态取决于您。 HTTP 是一种无状态协议(GAE 用于构建使用 http 的 Web 应用程序),但您绝对可以打开会话并以这种方式为用户实现有状态。
您所描述的错误条件是并发性之一。您在 GAE 中拥有共享资源(数据存储、内存缓存等),并且如果您使用的是高复制数据存储,则数据存储中还具有最终一致性。
GAE不保证同一个服务器实例将服务同一个人的多个请求,并且默认情况下没有多线程(无论如何在java中,我不确定python)。如果没有多线程,任何给定时间任何实例上都只有 1 个人。但是,如果启用多线程,则必须确保代码是线程安全的,否则可以让 2 个用户在单个实例上修改变量,但这并不是 GAE 独有的。
您绝对可以让 2 个用户修改 2 个不同服务器上的相同数据存储实体或相同的内存缓存条目,并且您需要通过使用事务等来针对这种情况进行编码。此外,对于最终一致性,写入和读取之间可能存在延迟,因此如果您写入数据而另一个用户立即读取它,他们可能不会获得相同的值
后退。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)