我试图弄清楚如何从Google App Engine外部访问Google App Engine Memcache服务.任何有关如何做到这一点的帮助将不胜感激.
提前致谢!
最佳答案 我认为目前不可能.我不知道是否有任何技术论据,或者这个决定是出于计费目的.但似乎memcache旨在成为App Engine不可或缺的一部分.我能找到的唯一相关讨论是
this feature request.它要求可以通过另一个App Engine项目访问一个App Engine项目的memcached数据.在我看来,谷歌并不认为这样的功能是有益的.您可以尝试提交自己的功能请求,以使memcache成为独立服务.如果你没有成功(我担心你不会),这是一个简单的解决方法.
一个简单的解决方法:
创建一个简单的App Engine项目,该项目将作为memcache服务的外观.这个虚拟App Engine项目只是将您的HTTP请求转换为memcache API调用,并将获取的数据返回到HTTP响应的主体中.例如,要检索内存缓存记录,您可以发送GET请求,例如:
https://<your-poject-id>.appspot.com/get?key=<some-particular-key>
此调用将被“翻译”为:
memcache.get(<some-particular-key>);
并将获得的数据附加到HTTP响应中.
由于访问memcache是免费的,您只需支付实例时间.我不知道你期望什么生产,但我可以想象你甚至可以适应每日免费配额(目前28小时/天)的情况.总而言之,中间App Engine项目在性能和价格方面都不应带来显着的成本.
在使用此变通方法之前:
上面的代码片段仅用于说明目的.在生产中使用这种方法之前仍有一些问题需要处理.例如,正如Suken所指出的,如果他们知道要发送什么请求,任何人都可以访问您的内存缓存.以下是我个人要做的四件事:
>通过为每个请求发送一些身份验证令牌来解决安全问题.显而易见的必要是通过HTTPS进行调用以防止中间人攻击者获取此令牌.请注意,默认情况下,App Engine的appspot.com子域可通过HTTPS访问.
>首选批量API调用,例如getAll(),而不是get()等单个记录替代.在一个批处理调用中检索多个记录要比进行多个单独的API调用快得多.
>使用POST请求(而不是GET)访问外观应用程序.您不必担心批量请求变得很大.我在上面的例子中只使用了GET请求,因为它更容易编写.
>检查App Engine的使用是否违反了Terms of Service.就我个人而言,我不相信.我不明白为什么谷歌应该介意.毕竟,你将支付几个小时的费用.
编辑:在考虑了这个问题之后,我认为建议的解决方法实际上是谷歌假设你要做的事情.鉴于Goolge的目标是赚钱,提供免费服务是不合理的,除非它是付费服务的一部分.当然,可以创建另一种计费方案.例如,仅允许直接访问愿意为专用内存缓存付费的开发人员.问题是您的用例是否足以说服Google采取某些行动.