📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Реверс прокси: от Nginx до Kong. H&S Conclave №1

Hard&Soft Skills1:14:46

Transcription

Давайте я начну. Всех очень рада видеть. У нас сегодня первая, первый такой доклад, первое мероприятие в рамках нового формата Hard and Soft Skills Con. Мы надеемся, что этот формат вам тоже понравится и как-то хорошо себя зарекомендует. Мы будем всячески вас ангажировать, готовить доклады и выступать. Мы прямо специально, наверное, придумали именно этот формат, потому что трёп там, как будто без подготовки. В идеале должны приходить, да, модераторы, конечно, кто-то как-то готовится всё-таки, но и приходить без подготовки. Слишком много неопределённости тоже не всем нравится. На митапы, которые Soft Skills, Павел, ну, как с его слов, и тех спикеров, кого мы зовём, уже такая высокая планка. Совсем такой должен быть прям доклад большой, серьёзный. Мы подумали, что хотим что-то такое, ну, блин, 20-30-35-40 минут максимум, не сильно, чтобы обременить, но в то же время, чтобы было, не знаю, одна тема и одна какая-то, что ли, идея. Не знаю, Юра, как у тебя сегодня получится, насколько широко тему расскажешь, да. Но и чтобы доклады были только технические и готовились, готовили их вот как раз ребята из сообщества, то есть вы все. Мы даже специально сделали курс. Вот его скоро у нас первый, кстати, Глеб, привет, начнём тестировать. Это курс "Как подготовить доклад", как выбрать. Да, Юра у нас опытный спикер, лектор, поэтому мы уже Юру без этого курса. Но это всё к тому, что мы сделаем ещё и форму такую Call for Paper. Не знаю, как на конференциях. Будем очень рады, если у вас будут идеи, если будет желание готовиться, выступать, практиковать софт-скиллы, выступать вот эти вот, да, все тренировать вещи. Вот, давайте начинать тогда. Юра, передаю тебе слово.

Хорошо. Так, всё, начинаем. Время не так много, рассказать хочется, на самом деле, побольше. Значит, формат у нас сегодня будет такой. Этот формат отличается от трёпа, да? То есть, где-то полчаса я рассказываю, показываю презентации. Вот. Потом всё это выключаю, и у нас остаётся время на вопросы, на обсудить там что-то такое. Вот так будем делать. Вот сегодняшняя тема, она, скажем так, она, наверное, моя любимая вот из всех вещей, о которых я когда-либо, может быть, напрямую не вписывается. Были вопросы в такое понятие, как архитектура, да? Это скорее тема про общий кругозор, чтобы когда у вас там, если вы, допустим, архитектор или какой-то там разработчик, чтобы когда у вас возник вопрос, как можно сделать вот это. У нас будет, собственно, реверс-прокси, вот от Nginx до Kong. И, ой, сейчас секунду. Оп. Да. А, собственно, что такое реверс-прокси? Да? Ну, реверс-прокси — это когда, короче говоря, клиент снаружи из интернета идёт просто в ваше, ну, в ваше приложение, в вашу инфраструктуру. В отличие, вот, соответственно, от прямого прокси, когда вы через что-то там, через какой-нибудь SOCKS или что-то такое, вы выходите в интернет. Какая причина? Вот. И всё. Некоторые общие случаи применения у реверс-прокси. В общем-то, вы наверняка знаете, часто на них делают, допустим, терминацию SSL. То есть, кладут в одно место сертификат, и дальше уже всё шифрование по открытому протоколу. Запросы доезжают до ваших там сервисов, микросервисов и так далее. Вот. Отдача статики тоже. Передаётся. Можно подключить какое-то хранилище, и пусть прямо оттуда отдаёт. Некоторые реверс-прокси умеют конвертацию протоколов делать. Что означает? Ну, что я имею в виду под конвертацией протоколов? Это из, например, стандартного HTTP, мы конвертируем в. Вот те, кто работал там с PHP, с Python, они понимают, о чём я говорю. У нас бы такая штука, что мы как обычно через, через передаём такое. Вот. Ещё одна базовая задача — кэширование. Не, вообще ничего не буду говорить, сами всё знаете. Балансировка, естественно, балансировка нагрузки. И частный случай такой балансировки — инстансы приложений, например, на первую, вторую версию. Есть у нас частный случай применения. Некоторые, некоторые из них мои любимые на слайде. Значит, первое — это, конечно, сокращение реализации. То есть, клиент приходит к вам, он видит, как будто бы у вас там, как будто бы он находится на территории там вашей страны. Вот. На самом деле, за реверс-прокси может стоять вообще что угодно. Там может, какой-нибудь Amazon S3 стоять, давать оттуда контент. Может, там вообще приложение какое-то дикое стоять и так далее. А, одна из важнейших задач реверс-прокси, с моей точки зрения, это безопасность и защита апстримов. Что это означает? Это означает то, что если у вас есть какое-то приложение, работающее там, как угодно, допустим, на сервере приложений, то каждый запрос к этому приложению, каждый коннект к этому приложению, чаще всего для вас достаточно дорогой с точки зрения ресурсов. Потому что, ну, понятно, что всё зависит от того, как приложение реализовано и что оно вообще делает. Но обычно это поднять ядро приложения, там поднять это самое, какое-нибудь коннекты до баз данных, поднять коннекты до Redis, там, что-нибудь ещё такое. Вот. А если у вас ещё приложение прямо вообще ещё нагружено, то скорее всего, у вас могут ещё закончиться там free processes, и приложение начинает ещё форкать. А форк процесса достаточно дорогой. То есть, новый воркер пить — это дорого. Вот. Поэтому, чем быстрее мы ответим клиенту, допустим, отказом, ну, там, он пришёл к нам, а мы смотрим, он неправильно пришёл, чем быстрее мы его там что-то с ним сделаем и, допустим, не допустим его апстрим, то есть, сугубо приложения. ВМ также авторизацию, аутентификацию подключается туда. Туда же подключается. Туда очень удобно выносить, потому что, как вы понимаете, на приложении, в самом приложении, это уже поздно, потому что запрос уже туда прилетел. Мало кто знает, это буферизация запросов-ответов. Значит, иногда на собеседовании, допустим, могут спросить, а зачем ставить перед Nginx, вот, или там перед ещё чем-то, что отвечает, по сути, по HTTP протоколу. Вот. И ответ очень простой, на самом деле. К вам может прийти медленный клиент, прям очень медленный. Он может быть медленным по каким-то своим техническим причинам, сидит из Африки, из бедной деревни. Вот. А может быть злоумышленник. То есть, он может быть медленным специально. Нарушен. Вот. И соответственно, представьте, что он получил включение к вашему приложению и начинает слать свой запрос там по одному байту. Вот. Он шлёт, шлёт, шлёт, шлёт. Ваш приложение продолжает держать коннект, потому что вроде как данные какие-то поступают. А он всё шлёт медленно. Вот. И потом, соответственно, ваше приложение, допустим, обработало запрос и ответило, и он по одному байту в час начинает считывать. Вот. Поэтому очень выгодно сделать буферизацию запроса. То есть, сначала получить от клиента весь запрос, там хоть там за полчаса, потом быстро отдать приложению, получить быстрый ответ от приложения, и соответственно, уже отдавать клиенту в ту, с той скоростью, с которой клиент это может считать.

