Комментарии 4
Статья немного куцая: расписана теория, приведена одна структура и одна функция. Если я захочу повторить этот путь, то этого будет достаточно?
Также, из вашей статьи непонятно, будет ли программа фильтрации работать уже после запуска контейнера (репозитория с кодом нет). Подозреваю, что фильтр будет работать и, скорее всего, подъедать вычислительные ресурсы.
Поэтому, рассматривали ли вы такой вариант: на сервере висит масюхонькая программка на портах 80 и 443 (или какие вам требуется) на СЫРЫХ сокетах, которая при попытке коннекта принимает SYN (и сразу забывает про него), далее запускает нужный контейнер, и ВЫХОДИТ.
Как результат получаем запуск нужного контейнера и в дальнейшей работе нет дополнительной нагрузки.
---
Секундочка Сарказма: автор, можно чуть поаккуратнее работать с датами. Сначала Вы пишете:
в 2014 году разработчики ядра выпустили enhanced-версию — eBPF, добавив поддержку новых архитектур процессоров и ключевую фичу: примитивы для коммуникации с userspace.
Потом Вы делаете вывод:
Механизм работает на любой ОС последних 25 лет
Как бы между 2014 годом в 2026 всего 12 лет (это меньше 25 лет; т.е. условный линукс из середины нулевых не подойдёт). Кроме того, интернеты говорят, что в Windows это механизм появился в 2021 году, а в macos его до сих пор нет (macos это ведь "любая" ОС?).
Промахнулся веткой, ответил ниже :)
https://habr.com/ru/companies/cloud_ru/articles/993076/#comment_29535308
Спасибо за комментарий!
Статья немного куцая: расписана теория, приведена одна структура и одна функция. Если я захочу повторить этот путь, то этого будет достаточно?
Статья задумывалась как обзор архитектурного подхода, а не как пошаговое руководство. Я хотел показать саму механику того, как можно применить serverless паттерн к приложениям на базе TCP протокола.
Также, из вашей статьи непонятно, будет ли программа фильтрации работать уже после запуска контейнера (репозитория с кодом нет). Подозреваю, что фильтр будет работать и, скорее всего, подъедать вычислительные ресурсы.
Совершенно верно, XDP программа остается всегда активной на выбранном сетевом интерфейсе, но накладные расходы на её работу минимальные – в случае, если у контейнера уже есть активные экземпляры, это всего лишь hashmap lookup (hashmap хранит состояние приложения, условно вкл/выкл). Так же, в запущенную XDP программу можно встроить сбор метрик по количеству запросов и объеме входящего/исходящего трафика, например для задач тарификации, тогда она уже не будет работать "в холостую".
Поэтому, рассматривали ли вы такой вариант: на сервере висит масюхонькая программка на портах 80 и 443 (или какие вам требуется) на СЫРЫХ сокетах, которая при попытке коннекта принимает SYN (и сразу забывает про него), далее запускает нужный контейнер, и ВЫХОДИТ.
Как результат получаем запуск нужного контейнера и в дальнейшей работе нет дополнительной нагрузки.
Рассматривали такой вариант (на самом деле существует много альтернатив, например активация приложений/контейнеров через systemd socket или альтернативные решения по типу zeropod), но решение на базе eBPF мне понравилось больше – во первых, eBPF дает огромный запас по производительности, за счет того что маршрутизация пакетов происходит внутри ядра, без переключения контекста и копирования данных, и во вторых имеет примитивы для коммуникации между kernel space и user space частью. В случае условной программы на сырых сокетах, которой понадобятся повышенные права на исполнение, а это дополнительный вектор атаки, не получится просто "получить первый пакет и завершить выполнение", в любом случае потребуется некоторая оркестрация процесса – как минимум нужно дождаться успешного запуска контейнера. eBPF изначально отлично разделяет эти области – в kernel space мы работаем с пакетами, а в user space запускается daemon-оркестратор.
Механизм работает на любой ОС последних 25 лет
Спасибо за замечание, возможно стоило написать немного по другому. Изначальный посыл который вкладывался в "последние 25 лет" – это TCP протокол, который позволяет использовать рукопожатие для реализации serverless, не eBPF как инструмент.
Нужна вторая часть с реализацией.
Или хотя бы демо репозиторий)
Информация
- Сайт
- cloud.ru
- Дата регистрации
- Дата основания
- 2019
- Численность
- 1 001–5 000 человек
- Местоположение
- Россия
- Представитель
- Контент-редактор Cloud.ru
Практическое применение eBPF: serverless-платформа с поддержкой TCP-приложений