Apple SwiftNIO в CloudRun - это возможно? - PullRequest
0 голосов
/ 19 июня 2019

Мне нужно реализовать следующую функциональность.

  1. Клиентская часть: приложение для iOS (и Android) вызывает веб-сервис
  2. Сторона сервера: веб-сервис в Goolge Cloud.

На стороне сервера должен быть HTTP / 2, TLS 1.3

IBM Kitura упрощает создание клиентского кода для Android и iOS для связи с сервером SwiftNIO.

Приложение Kitura macOS - это действительно мощный и простой способ создания определения службы и генерации кода клиента и сервера. Сервер Kitura - это сервер SwiftNIO 2.0, который прекрасно работает с последней версией Apple iOS.

Я исследовал возможность запуска серверного кода в IBM Cloud. Облачные функции IBM Swift очень легкие. Но есть две большие проблемы с этим.

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) хороший из-за приложения Mac OS Kitura. Я могу разрабатывать только с одним языком Swift, который ускорит время разработки. Есть недостаток - нет поддержки клиентских библиотек Swift для Google Cloud API.

Таким образом, API на основе SwiftNIO можно использовать в качестве внешнего интерфейса, а облачные функции Google Golang следует вызывать с 1).

Или, если я использую ColdRun, можно вызвать Golang из Swift, как можно использовать Gomobile из iOS. Как?

Также Kitura может генерировать интерфейсы OpenAPI.

Вариант 2) - использовать исключительно Голанг. Недостаток - я не могу использовать функциональность Kitura Swift.

Какие параметры доступны на сервере Google Cloud:

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

Опция: 1) У меня нет ответов о Cold Start и других параметрах, таких как 2) и 3)

2) очень хороший и недорогой: 2 миллиона вызовов в месяц (включая фоновые и HTTP-вызовы) 400 000 ГБ-секунд памяти, 200 000 ГГц-секунд вычислительного времени 5 ГБ выходной сети в месяц Максимальная продолжительность функции = 9 минут Холодный старт = 0,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 для Cloud Run + Golang CloudFunction должны быть наилучшей возможностью.

1 Ответ

3 голосов
/ 19 июня 2019

Cloud Run не поддерживает потоковую передачу HTTP / 2.Он должен иметь последние шифры.

Я запустил Swift при облачном запуске (, вот пример с использованием Protobufs и клиент / сервер swift).Он использует Kitura.

Run, вероятно, будет дешевле, чем GCF и GAE, из-за параллелизма и отсутствия обрыва счета.Производительность холодного запуска, скорее всего, будет одинаковой в Go и Swift, потому что они оба запускают двоичные файлы, но я признаю, что у меня нет

ATS не должно быть проблемой, так как Run делает SSL для вас (и .appдомены довольно аккуратны, так как я считаю, что они требуют SSL и HSTS).

...