使用 Compute Engine 来访问 Cloud Datastore

我想做的事情 (Wǒ zuò de

由于需要从Compute Engine访问Datastore,并进行了各种调查和讨论,因此我将保留这些记录。

选择-
只需要一个选项

暫時來說,總體上有以下兩個選擇。

    1. 通过 App Engine 进行访问。

在 App Engine 上实现一个 API,当接收到请求时,访问 Datastore 并执行必要的操作或返回数据。

从 Compute Engine 上调用该 API。

直接调用 Cloud Datastore API。

本次将使用名为 gcloud-py 的客户端库。

尽管有Cloud Datastore API,为什么还要特意插入App Engine呢?这个人似乎很傻对吧?不过,由于Cloud Datastore API可能不太好用,或者由于App Engine到Datastore的访问更快等种种原因,最终还是选择了插入App Engine更好之类的感觉。

然而,这也只是过去的故事了。现在我不知道情况怎样!所以我尝试了各种方法。

来试试吧!

我用指定的键获取了一个实体,并进行了比较这个简单的处理。由于没有精确测量,所以请假设每个数值可能会偏差约20~30毫秒。

首先,我从手边的Macbook Pro开始尝试,结果如下。

Cloud Datastore APIApp Engine 経由App Engine 経由 (memcache 有り)Local1000 ms くらい200 ms くらい170 ms くらい

在这个时候,我对Cloud Datastore API已经完全绝望了,但是我旁边的公司前辈用一副“不要放弃!”的表情激励我,所以我在US region 1创建了Compute Engine的实例并努力尝试了一下。以下是结果。

Cloud Datastore APIApp Engine 経由App Engine 経由 (memcache 有り)GCE (US)50~200 ms くらい45~50 ms くらい15~20 ms くらい

由于时间短且难以测量,所以这个解决方案有些粗糙,但是云数据存储API的速度已经达到了可以接受的水平。

然而,据说 Cloud Datastore API 的速度并不稳定。虽然有时候速度与通过 App Engine 相当,但有时候可能需要花费约200毫秒。我不清楚其中的原因。另外,如果通过 App Engine 访问 Datastore 时使用到了 memcache,访问时间 (大约30毫秒) 几乎可以完全节省,因此速度很快。

每个都有其优点和缺点。

将App Engine夹在中间

好处

如果有很多能够利用缓存的请求,那么Memcache的功能就非常重要。与从App Engine获取数据需要耗费大约30毫秒相比,从缓存中获取数据只需要2毫秒左右就能完成。而且不需要支付任何读操作费用,这也是非常划算的。

缺点

如果您需要在大量数据上进行类似于批处理的并行处理任务,可能需要生成许多App Engine实例,这样会产生一些费用。

直接调用云数据存储API

优点

实施起来很简单,而且当然不需要付费App Engine实例。从Compute Engine访问的速度可能与通过App Engine进行访问相当。

缺点

没有Memcache。
gcloud-py的文档就像宇宙初始一样,什么都没有。

个人的结论 de

如果仅考虑速度,目前来看,通过App Engine可能稍微更快一些。但根据情况,直接从Compute Engine调用Cloud Datastore API也成为选择之一。

如果是与批处理数据投入类似的无法工作的处理方式,直接调用云数据存储更容易实现且不需要花费金钱。

赠品。

在中国,基本上是安装gcloud-python。

pip install gcloud

好的,但是在GitHub的主分支上似乎有更新一点的版本。

查看了主分支中的代码后,发现新增了一些描述,如果有 gRPC,就会使用类似这样的写法。

スクリーンショット 2016-08-28 17.45.22.png
スクリーンショット 2016-08-28 17.53.15.png

因此/所以

pip install git+https://github.com/GoogleCloudPlatform/gcloud-python

使用GitHub的master分支直接安装gcloud-python进行测试后发现,速度最多提升了大约20毫秒,并且和通过App Engine进行测试差距不大,效果相当不错。

我感觉到速度仍然不太稳定,但我期待着努力改善性能的迹象。

由于Datastore位于美国和欧盟,因此让实例也建在附近 ↩

仔细观察,几乎所有项目都变成了指向源代码的链接 ↩

截至2016年8月28日,此功能尚未在pip的v0.18.1版本中实现 ↩

广告
将在 10 秒后关闭
bannerAds