Юра, у нас есть вопрос в чате. Что такое апстрим?

Что такое апстрим? Смотрите, ну, как бы, апстрим — это то, что находится выше по течению, да? Ну, английское слово "upstream". То есть, смотрите, у вас запрос, когда поступает в систему, допустим, на реверс-прокси. Вот реверс-прокси обработал, и дальше этот запрос куда-то передаётся. Ну, например, на ваше приложение. А там, что у вас там? Какой-нибудь там, не знаю, сервер, там, этот самый, какой-нибудь крутится там на Python, или там FPM, PHP FPM обрабатывает, или там с каким-нибудь модулем внутри, там. Вот. Ну, вот это как бы называется общим словом апстрим. То есть, запрос пришёл как бы внизу по течению, в устье. Да, это называется реки. Вот. И если его пропустили, если всё хорошо, то поплыл вверх, вверх, вверх по течению. И как раз вот апстрим, то есть, вверх по потоку. Вот это то, что находится дальше туда. Ответил на вопрос? Ну, наверное, постарался ответить. Едем дальше.

А вот, значит, теперь по поводу темы сегодняшней лекции. Значит, я очень люблю Nginx. Я его люблю настолько, что когда-то, в общем, коллеги уже придумали забавную, весёлую игру. Вот. В общем, я очень часто предлагал сделать что угодно на Nginx. Вот. И потом, понятно, я уже отказался от этой идеи. Но это было, а, очень-очень часто. Вот. Потому что Nginx. Кстати, Nginx — это, ну, с моей точки зрения, прям очень классно написанное приложение. А, про которое, собственно, про это приложение и его экосистему, и его друзей, форки и так далее, мы, собственно, сегодня с вами поговорим. Вот. Поэтому сразу дисклеймер. Сегодня мы будем говорить только про Nginx и его, вот именно всю эту экосистему. Есть много других там реверс-прокси и так далее, там балансировщики. Ну, некоторые из них я на экране выписал. Они многие хороши, но говорить там про каждый из них в отдельности, во-первых, времени не хватит, во-вторых, вы все уснёте. Вот. Поэтому сегодня я попробую раскрыть только одну очень узкую тему, именно про экосистему. Итак, что это такое вообще, да? Продукт, созданный в России Игорем. Изначально, потом разрабатывался компанией. Вот. Он суперлегковесный, с рождения модульный. Прямо сразу написали модули, и офигенно получилось. Он в установке, в конфигурировании. Как бы, вот буквально одну вещь понять, как он работает, и прямо он очень простым становится. Он умеет конвертировать протоколы. Сразу скажу, не все реверс-прокси умеют делать конвертацию. Вот ту самую, допустим, там из HTTP в, ну, там, FastCGI. Вот. Не все это умеют делать. Многие просто умеют только передавать один в один. Вот. А из коробки, с моей точки зрения, покрывает примерно 80% всех потребностей, которые вам только могут понадобиться. Вот. Остальные 20%, которые у вас ещё могут возникнуть, их уже можно покрыть другими модулями. Может быть, [музыка] самописцев, что вам может потребоваться так или иначе, покрывает. Значит, теперь по поводу конфигурации. Вот для того, чтобы понять вообще, как у Nginx конфигурация устроена, нужно знать, да, собственно, две вещи. Да, а, что каждая директива в его конфиг-файле обрабатывается каким-то модулем, и очень важна фаза выполнения. То есть, вот запрос проходит, как сейчас на картинке нарисовано. Вот у Nginx есть несколько фаз выполнения. Вот. И каждый модуль обрабатывает эту директиву на той фазе, к которой этот модуль прикреплён. Вот. Я сейчас прямо сразу конкретный пример приведу. Значит, сейчас, надеюсь, есть у нас программисты в чате. Вот. Представьте, да, ну, некий, вот пример конфиг-файла. Значит, видно, что я устанавливаю какую-то переменную, а, в значение там 32, и вывожу её, да. Вот. А потом устанавливаю 56 и делаю там тоже вывод переменной. Вот. Вот как бы, ну, вопрос будет, почему это всё работает. Вот. На самом деле, работать будет следующим образом. Директива принадлежит модулю, который, собственно, отрабатывает на фазе. Поэтому сначала отработают оба. Вот. И дальше директива "echo" обрабатывается модулем там, что-то такое "echo", что-то там он отрабатывает на фазе контента. Вот. И, соответственно, у вас будут сначала, потом "echo", "echo", и, соответственно, результат будет 56 и 56. Вот. Что может ввести сначала в заблуждение. Но на самом деле, вся фишка только в двух вещах: каждая директива обрабатывается конкретным модулем, и очень важен порядок выполнения. Вот и всё. А, опять же, значит, это может немного сбивать с толку, но у Nginx отличная документация. Я гарантирую, что там всё это описано. Вот прям документация супер. Читайте внимательно. Она даже не очень длинная. Вот. Едем дальше.

