【问题标题】:Apple SwiftNIO in CloudRun - is this possible?CloudRun 中的 Apple SwiftNIO - 这可能吗?
【发布时间】:2019-11-01 15:02:30
【问题描述】:

我需要实现以下功能。

  1. 客户端:iOS(和 Android)应用调用网络服务
  2. 服务器端:Goolge Cloud 上的 Web 服务。

服务器端应该有 HTTP/2、TLS 1.3

IBM Kitura 可以非常轻松地为 Android 和 iOS 生成客户端代码以与 SwiftNIO 服务器通信。

Kitura macOS 应用程序是创建服务定义和生成客户端和服务器代码的真正强大且简单的方法。 Kitura 服务器是 SwiftNIO 2.0 服务器,可与最新的 Apple iOS 完美配合。

我探索了在 IBM Cloud 上运行服务器代码的可能性。 IBM Swift Cloud Functions 非常轻量级。但它有两个大问题。

1) Using custom domain with LetsEncryt - SSL certificate is not updated automatically. 
Which means every 90 days it must be updated manually. 
Basically - no managed SSL.

2) only ipv4, no ipv6 support with means it cannot pass the 
Apple App Store requirements. 

所以这两个问题排除了 IBM Cloud。

对于 Google Cloud,这两个都不是问题。

现在我正在探索使用以下选项之一构建 RESTful API 的选项:

1) Swift
2) Golang

选项 1) 是一个很好的选项,因为 Kitura macOS 应用程序。我可以只用一种语言 Swift 进行开发,这会加快开发时间。 有一个缺点 - 不支持 Google Cloud API 的 Swift 客户端库。

所以基于 SwiftNIO 的 API 可以用作前端,并且应该从 1) 调用 Google Golang Cloud Functions。

或者,如果我使用 ColdRun,则可以从 Swift 调用 Golang,因为可以从 iOS 使用 Gomobile。怎么样?

Kitura 也可以生成 OpenAPI 接口。

选项 2) - 专门使用 Golang。缺点 - 我无法使用 Kitura Swift 功能。

Google Cloud 服务器上有哪些选项:

1) Google Cloud Run (with container for Swift)
2) Google Cloud Functions for Golang
3) Google Appengine for Golang

选项: 1) 我没有关于冷启动和 2) 和 3) 的其他参数的答案

2) 非常好且便宜的一种: 每月 200 万次调用(包括后台调用和 HTTP 调用) 400,000 GB 秒内存,200,000 GHz 秒计算时间 每月 5 GB 网络出口 最大功能持续时间 = 9 分钟 冷启动 = .5-1.5 秒

3) 冷启动 = 秒,但我认为 2) 是这个参数上最好的。

我认为 ipv4 和 ipv6 以及 Apple App Transport Security (ATS) 要求适用于 1)、2) 和 3),但我需要确认。

对于 HTTP/2、TLS 1.3 在 1)、2) 和 3) 上需要做什么,我没有答案。

还有一件事。我需要能够调用 BigQuery。目前唯一支持的即用型客户端库是 Golang。

所以我认为 SwiftNIO on Cloud Run + Golang CloudFunction 应该是最好的选择。

【问题讨论】:

  • 这应该完全有效。如果 NIO 有问题,请联系我们。

标签: swift google-cloud-functions google-cloud-run swift-nio


【解决方案1】:

Cloud Run 不支持流式传输 HTTP/2。它应该有最新的密码。

我已经在 Cloud Run 上运行了 Swift(here's an example 使用 Protobufs 和客户端/服务器 swift)。它使用 Kitura。

由于并发且没有计费悬崖,Run 可能会比 GCF 和 GAE 便宜。 Go 和 Swift 的冷启动性能可能会相似,因为它们都在启动二进制文件,但我承认我没有

ATS 应该不是问题,因为 Run 为您提供 SSL(.app 域非常简洁,我相信它们需要 SSL 和 HSTS)。

【讨论】:

  • 我有一个 .app 域 - 他们有什么优势?
  • 看了你的例子 - 会探索它 - 看起来不错。
  • 到目前为止 - 我只使用 Golang。成功将 Gomobile 与 iOS 集成。寻找一种将 Golang 与服务器端 Swift 集成的方法。因此,如果我必须从 Swift 调用 BigQuery,我可以直接使用 Golang BigQuery 客户端库,而无需使用单独的服务。为什么 Google 没有为 Google Cloud API 制作 Swift 客户端库?
  • 我喜欢 CloudRun - 非常强大和灵活 - 但最好从开发人员那里获取有关冷启动统计信息的一些信息。如果这应该是我面向移动设备的后端 - 冷启动非常重要。可能是温暖的实例?
  • SwiftNIO 是否需要 HTTP/2 流式传输?我试图判断它是否相关。 OP 说他们正在运行一个 REST API,所以我认为它不是流式传输的。
猜你喜欢
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
相关资源
最近更新 更多