swift - CloudRun 中的 Apple SwiftNIO - 这可能吗?
问题描述
我需要实现以下功能。
- 客户端:iOS(和 Android)应用调用 Web 服务
- 服务器端: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),但我需要确认。
我没有关于 1)、2) 和 3) 上的 HTTP/2、TLS 1.3 需要做什么的答案。
还有一件事。我需要能够调用 BigQuery。目前唯一支持的即用型客户端库是 Golang。
所以我认为 Cloud Run + Golang CloudFunction 上的 SwiftNIO 应该是最好的选择。
解决方案
Cloud Run 不支持流式传输 HTTP/2。它应该有最新的密码。
我已经在 Cloud Run 上运行了 Swift(这是一个使用 Protobufs 和客户端/服务器 swift 的示例)。它使用 Kitura。
由于并发和没有计费悬崖,Run 可能会比 GCF 和 GAE 便宜。Go 和 Swift 的冷启动性能可能会相似,因为它们都在启动二进制文件,但我承认我没有
ATS 应该不是问题,因为 Run 为您执行 SSL(并且.app
域非常简洁,因为我相信它们需要 SSL 和 HSTS)。
推荐阅读
- testing - SoapUI 中的条件 XPath 表达式 - 如何比较存储在自定义属性中的两个值?
- kubernetes - kubernetes 中的 traefik 入口自定义错误
- python - Selenium Python 在页面上查找文本并单击下一个 ahref 链接
- sql - 查找最大不间断间隔
- angular - 材料 2 如何在子视图中打开底部工作表
- r - 如何使用R从.docx文件中提取纯文本
- html - 如果用户是特定属性的所有者,则删除用户选项
- linux - 如何对目录中的所有文件执行命令并将每个文件的输出移动到新文件夹?
- file-upload - AttributeError:“NoneType”对象没有属性“文件名”。Flask-Restplus 似乎无法将上传的文件识别为文件存储对象
- vba - VBA宏增加PowerPoint中选定形状/图片的旋转