Значит, сейчас мы с вами займёмся немножко нетрадиционной арифметикой. Я возьму и попробую немножко поскрести с ним различные сущности. С правой колонки, которые сейчас на экране есть, начинаем конфликт интересов [музыка] заканчивая проми и там, убирая плагины. Вот. Давайте попробуем послать. Значит, первое, самое простое — конфликт интересов. Были у нас в первом, то ли втором году определённые события, связанные с тем, что Nginx был куплен компанией F5. Компания F5 вывезла его там, запретила его, короче, в России, и уволился. В общем, там сложная история. Вот. Хотите, найдёте в интернете. Но привело это к тому, что команда поделилась. Вот. В каком соотношении, честно, не знаю. Вот. Но много разработчиков, бывших разработчиков компании, они, в общем-то, из компании F5 вышли и основали свой проект под названием OpenResty. То есть, фактически это, это прочный, причём не только как бы офигенный. Вот. Но он ещё супер активно развивается. Вот. Он Open Source, плюс у него есть ещё, в общем-то, коммерческая версия функционала. По сравнению с обычным Nginx, там реально куча. Его можно втыкать. Вот. Drop-in replacement. Да, прямо вот если у вас есть где-то, то вы можете просто убрать, поставить туда, и у вас всё будет работать. Конфиги те же самые. Вот. Production-ready. Я уже использовал на нескольких проектах. Супер классная вещь. В общем, рекомендую к использованию. Единственное, значит, нюанс, на который следует обратить внимание: компания-производитель зарегистрирована в Российской Федерации. Поэтому, если в вашей компании стоит, скажем так, запрет на использование продуктов Российской Федерации, то, ну, просто, соответственно, вряд ли вам получится его использовать. Вот. Хотя он там Open Source, и они стремятся к выходу на международный рынок. А дальше, значит, модули. А, как я напоминаю, в Nginx на модулях держится всё. Вот. С какого-то, с очень древнего ещё времени, там появились у нас динамические модули. То есть, вы можете взять модуль откуда-то, скачать, там, не знаю, с репозитория, там, скомпилировать или просто взять готовый, подключить его. Подотри там Load module. Например, вот Load module, Nginx Hotel module — это, собственно, у нас он телеметрия так подключается. А, там есть некоторые нюансы. Вот. То есть, если вы будете собирать модули с нуля, то скорее всего, он у вас сначала не заведётся, потому что Nginx такая классная штука, которая, если видит, что модуль был собран не с теми флагами конфигурации, с которыми был собран сам Nginx, то могут оказаться с ним работать. Короче, там есть, ну, в общем, это, наверное, детали. Я на них не буду задерживаться. Но вы будете использовать Docker. Вот. Там все нужные флаги уже включены, и вы просто можете собирать модули туда, и там они отлично работают. Вот. Просто берёте, ищете нужный модуль на GitHub, его компилируете, получается суперкласс. Добавим к модулю. Вот. Я сейчас возьму, собственно, модуль авторизации и директиву. Одна из директив, которую обрабатывает — это директива `auth_request`. Значит, что у меня сейчас на экране? Значит, есть некий первый, директива идёт `auth_request`. То есть, каждый запрос, который приходит мне вот в этот, там, допустим, в корень, и едет, собственно, в подзапросом в отдельный внутренний `location`. Вот. `location validate` в свою очередь делает `proxy_pass` на, ну, некий адрес. Почему я её так здесь написал? Потому что это может быть legacy-контейнер. То есть, вы у себя на машине размещаете, например, какой-то либо Docker-контейнер, либо просто отдельный свой там сервис с суперсложной логикой авторизации, и, собственно, вот таким вот образом одной директивой `auth_request` вы пользователя, допустим, прогоняете через авторизацию. А если этот ваш, собственно, модуль, ну, вот этот ваш сервис авторизации, там вернул что-то типа там 401, сходи залогинься, то вы просто возвращаете 302, логинься. Вот. Там, если всё хорошо, если пользователь валидирован, то `proxy_pass` вообще на S3 и отдать ему какую-нибудь статику. Вот так вот я из коробки сейчас сделал отдачу там какого-то статического контента только через, через авторизацию. И конфигурация это здесь не просто так. На ней, в частности, работают. Есть такая штука, OAuth Proxy. В общем, многие решения, потыкать. Даже через внешние сервисы вы можете там сделать вход в ваше приложение с логином через, через Google, через всякие вот эти вот внешние провайдеры. Вот. Вы можете сделать штатно на готовом же. Не потребуется ничего отдельно там компилировать, кроме того, чтобы скачать один Docker-образ с подходящим прокси. Вот так работают модули. Вот это штатный Nginx модуль. Есть ещё не совсем Nginx. Луа. А это язык с очень-очень-очень сильно заниженной самооценкой. А под этим я подразумеваю то, что когда у нас языки новые обычно выходят, там каждый из них пытается быть круче, чем кто-то другой. Там был у нас какой-нибудь C++, вышел Go, сказал: "Мы там лучше, мы там мощнее, но при этом не надо там что-нибудь с памятью вазюкать". А потом ещё какой-нибудь язык там сказал: "А я ещё лучше". Вот. В общем, такое идёт определённое соревнование. Хайп. Стоит там в этот год изучаем Go, в другой изучаем, в третий там Java, какая-нибудь популярная. Вот. Про Lua почти никто не знает. Вот. Lua изначально создавался встраиваемым языком. То есть, это язык, который работает, грубо говоря, в чайниках. Вот. Но если быть точнее, не в чайниках, а он работает внутри этого самого, встраиваемый, где вот. А, то есть, в таких компонентах, в инфраструктурных, вы просто его не видите, а он на самом деле у вас окружает со всех сторон. Вот. Язык, кстати, довольно мощный и очень похож на Go. Если интересно, почитайте документацию, он вам понравится. Там корутины, вся эта история. Вот. Если к Nginx добавить Lua, естественно, в виде модуля. Как вы понимаете, да? То есть, мы просто берём и в Nginx говорим `load_module`, там, Lua, по-моему, да, он называется. Вот. То мы получаем сразу целую линейку продуктов. И это не все, которые я здесь перечислил. Здесь просто основные. А, Nginx Plus — это коммерческая версия Nginx. Nginx Ingress — Ingress контроллер для Kubernetes. Вот. Тоже многие из вас, кстати, его знают, те, кто особенно с Kubernetes работал. Это один из стандартных контроллеров для стандартных Ingress для Kubernetes. Вот. Это просто обычный Nginx, обвешанный внутри модулем Lua. Вот. Это OpenResty. Про него чуть подольше, чуть попозже расскажу. И тот самый, про который тоже сегодня пойдёт разговор. Значит, OpenResty — это такая тоже интересная очень вещь. Изначально зародился в Китае, в Taobao. Вот. Но им требовались такие достаточно нагруженные вещи. То есть, там, допустим, динамическая балансировка апстримов и так далее. Вот. И там один джентльмен с ником Agent Zhang, собственно, написал, ну, создал такой продукт. Это не, это не форк Nginx. Это просто обёртка. То есть, это фактически Nginx, в который воткнут модуль Lua. И внутри, собственно, вертится всё на языке Lua. А поскольку эта штука пошла в целом в народ, все, всем очень понравилось. "Ух ты, классно, внутри Nginx можно писать, оказывается, какую-то логику, причём логику достаточно сложными местами". А, народ навалился и начал писать модули. Вот. И модули там есть реально для всего. Есть модуль для общения там с базами данных, с SQL, с PostgreSQL умеет общаться, умеет общаться с Redis. Есть шаблонизатор, есть, короче, всё. Вот прям реально всё есть. Вот. Дальше, под эту же штуку тот же самый Agent Zhang написал пакет, пакетный менеджер, который назывался LuaRocks. Вот. А потом он ему не понравился, и он сделал ещё один. К сожалению, у этой штуки есть минусы, про которые [музыка] вот. Значит, просто это просто короткий пример. Это вообще, на это можно внимание не обращать. Значит, примерно, примерно вообще, как происходит работа с Lua внутри конфига. Вы просто берёте конфиг, пишете туда вот такие директивы. То есть, там же, где был, допустим, у вас `proxy_pass`, вы можете писать и, собственно, `content_by_lua_block`. И Nginx сделает, выполнит какой-то код, который у вас написан внутри. А вот то, что сейчас на экране, это просто кусок конфига, который я использовал. И, ну, как бы, да, использовал для того, чтобы смотреть, ну, исследовать, как вообще в Nginx фазы запроса ездят. То есть, когда, какая, из какой куда переход возможен и так далее. Я просто подключил туда Lua, и, значит, в лог выводил, собственно, эти самые фазы запроса. Вот. Вообще ничего сложного. Просто цепляемся на фазу, и готово. Вот. Но, к сожалению, есть определённый хаос в экосистеме OpenResty. А, связан он с тем, что разрабатывает его, ну, врать не буду, но один-два там человека. В общем, мало людей там. И поэтому многие классные вещи, они вроде как начинаются, но потом куда-то пропадают. То есть, например, э был язык, потом народ решил, что что-то какой-то сложный язык. Хотя нормальный совершенно язык. Вот. Обёртка для программиста будет довольно привычна. Вот. Но потом решили, что он какой-то слишком замороченный. Изобрели. Был один замороченный язык, стал два. Зародыш языка. Вот. То есть, Ringo, он компилируется в байт-код. Потом его лично создатель объявил устаревшим, сказал, что теперь у нас будет OpenResty. И, соответственно, часть модулей осталась в репозитории, часть модулей переехала на OpenResty. Но не все. Поэтому все стали использовать и одновременно. А потом, короче, перестал быть вроде как заброшенным. Ская, их очень много, но прям часто очень часто они просто заброшены. То есть, последний коммит, грубо говоря, когда туда был, там 18-м году. Вот. И пользоваться ими или нет, но это прям очень сильно на ваш страх. Вот. К счастью, у нас, как обычно, есть, естественно, репозитории. Там, ну, вот я вот первый, произвольно нашёл. Там, знаете, вот эти репозитории с префиксом `openresty-`. Вот. Там есть, собственно, список каких-то модулей. Вот. Вот этим работаем с авторизацией, этим работаем с Redis и так далее. Но практиков несколько ссылок. Я понял, что в общем, этот репозиторий тоже оказался заброшен. Никто за ним не следит. Вот. А из интересного, просто что хочу сейчас показать, это проект Lapix. А, ссылка, собственно, последняя. Выглядит он примерно вот так, как вы видите. В общем, ну, я думаю, любой программист, не зная языка Lua, он просто поймёт, что здесь написано. Lapix — это полноценный фреймворк MVC. Там есть модели, там есть контроллеры, там есть view, там можно рендерить, там можно статусы возвращать. В общем, и обрабатывать ошибки. Вот. Всё очень круто. На Lapix можно писать полноценные приложения и запускать их прямо в Nginx. Вот. То есть, всё, короче, больше вам не нужны там PHP. Можно писать прямо там и там его запускать. Вот. Ну, кроме того, что потом обновлять будет немножко сложно. Вот. Значит, но как бы Lua мало людей знает. На самом деле, и ещё меньше хотят его изучать. Возьмём JavaScript. Да. Вот JavaScript все любят. Вот. JavaScript — это язык с очень завышенной самооценкой. В том смысле, что JavaScript пытается быть везде. Когда он работал на клиенте, было. Когда он начал работать на сервере, ну, так стало уже так странно, да, что-то он на сервере делает. Вот. Но сейчас JavaScript пошёл в инфраструктуру. Вот. И, собственно, если добавить тот же самый JavaScript к Nginx, мы получим модуль. Пожалуйста, вы внутри конфига, штатный модуль Nginx. Кстати, это создатели сделали. Вот. То есть, совершенно официальный модуль. Вы внутри конфига можете писать на JavaScript, если он вам нравится. Вот. Вот пример с `echo`, где делаете какой-то вызов, вывод. Вот, пожалуйста, как. Если хотите, для простых случаев совершенно нормально может вам подойти. Понятно, что когда начался хаос весь этот, но роутить запросы и так далее, вот, появилось у людей желание всё это как-то обуздать, взять в какую-то структуру, да, чтобы было понятно, где должен лежать модуль, как модуль должен обновляться, как модули должны взаимодействовать между собой, какие права у этого модуля. И как только, собственно, появляется структура, да, мы все получаем некоторый фреймворк. Делить, что у нас есть как бы набор библиотек. Ну, бывает так, что у вас есть просто набор пакетов, набор модулей, набор библиотек. Вы там, ну, как-то сами что-то куда-то складываете. Но как только у вас появляются определённые правила, что, допустим, контроллеры лежат здесь, view лежат здесь, а код мы пишем по таким правилам, то это можно назвать уже фреймворк. И появилась такая штука, как, собственно, ссылка на документацию я привёл отдельно, потому что если вы зайдёте, собственно, на, ну, просто на сайт Kong, то вы закопаетесь. Это достаточно большая компания с большим количеством продуктов. Вот. Поэтому я сейчас буду говорить только про Gateway. И ссылка на него идёт первым пунктом в моём списке. А, тоже есть там Enterprise Edition, Community Edition, своя огромная экосистема, включая там, где можно хранить плагины. Под Kong есть управление через API, есть управление через графический интерфейс. В общем, если хотите, зайдите, почитайте. Там прям море всего. Такая штука очень-очень прокаченная получилась. Вот. Но внутри, внутри на самом деле это выглядит так. Несмотря на то, что он там и через UI управляется и конфигурируется API, в итоге всё это, вся эта конфигурация в Kong уже известные вам стадии, там стадии `rewrite`, `access`, `header` и так далее. Просто на них стоят, собственно, обработчики хуков, где указан там `kong.access` и так далее. А вся остальная логика уже творится внутри а этого огромного программного продукта под названием Kong. Вот. Вот такая вот интересная штука есть. Ну, я не совсем его люблю, но опять же, внимания он заслуживает. Сразу скажу, вещь довольно интересная. И, так сказать, вне общей темы, вне основной темы нашей реверс-прокси, хочу рассказать про ещё одну, про ещё один программный продукт из экосистемы, который прямо вот на 200% заслуживает вашего внимания. Всё живое. Если к нему добавить Lua, получим продукт. Это вообще отдельно решение, создано в той же самой компании. То есть, это тоже его создал. Что это означает? Это означает, по сути, с модулями, с языковыми модулями внутри. Вы можете туда написать там код на PHP, код на Python, там на.

