我正在尝试弄清楚如何从Google App Engine外部访问Google App Engine Memcache服务。任何有关如何做到这一点的帮助将不胜感激。
提前致谢!
答案 0 :(得分:1)
我认为目前无法做到这一点。我不知道是否有任何技术论据,或者此决定仅仅是出于计费目的。但似乎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>
这个电话将被翻译成#34;成:
memcache.get(<some-particular-key>);
并将获得的数据附加到HTTP响应中。
由于访问memcache是免费的,您只需支付实例时间。我不知道你期待什么吞吐量,但我可以想象你甚至可以适应每日免费配额(目前每天28小时)的情况。总而言之,中间App Engine项目在性能和价格方面都不应该带来显着的成本。
在使用此解决方法之前:
以上代码段仅供参考。在生产中使用这种方法之前仍有一些问题需要处理。例如,正如Suken所指出的,如果他们知道要发送什么请求,任何人都可以访问您的内存缓存。以下是我个人要做的四件事:
通过为每个请求发送一些身份验证令牌来解决安全问题。显而易见的必要是通过HTTPS进行调用以防止中间人攻击者获取此令牌。请注意,默认情况下,可以通过HTTPS访问App Engine的appspot.com
子域。
优先选择getAll()
等批量API调用,而不是get()
等单一记录替代品。在一个批处理调用中检索多个记录要比进行多个单独的API调用快得多。
使用POST请求(而不是GET)来访问外观应用程序。您不必担心批量请求变得很大。我在上面的例子中只使用了GET请求,因为它更容易编写。
检查App Engine的使用是否违反了Terms of Service。就个人而言,我不相信它。我不明白为什么谷歌应该介意。毕竟,你将支付几个小时的费用。
编辑:在考虑了这个问题之后,我认为建议的解决方法实际上是Google假设您要做的事情。鉴于Goolge的目标是赚钱,提供免费服务是不合理的,除非它是付费服务的一部分。当然,可以创建另一种计费方案。例如,仅允许直接访问愿意为专用内存缓存付费的开发人员。问题是您的用例是否足以说服Google采取某些行动。
答案 1 :(得分:0)
不,AFAIK在GAE之外无法使用Memcache服务。更具体地说,它仅在GAE标准环境中可用,在GAE灵活环境中不可用。
但为GAE灵活用户建议的一些替代解决方案可能也可用于您。来自Memcache:
Memcache服务目前不适用于App Engine 灵活的环境。将使用alpha版本的memcache服务 很快就会有。如果您希望在服务时收到通知 可用,请填写此早期访问表单。
如果您需要立即访问内存缓存服务,可以使用 Redis Labs的第三方memcache服务。要访问此服务, 见Caching Application Data Using Redis Labs Memcache。
您还可以使用完全管理的第三方Redis Labs Redis Cloud 服务。要访问此服务,请参阅Caching Application Data Using Redis Labs Redis。
答案 2 :(得分:0)
正如其他用户所述,Memcache不是GAE(Google App Engine)之外的服务。我想指出,在Memcache服务上实现GAE外观具有安全性分支。请注意,外观GAE Memcache应用程序将像任何其他GAE服务一样在公共互联网上公开。我假设您只想将Memcache用于内部使用。要考虑的另一个方面是写入memcache。如果您打算从GAE外部写入memcache,那么一定要避免使用Facade。如果包含任何人将能够使用您的Facade实现作为他们自己的缓存而无需付费;)
我的建议是使用 GCP Cloud Launcher 来启动堆栈。 Redis和Memcache堆栈都有各种堆栈模板。此外,您可以将模板配置为使用可抢占可突发实例来降低Memcache的成本。