Apple SwiftNIO в CloudRun - это возможно?
Мне нужно реализовать следующую функциональность.
- Клиентская сторона: приложение для iOS (и Android), вызывающее веб-сервис
- Серверная сторона: веб-сервис в Goolge Cloud.
На стороне сервера должен быть HTTP/2, TLS 1.3
IBM Kitura позволяет очень просто сгенерировать клиентский код для Android и iOS для связи с сервером SwiftNIO.
Приложение MacOS Kitura - действительно мощный и простой способ создания определения службы и генерации кода клиента и сервера. Сервер 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) хорош из-за приложения MacOS 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) 400000 ГБ-секунд памяти, 200000 ГГц-секунд вычислительного времени 5 ГБ выход в сеть в месяц Макс. Длительность функции = 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 для Cloud Run + Golang CloudFunction должна быть наилучшей возможностью.
1 ответ
Cloud Run не поддерживает потоковую передачу HTTP/2. Он должен иметь современные шифры.
Я запустил Swift на Cloud Run ( вот пример использования Protobufs и клиент / сервер swift). Это использует Kitura.
Запуск будет, вероятно, дешевле, чем GCF и GAE, из-за параллелизма и отсутствия обрыва счета. Производительность холодного запуска, скорее всего, будет одинаковой для Go и Swift, потому что они оба запускают двоичные файлы, но я признаю, что не
ATS не должен быть проблемой, так как Run делает SSL для вас (и .app
домены довольно аккуратны, так как я считаю, что они требуют SSL и HSTS).