И на самом деле, на любом компилировать это туда с помощью специальной конфигурации, и эта штука вам заменит очень много чего. Аа, она даёт огромный, совершенно прирост по сравнению, например, со связкой со стандартной Jin + fpm, просто даже за счёт того, что не требуется нам конвертации протокола. Вы просто обычный HTTP там S терминируете и передаёте в HTTP обычный. Вот. Плюс, если вы работаете с микросервисами, аа, вот ППШ сейчас меня поймут. Значит, есть там определённая боль, что, если вы работаете с Application сервером ХП fpm, который у вас занимается обработкой кода, то вам перед ним обязательно нужно ставить что-то, что умеет работать. Ну, чаще всего ставят. Вот. И получаем опять два компонента. А ещё непонятно, как что куда раскидывать. Да, потому что вроде как и в один контейнер лепить плохо, а в один контейнер, в другой получаем сразу. Вот. Вот эта штука, если не потри конрат и поддерживает довольно актуальные версии языков программирования внутри. Вот эта штука совершенно точно заслуживает вашего внимания. Кто работает с микросервисами и запихивает их сам в контейнеры, пожалуйста, обратите на неё ваше внимание. Так и, собственно, всё. Я даже уложился ровно в полчаса с учётом того, что мы начали в 6 минут. Вопросы? Так, я сейчас презентацию. Оп. Ага. Теперь я всех вас вижу. И так, у нас в чате много сообщений. Что такое? Так, не может. [музыка] Не, на самом деле, давайте так, по ачу. Да, сейчас. Так, так, так. Давай. Есть контакт. Да, есть. Спасибо. Много, быстро, чётко. Ну, да. Вопрос как любишь. Мы уже поняли. И тогда закономерный вопрос: почему не чем лучше, чем лучше, когда использовать то или другое? С моей точки зрения, это просто банально дешевле. Да, то есть у нас смотрите, каждый процесс Ача. Да, ну, фактически. То есть, в чём, в чём моя идея? То, что у вас есть вот это самое какое-то приложение. Да, пусть это там с чего-нибудь внутри, там какой-нибудь, да, там PHP. Вот. То есть, он когда отдаёт от себя воркера, который будет обрабатывать это запрос. Самый вокер, на который, собственно, будет этот самый придёт коннект. Вот этот воркер довольно тяжёлый, внутри много памяти. Вот. Плюс, если у вас там ещё и приложение запустилось, да, то, соответственно, то, о чём я говорил, все эти коннекты bbd. Вот. Действует очень просто. Да, он такой, получил соединение, перекинул его на этот самый, на свою механику полинга. Вот. И ждёт, пока к нему запрос придёт. Вот. Единственное, значит, смотри, см. Я работал тоже достаточно давно, может быть, в последних версиях, в новых появился какой-то там. То есть, у него, у него сейчас, по-моему, две, что ли, как-то форка более сложно, чем он делал раньше. Так, про не знаю, есть ли смысл в кон. Сейчас, подожди. Смысл в кон, когда для кубера вышел, ино вообще нет. Ну, ладно, давайте так, с этого начнём. Да, потому что всё-таки, скажем так, да, есть уже там и gway, и ингресс, другие. То есть, кон же ещё инс тоже. Вот. И скоро выйдет ингс от ребят из нжи. А, ну, то есть, я как бы какого-то смысла не вижу. Но в основном потому, что с моей точки зрения, даже если все продукты одинаковые, то очень многое зависит от коммьюнити. Вот. То есть, там по тому же самому или по у нас дофига будет информации в интернете. Вот. Ко он больше где-то на востоке. Ну, в общем, не знаю его распространение. Вот. Но там будет информации меньше. В платная чего не хватает? В автоматическое обновление бесплатных сертификатов из коробки. Чего? Вот. Вот этой штуки не хватает в. Но она уже есть в NG. Вот. NG умеет автоматически получать сертификаты через lpt. Да, в общем-то, я как-то забыл. Я аббревиатур то я в слайдах поставил, но это есть. Вот. И если что, там в, как их зовут? Господи, ну, в Каде, в Ка, в Каде 2 тоже есть, если что. То это всё пользуется по. Если сравнить с модулями готовыми, полностью интерпретируемым по скорости, честно, знат, прям совсем перфотеста не гонял. Ну, то есть, вообще не гонял. Да, есть, допустим, с ком и ком по скорости не сравнивал. Вот. Но лу, как вы понимаете, прям сильно будет проще обновлять с точки зрения того, что вы там в репу зашили, она в качестве конфига выкатилась, вам сразу раскатились, допустим, на все ваши ноды и и всё. На этом, в общем-то, всё обновление завершено. Какие бывают л? Слу, слу, конкретно не знаю. Но кроме того, что такой немножко своеобразный язык с точки зрения си. У меня были определённые проблемы с Open. Плюс там несколько модулей сильно текла память. Чья это, чья вина, не знаю. Вот. То есть, либо модули были так сделаны, либо там с какие-то были проблемы, либо была проблема в том, что в оресте там устаревшей версии 326. [музыка] Здесь тоже была проблемка. Есть, но нет проко. То есть, не [музыка] было в ка. Может быть, успело появиться. По-моему, планы у них на это были. Так, давай. [музыка] Ну, поправь, если я не прав. Насколько я помню, вообще изначально разрабатывался как средство, которое лучше отдаёт статику. И, по-моему, так и было. То есть, поэтому, если выбирать там передачу статики, то лучше обратиться к гинсу, чем чу. Так, по поводу статики. Есть у меня определённый комментарий. Ост счёт этого самого механики. Там у него есть опра механизм, не помню, как называется директива. Короче, он просто отдаёт её. Берёт запрос, понимает, какой статичный файл ему отдать, направляет на него поток, говорит: "Всё, забирай". А сам уходит дальше запрос обрабатывать. Вот. Но, честно, я в своей жизни не встречал проектов, где статику нужно было отдавать так быстро, чтобы с ней не справился любой другой сервер, хоть apch, хоть там какой-нибудь там ка и так далее. Ну, то есть, статика она не такая у нас прям тяжёлая, да, чтобы её прям нужно было отдельно как-то выносить. То есть, если у вас есть какой-то маленький сайк там на там 100 человек там в секунду, не знаю, то Ну и вот, вы просто там, если где-то прочитаете, что там надо обязательно ставить, что стать там туда, прям не очень большой. Вот. У нас в основном база данных, всё-таки са приложение м. Даёт м десятки сся раз превышающие затраты на статику. Здесь скорее всё-таки представьте, что вы работаете в связке п, там, например, тот же самый. Вот. И он умеет делать, допустим, там прох определённое количество таких горячих процессов воркеров, которые будут сидеть уже в памяти, форк и ждать запроса. И там по запросу, если там начинается, если ворке начинает заканчиваться, он умеет ещё там отстреливать ещё определённое количество холодным форком. Это немножко тратит ресурсы, но всё-таки так или иначе он их форка. Вот. И каждый это процесс, он для вас будет стоить. Вот. То есть, соответственно, если вы допустим сделаете мит на уровне приложения, то это означает, что злоумышленник уже прошёл к вам в приложение, захватил один из ваших воркеров там вашего Application сервера, и этот воркер поднял там ядро, подгрузил се какие-нибудь руты, подключился к базе данных, что ещё только сделал, и собственно после этого такой: "А, ну да, т сходил там в свой редис, посмотрел, что-то много от тебя запросов поступает, дружок. Вот тебе там 400 какой-нибудь ответ. Вот. Иди подумай". И, ну, то есть, смысл немножко как бы с моей точки зрения теряется. Вот. Так, статика. О зла. Здорово. Вот, статика кэшируется на каждом этапе. Да, но есть, короче, поверх CL обычно стоит. Вот. И она там тоже руется. А так, Глеб. Давай, жги. Я не очень понял. По последнему этот Unit, что там, в чём запускается? То есть, не пон, что Java в нём запускается, один проект. Что? Да. Что это? Я на самом деле сам. Я на самом деле сам. Аа, ну, я пока ещё, то есть, не лазил, да, внутрь. Значит, что это? Это просто, это чистая магия счастья. А это м НС. А, ну, скажем так, некая такая очень версия джинса, если я вообще не путаю. Он, по-моему, вообще на го написан. И собранные, собранные, значит, соответственно, эшки от языка, допустим, от там PHP. Вот. То есть, вы получаете фактически обычный образ, как вот там PHP, допустим, ну, если о докере говорить, да, я сейчас только о докере буду говорить. Вот. И внутри него ещё какая-то штука, которая является веб-сервер. Вот. И с вами работает по http протоколу. Вот. То есть, вы реально шл на там запросы. Вот. Она, соответственно, работает с [музыка] с модулями вашего языка. И, собственно, эти запросы обрабатывает. Наверное, ближе всего. А, ну, я просто так, для своего личного спокойствия. А, я бы сказал, что ближе всего это тот самый, значит, ач с собранным там мода. Там и название языка, допустим, мо Пел. Да, мо PHP, мо там ещё какие-то были языки. Вот. Вот такая штука. Вот. Но это непа, это Джинс. Но вот с мод язык. Следующий вопрос, наверное, будет: чем это отличаться от обычный дн плюс мо? А это раз. Ну, получается, что мы не можем использовать как балансе в этом случае? У нас просто связка ин и один только приложени. А как мы тогда развяжем? Значит, во-первых, балансе, всё-таки чаще всего это отдельные. Вот. То есть, если, короче, если любить, как я его люблю, вот, можно просто взять верховный. Вот. Сказать: "Ты будешь штуки понят". В сто, соответственно, там, допустим, туда поставить минирование. В случае, он из них будет обслуживать там второй, третий вообще. Вот. И, соответственно, просто работать как вот. То есть, разные суно. Не, хотя, скорее всего, он есть. Есть там тоже можно повороти. Он тоже сильно развивается, прям очень динамично. Он развивается, и когда-то там, допустим, нельзя было. То есть, он был та чисто вот прям вот типа яве и всё. Вот. То есть, обрабатывают только запросы. Вот. Но потом в какой-то момент, насколько я помню, там пролетела возможность ещё гоняет основной. Но при этом ещё умеет код выполнять. Поэтому, когда вы меня спросили сейчас, спросил, что это такое, я сам пока, честно, не могу дать ответ на этот вопрос. Это примерно как спросить, а что такое консул? Да, тоже мало будет. Да, пишет, что делать не надо. Даже не умеет инар. Золот не умеет. А по-моему, уже умеет. Ну, в общем, не знаю. У нас всё, короче. У нас всё, как обычно. А в этом мире движется такой. Мы из UN превращаемся в что-то. То есть, мы, значит, сначала создаётся супер классный инструмент, допустим, голын, который говорит: "Всё, я короче умею только статику и реве прокси и всё". Вот. Потом возникает необходимость. Мир движется постоянно вперёд, как вы понимаете, да? И, допустим, вот я сейчас просто вам приведу пример. Простой в нсе в обычном есть возможность балансировки по нескольким астрим. Ну, по нескольким эндам. То есть, вы пишете там: "Вот у меня там есть три инстанса одинаковых моего приложения. Вот, пожалуйста, по ним по всем трём балансируют". Классно, классно. Но вот оно год работает, два работает, а потом приходят ребята и говорят: "Слушайте, тут такое дело, а как бы нам сделать то же самое, только по неизвестному количеству стримов, которые ещё будут динамически меняться? То есть, у нас, допустим, автон есть. И как это сделать, если у нас в конфиге жин это всё статично прописано?" Вот. Первое решение, которое ВТО используем: шаблон авторегистрация автопилота. Да, который будет новые, новые ы регистрировать в консуле. И используем какое решение типа ко, которое будет конса динамически само перерисовывать. То есть, оно сидит, наблюдает за какой-то базой данных. Как только в базе данных появятся изменения, оно динамически перет корат. Работает ИП. Да, но костыли. Это да. Костыль. Вот. И, соответственно, появляется бы желание сделать не костыль. И вот уже у вас на реверс прокс появляется какая-то логика. Да, то есть какие-то там какое-то программирование. Вам там нужно немножко по программировать. Вот. [музыка] Хочется, вот знаете, хочется сделать, допустим, что Rate limit. Ну, вот чуть-чуть более сложный, чем обычно. Вот. И, допустим, ну, где бы нам это хранить? Ну, в shared Memory как-то что-то не хочется. А вот бы нам, допустим, сходить в какой-нибудь редис. И вот уже у нас появляется влу мо для редиса. А год за годом, и вот уже у нас есть полноценное решение, которое никто не знает, что это такое. С одной стороны, вроде как Проси, а с другой стороны, он настолько обман логикой, что на нём можно писать полноценные приложения. Вот. Как также примерно, как насле можно писать полноценное приложение без использования каких-то других языков программирования. Вот. И общение по нему будет происходить по протоколу. Ну, просто вызовам удалённых процедур. Привет. У меня такой вопрос. В общем, по reverse proxy. Может ли это являться какой-то одной точкой отказа? Потому что если мы конфигурируется [музыка] Так, насколько это на практике проблема? Ну, в твоей практике, в частности. Ну, любое приложение, которое у вас запущено в одном экземпляре, это всегда единая точка отказа. Ну, в том смысле, что смотрите, а, допустим, возьмём тот же самый реверс, допустим, в режим балансировки. Он классно, супер классно балансирует по там де вашим эндам. Вот, прямо раскидывает вообще очень круто, очень супер. И давайте у нас, мы живём на супер классном хостинге, который никогда не ломается. Да? Вот. Но в какой-то момент у вас возникает желание обновить не знаю, операционную систему на этом балансе, или обновить приложение. Ну, или всё-таки хостик сломался, там, потеря Коти. Вот. Если у вас что-то запущено в одном контейнере, оно обязательно сломается. Ну, одном, я имею в виду, в одном экземпляре, оно обязательно сломается. Поэтому не запускайте на нагруженных системах чего-нибудь в одном экземпляре, пожалуйста. А как запускать несколько экземпляров? Я по-моему, уже рассказывал когда-то, не помню. Вот на вопросы. Да-да-да. А был, да? Вот. Я про про пла там тогда говорил, про вр, про вот эти автопереключение, там, как баз балансировать. Вот. Это страшная тема на самом деле. Реально страшная тема. Если вот, если, если вы не хотите погрузиться в без нуада, то используйте что-нибудь готовое. Там АВС. Вот. Аа, так. И у нас, по-моему, ещё было несколько вопросов из чата. Хотим, пишет нам Саша. Ну, мы тоже хотим. Все хотят. Да. Так вот, смотрите. Вопрос был из Преда. Да. В каких задачах по дизайн может потребоваться Проси? На собеседование какую логику? А какую не стоит тащить в прокси? Значит, начнём со второй части. Какую логику можно тащить в прокси? Ну, скажем так, какую логику я бы тащил в прокси. Я уже частично про это говорил. Значит, на всякий случай резюмирую. Э-э, я - как бы, я очень люблю там держать только логику защиты стримов, защиты бнв. То есть, это Rate limit, это FAW, это ну Application. Вот это FAW. Да, это всякие виды там проверок на, не знаю, запрещённые Ай пишки. Просто если интересно, значит, смотрите, что можно сделать. Да, вот так вот просто это делается из коробки там за буквально там несколько минут. Знаете, пишет логи. Логи, как вы знаете, налоги можно отравить что-нибудь такое хорошенькое, например, этот самый тун. Вот. А лучше не тун, а такую приблуду, как к. И как только к увидит, что по вашему реверс идут какие-нибудь странные запросы. Да, ну, как обычно, какое-нибудь наливают какую-нибудь сканер уязвимости, и он прям с первого запроса выдаёт какую-нибудь дичь. То есть, например, вы сейчас, вы точно знаете, что у вас там на стоит Linux, и эн у вас точно Linux. А там пролетает запрос, что-нибудь там какой-нибудь, что-нибудь из Windows, например, вытащить. Ну, такой прям очень нехарактерный запрос. Или там какой-нибудь классика по прессу запрос там ВП чего-нибудь. Вот. Это очень легко отлав с пологом, и пользователь моментально попадает бан. Вот. И он не моментально, но с первого Кока может нать попадал. И, соответственно, он вообще, то есть, вместо того, чтобы все эти запросы шли до стрима, получали там 404 какую-нибудь или там, что хуже, пяти сотую, и тем самым подгружать вам ваше приложение. Вот. Вы это просто рубите непосредственно на на реверсе. Вот. Работает прям чудесно, чудесно работает. Отвечаю. Так. Вот. В каких задачах по систем дизайн может потребоваться реве Проси? В основном на на систе дизайн задачах. Там, во-первых, где-то точно есть балансировка. И точно там может встретиться gway, iway, и что там ещё может встретиться? Да, так схода ещё не вспомню. Может быть, кто-то ещё что-то подскажет. Что ещё спрашивают, куда можно впихнуть вещи. Вот в чатик накиньте. Какой ва рекомендуете? Ко там, по-моему, там были. Значит, были готовые модули. Вот, которые прямо модулем туда [музыка] потыкать их. Не могу. Я ими не пользовался. У меня немножко другая конфигурация. Я могу поко CL всем ставить просто поверх всего всей вашей инфраструктуры. Долго и счастливо. Берёте, короче, Cloud Flare. Отправляете его в АС. И у вас у вас всё супер. Стоит ли тащить ре прокси Трай и логирование? Ес про для дублирования. А для дублирования входящего реквест на несколько. Для дублирования входящего реквест на несколько серверов приложений. Артём, я думаю, голосом сейчас проговорите, пожалуйста. Запрос. Сейчас, секунду. Значит, Саша, сейчас. Да. Слушай, у меня такой вопрос более прикладной. Короче, ну, ты плюс-минус уже ответил на него, но это самое. Короче, есть у нас в компании типа наш основной домен. Наши пользователи иногда хотят, чтобы у них был как бы свой домен. То есть, для того, чтобы типа наш там, наши доменные имена нигде не светились, они имеют возможность ти по создавать там свои кастомные домены и отправлять их на нас. Вот. То есть, они это дело создают, прописывают у нас в админке, но проблема в том, что типа, когда они это прописывают в админке, нашим админам надо ручками прямо взять и на балансе там где-то создать запись о том, что типа, вот направляй сюда. Как это автоматизировать? М вариантов несколько вижу. Э, первый вариант. Значит, использовать что-то. Если, давайте так, начнём с простой, с простого случая. Если у вас там просто стоит какой-нибудь НКС, да, условно говоря, и всё. Да. Вот. То просто убираете НКС. Не, ладно. Первый вариант. Из из палок. Да, из палок и там других субстанций. А это вы, допустим, берёте к нему прикрепляет же самый Коте. Ну, просто коче в Google. Эта штука из из базы данных строит новый конфиги. Вот. Это прямо велосипед. Второй вариант. Почти все современные решения имеют ашку. Вот. Что, что они все конгу? То есть, они постепенно, постепенно отходят от конфигурации через файлы. Причём даже если конфигурация идёт через файлы, то чаще всего это выглядит следующим образом: вы подтыбок Socket. То есть, она наруже не Открыта, но есть возможность её вытащить там чуть-чуть подальше и уже наива туда. Вот. То есть, вы фактически что делаете? Каю маленькую аминку. Туда пользователь вводит свой домен. По запросу отправляется пост запрос в опиш вашего прокси. И проси классно новый или там новый домен. Вот. Это вот так делается. Значит, теперь. А, ну, собственно, всё. Да, на этом Нано хо. Ну, там Максима. Да, но я ещё вшку не пихал. Я не гарантирую, что там эти эндпоинты есть. Но если их нет, то они скорее всего скоро появятся. Проще всего напи. Блин, на самом деле конгу проще всего напи. Но я не так чтобы люблю. Вот. Не буду, короче. Короче, пори. Давай нам с того, что посмотри, есть ли у энжи. Нужно, чтобы его перековать. Хорошо. Спасибо. Так. Вот теперь Артём с вопросом про сложным вопросом. Да. Я вообще, я нес здесь случайно, поэтому я могу задавать глупые вопросы. И это вопрос в тему к систем дизайну. У нас был проект, на котором нам требовалось дублировать запрос не исходящих, собственно НВ на несколько. На практике это были с одним и тем же приложением. Вопрос: если вдруг мы там плом какой-то какой-то из наших приложение на каком-то из контейнеров, то соответственно, он будет недоступен. Мы потеряем этот КСТ. Поэтому этого нено включить какое-то логирование, какие-то ретра, какой-то механизм трав, если вдруг у нас какой-то из контейнер исов будет лежать. А вопрос: насколько это уместно на практике? Насколько это вообще используется? Ну, если я бы это точно не делал на уровне прокси. Я бы пошёл бы со стороны задачи. А зачем их вообще дублировать? То есть, они же скорее всего изменяют какое-то состояние у системы на каждом из инстансов, верно? М, ну, например, у тебя несколько ю инстансов, и один прод - это что, uit? То есть, предп для тестирования. И если у тебя а нет возможности, например, нет доступа к м хабу, кастомер, который шлёт нам реквест. Короче, это было, это была ошка для I системы, и у нас не было доступа к самому хабу, который от сенсоров шлёт данные нам. И поэтому, но нам нужно было дублировать это реквест на несколько инстансов нашего приложения, потому что нам так было удобнее. И вот для этого мы и использовали. И собственно, какре Проси очень хорошо лёг, работал, не ломался, и всё такое. И вы сделали через через через н. Да, да, да. Ну, там, конечно, решение. Там, конечно, вопрос. Ну, это было самое простое решение. Там, конечно, вопрос, какой респонс брать, и что там, как респонс потом резолвится, если а если endp не ответил. То как вы в этом случае переобрання ломался, и всё было хорошо. Ничего и не было в SL. У нас требования, что, ну, короче, было нормально, если мы потеряем некоторые данные, потому что мы получали их там каждые 5 секунд. Даже если на 15 секунд наш контейнер и упадёт, то ничего страшного. Ну, я бы, наверное, сделал бы по-другому. Но если оно работало, не падало, не ломалось и прожилок, то А что бы и нет? Ну, оно живёт до сих пор уже года три, и нормально. Вот. Я говорил, что к штука просто супер классная. А так, перех на кубер. Да. Ролин апдейт. Э, да. Па. Да. Так, руки. Рук нет. Ещё вопросы? Так, сейчас. У меня там, по-моему, ещё вопросы какие-то были. Что такое этот ваш кон? Это значит, Саша, ты понял, что такое этот наш кон? Ну, я там постарался коротенько. [музыка] Критерии. Давайте подумаем, какие критерии. Если есть название слова торм. Вот. Не на самом. Смотрите, давайте пойдём от сложной задачи. Потому что если у вас задача там просто сбалансировать на конечное количество, то берите либо либо. Кстати, научился, если я ничего не путаю, недавно научился отслеживать стримы даже по СРВ записям в ДНС. То есть, там ребята. Вот почему я опять же начал про рассказывать, потому что это супер, супер динамично развивающийся проект. Они там уже сильно обгоняют самы Джинс даже время от времени. Насколько я помню, то есть, уже она им скидывают порек ти, ребят, у вас Т это поправьте. Вот. И, соответственно, они там уже умеют лазить там в ДС, они могут делать с и так далее. Так, далее, далее. Вот. А по сложности конфигурации он вообще не сложнее джинса. То есть, это означает, что вам примерно часа хватит на очень хорошее изучение системы. Ели у вас что-то сложное. Я бы следующее, что глянул, это, наверное, а Ели у вас в компании вообще какие-то действующие решения. Ну, там, например, вот там у вас установлен Кадди. Вот. Почему? Потому что если у вас что-то уже в компании есть готовое, то скорее всего, у вас по нему ещё и специалисты есть. Вот. Готовые специалисты, которые всегда помогут советом, помогут решить косяки и так далее. Никогда из критериев вашего выбора не убирайте, собственно, людей. Вот. Люди готовые. Ну, подготовленные люди в недалеко от вас сидящие, желательно на расстоянии звонка, хотя бы. Это очень важно. Вот. И, ну, одна из, в общем-то, тоже кстати вещей, про которые совершенно забыл. Наверное, надо наво ста прост. Нея просто так взять и выбрать какой-нибудь Кади, если вам нужно реверс на или и вот это всё. Вот. То есть, Посмотрите, поддерживает не поддерживает. Иначе вы такие: "Ой, как классно, Кади умеет сам сертификаты получать". Вот. Ну, да, это многие умеют. А вот что он не умеет, или по крайней мере, не умел так, это это, собственно, конвертировать протокола. [музыка] Вот. Ну, я бы, я бы вот на это опирался. Вот так было бы. Давай, Саша. Давай, жди. Да, я вот тут как раз-таки почитал про энжи, про А, да, у него есть А, есть у него динамическая конфигурация этих самых конфигов без без перезагрузки, без всего. Но она доступна только короче, типа в Про версии. Не класс. Да. Ну, сами понимаете, как бы, ребята Open Source, денежек тоже все хотят. Поэтому нет. А платная версия есть у очень многих, как вы знаете, да? То есть, NG, ngx Plus, NG, NG Pro, Con, Con Enterprise. Короче, ну, блин, это разработка, она денег стоит. Согласен. Вот. Так. А втоп от Игоря. Как вы следите за новостями па? Про блин. Вопрос такой, как будто я так сижу, так газету раскрываю. Алматинский. Нет, не слежу. Я за новостями слежу следующим образом: у меня появляется Каяни задача, и меня вло поение сде. Сонно, я допустим, пытаюсь это сделать как обычно. Если ураю в какую-то непреодолимую стену, то иду в Google и нахожу, есть ли что поинтереснее. Вот. А потом ещё, допустим, там, ну, нашёл жи. А потом ещё смотрю, а вообще в проде, не в проде? А какой опыт использования? А есть ли документация? А есть ли и так далее. Вот. И, ну, там можно ещё подписаться на их новости. Вот. Но я прям не настолько фанат. Я просто могу раз в пару месяцев зайти к не в бложек и почитать, что новенького заехало. Кстати, поже заезжают очень крутые штуки. Ну, прям читайте, что они там делают. Вот. Опять же, если нет политических причин не использовать продукт, который прям, а там прям чуть ли не красными буквами написано, что мы там зарегистрированы в минцифры и так далее. Вот. То это супер, супер классная штука. Да. Ну, чат ПТ вряд ли расскажет, потому что он обучался, пока его ещё не было. Вот. Так. Ну, что, давайте вопросы. Три вопроса. Два вопроса. Один. И всё. Ну, смотрите, а получается, мы с вами уже час, час 15 у нас на всё это ушло. Вот, включая даже фактически небольшой небольшой трёп. Да, как у нас на основных тпах происходит. Вот. В целом, да, я думаю, уложились. Вот. Поэтому всем спасибо, кто принял участие. Злат, очень рад был тебя видеть. Вот. Всё, тогда, наверное, всем. До новых встреч. Кто у нас сейчас из модераторов здесь? Вот. Финали. Спасибо огромное. До новых встреч. Э, если кто-то не в коммьюнити, подписывайтесь. Все анонсы будут. А, мне кажется, прекрасный старт. Юрий, спасибо огромное. Спасибо. До свидания. Всё. Хорошего вечера всем.