Быстрый тест новой среды сетевых приложений Apple SwiftNIO, управляемой событиями, с размышлениями о платформах Kitura / Vapor / Perfect evolution и Service Mesh, таких как Istio.

Сегодня Apple выпустила SwiftNIO, кроссплатформенную платформу для асинхронных событийно-управляемых сетевых приложений с открытым исходным кодом для быстрой разработки обслуживаемых высокопроизводительных протокольных серверов и клиентов, и я немедленно провожу быстрый тест, чтобы убедиться, что он готов к использованию в production для разработки более быстрых Rest API и микросервисов на Swift.

Используя слова Apple, SwiftNIO похож на Netty, но написан для Swift.

Я попробовал и вау, это, конечно, потрясающе, а модель Async I / O - Event Loop, вдохновленная Netty, Node.js и другими фреймворками, действительно быстрая, очевидно, в 2/3 раза быстрее, чем текущие веб-фреймворки на основе Swift.

Но, сравнивая его с Netty, особенно как «платформу приложений», SwiftNIO не стремится предоставлять высокоуровневые решения, такие как, например, веб-платформы, а текущий API слишком металлический, чтобы использовать его для прямого создания REST API и микросервисов в целом. .

Настоящая цель SwiftNio - предоставить базовую асинхронную, неблокирующую среду выполнения, управляемую событиями, для следующего поколения веб-фреймворков на основе Swift, таких как Kitura, Vapor, Perfect и других.

Но, ожидая появления этих новых фреймворков, поддерживающих SwiftNio, я за час реализовал очень простой веб-фреймворк PoC, просто чтобы запустить какой-нибудь высокоуровневый тест.

Исходный код этого супер-проекта тестовых веб-фреймворков SwiftNio доступен в этом репозитории на github:



По сути, с множеством действительно плохих ярлыков и множеством, действительно большим количеством недостающих функций я смог реализовать супер простой, но в то же время супер производительный Rest Api на основе SwiftNio с моделью программирования, очень похожей на существующую веб-платформу Swift, поэтому во многом Экспресс вдохновил.

Это простой код для реализации с помощью этой супер простой платформы REST GET API с поддержкой Codable, как в Kitura 2 / Vapor 3:

Исходный код для этого супер простых классов PoC Server, Router, Handler находится на github выше.

Как уже было сказано, здесь отсутствует очень много вещей, еще раз это очень грязный PoC, реализованный всего за час, но я хотел бы поделиться здесь своими мыслями о том, чего действительно не хватает в этой структуре SwiftNIO и каковы возможности.

SwiftNio в настоящее время поддерживает только HTTP1.1, но уже идет работа по поддержке HTTP / 2, и я искренне надеюсь также на сверхбыструю структуру gRPC Swift. Точно так же, как в стандартном стеке gRPC Google Java, в настоящее время базирующемся на Netty.

Но чего еще не хватает? Что в приоритете?

Я уже упоминал, что по определению SwiftNio стремится быть ядром для современных веб-фреймворков, таких как Kitura и т. Д., Позволяя этим другим фреймворкам с открытым исходным кодом портировать поверх него все удивительные функции, которые у них есть, такие как кодируемые контракты, ORM, регистратор, аутентификация / Авторизация, веб-шаблоны, веб-сеансы, CORS, сжатие и т. Д.

Но мне интересно, каков здесь предел. Сколько функций должны иметь современные веб-фреймворки, основанные на микросервисах? А как насчет обнаружения услуг, автоматического выключателя, отказоустойчивости, мониторинга?

Должны ли веб-фреймворки SwiftNio + Swift стать чем-то сверхфункциональным, поскольку в мире Java Vert.X построен поверх Netty?

Честно говоря, я не уверен, что нам нужен эквивалент Vert.X в мире Swift, поскольку современные инфраструктурные платформы, такие как API Manager, или более совершенные платформы Service Mesh, такие как Istio в современном мире контейнеров, уже предлагают полностью полиглотную поддержку высокого уровня для вещей. например, применение политик, безопасность, мониторинг, обнаружение, A / B-тестирование, автоматический выключатель, отказоустойчивость и т. д.

Итак, реальным приоритетом для меня является как можно скорее реализовать поверх SwiftNio хороший стек gRPC, поддерживающий полную потоковую передачу двунаправленного текста с высокой производительностью и полностью интегрированный с протоколом Swift Codable.

Есть добровольцы?