微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

评估 Google Cloud Storage (GCS) API 选项

如何解决评估 Google Cloud Storage (GCS) API 选项

我的任务是开发一个接口层,供其他开发者在内部使用,作为访问 Google Cloud Storage (GCS) 的一种方式。对我来说,这个过程是从阅读在线文档开始的。我现在要决定我们将使用哪个 API。有几个悬而未决的问题,该文档提到向 SO 发布问题,所以我在这里。 背景的快速花絮似乎是有序的。我们主要是一家 C 公司,尽管我们确实有办法从 C 构建和调用 C++ 方法。内部用户将编写 C 代码调用我的 C 代码,而 C 代码又必须提供对 GCS 的访问。这就是高级调用堆栈。那么问题就变成了如何以最佳方式提供访问权限,而性能是首要标准?

为了回答这个问题,我首先阅读了有关不同 GCS 选项的在线文档。有一个 XML 和一个 JSON REST API。我们有一个内部 HTTP 机制,可以让 C 代码直接调用那些 JSON/XML API 方法。文档说明如下:

“...JSON API 是 RESTful...并且专门用于与 Google Cloud 客户端库一起使用。”

我想知道什么是 Google Cloud 库。阅读文档后发现它们是用特定语言编写的库,可用于访问 GCS。该文档似乎引导您使用这些客户端库之一而不是 JSON/XML 库。

所以我遇到的第一个问题是“‘特定意图’的业务到底是什么意思?”阅读更多内容后,我得出这样的概念,即这些客户端库是 RESTful 接口的抽象。这些库调用 JSON API方法,就像您可以直接通过 JSON API 自己做一样。对吗?如果是这样,它们似乎是与 GCS 交互的便捷方式。文档甚至指出云库“...提供更好的性能和可用性”与 JSON HTTP 接口相比。

最后,我看到了两条前进的道路:

  1. 使用我们的 HTTP 机制直接从 C 调用 JSON API
  2. 使用桥接器从 C 调用 C++ 方法。这些 C++ 方法然后调用客户端库中的方法,最终(如果上述内容正确)调用 JSON API。

请注意,我已经在内部编写了一些 C 代码,这些代码使用上述内部 HTTP 机制与 Apache WebHDFS API 交互,该 API 也是 RESTful,并且没有客户端库。因此,我可以利用该代码的相当一部分在这个新开发中重用。对我来说,这归结为一个性能问题。与第一个选项相比,上面的第二个选项似乎相当迂回。因此,第一个似乎比第二个产生了一些性能改进。然而,谷歌提到客户端库提供比 RESTful API 更好的性能。那个怎么样?该文档指出客户端库处理与服务器的所有低级通信,包括身份验证。这是部分原因吗?

所以我向那些对 GCS(可能还有 GCP)更有经验的人提出这个问题:在您看来,哪条路线会提供更好的性能?直接调用 JSON API 还是使用客户端库(在我们的例子中是 C++)? 谢谢!

解决方法

免责声明:我为 Google Cloud 开发 C++ 客户端库,特别是 C++ GCS 库。

但是,Google 提到客户端库提供比 RESTful API 更好的性能。怎么样?

这些库被调整为“很好”地使用 RPC。他们对重试和退避策略有很好的默认值,如果有两种选择,他们会选择正确的 RPC。他们可以从中断的下载或上传中有效地恢复。他们可能会实现更高级别的抽象以提高性能。

如果您问“如何运行他们的代码来调用 RPC 比我调用同一个 RPC 更有效”,那么答案是“可能不能”。我不认为这是有趣的问题。例如,如果你想上传一个大文件(比如多个 GiB),在 GCS 中最有效的方法是将文件分成块,使用多个并行上传到不同的 GCS 对象,然后组合对象,并删除中间对象。这将比顺序上传文件快几倍。你也可以这样做吗?当然!你想要_____吗?也许不是。

我们还担心正确恢复中断的下载。并在您上传和下载数据时验证数据的完整性(当然,您可以关闭这些功能)。

最后,如果有更有效的做事方式,我们可以在幕后更改协议。例如,我们已经在 XML 和 JSON 之间切换,当我们两者等价并且一个似乎比另一个表现更好时。我们还在努力支持 gRPC 而不是 REST,这与 REST 基准相比显示出良好的改进(不幸的是它还不是 GA,我没有估计日期)。

HTH

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。