Пипи
Пипи — это лёгкий, высокопроизводительный, стабильный программируемый сетевой прокси. Ядро Пипи разработано на C++, а для сетевого ввода-вывода используется библиотека ASIO.
Исполняемый файл Пипи весит около 5 Мбайт, а основанный на Alpine образ — около 10 Мбайт. Для работы требуется около 10 Мбайт оперативной памяти, поэтому Пипи хорошо подходит для sidecar proxy.
В Пипи встроен QuickJS в качестве расширения для скриптов, что позволяет использовать JavaScript для быстрого расширения логики и функций. Механизм «детерминированной сборки мусора» (GC) QuickJS дополнительно обеспечивает надёжность и детерминированность Пипи, избегая неопределённости, которая может возникнуть из-за GC во многих скриптовых языках.
Пипи использует модульную и цепную архитектуру обработки, где сетевые данные обрабатываются последовательно через модули. Эта простая архитектура делает Пипи простым и надёжным на базовом уровне, одновременно предоставляя динамическое управление потоками и баланс между простотой и гибкостью. Используя механизм REUSE_PORT (поддерживаемый новыми версиями Linux и BSD), Пипи может работать в многопроцессном режиме, делая его пригодным не только для режима sidecar, но и для обработки больших объёмов трафика.
Совместимость
При разработке Пипи учитывалась совместимость, и он может поддерживать различные операционные системы и архитектуры процессоров. Тестированные платформы и архитектуры включают:
Для производственной среды рекомендуется использовать CentOS 7 или FreeBSD.
Компиляция и сборка
Чтобы собрать Пипи из исходного кода, необходимо выполнить следующие шаги:
./build.sh
Результатом компиляции будет один исполняемый файл bin/pipy, который можно запустить с помощью команды bin/pipy -h для получения дополнительной информации.
Чтобы создать Docker-образ Пипи, выполните следующую команду:
cd pipy
sudo docker build --squash --rm -t pipy .
Обратите внимание, что параметр --squash можно использовать для создания более компактного образа.
Быстрый старт
Инструкции по установке и использованию Пипи включают:
yum -y install http://repo.flomesh.cn/pipy/pipy-latest.el7_pl.x86_64.rpm
$ pipy --list-modules
$ pipy --help-modules
$ pipy test/001-echo/pipy.cfg --watch-config-file
На Linux или BSD системах можно запустить несколько экземпляров Пипи для прослушивания одного порта, при этом ядро автоматически распределит нагрузку между процессами. Это значительно увеличивает пропускную способность. Кроме того, структура без общего доступа между процессами позволяет избежать сложности и неопределённости, связанных с многопроцессорной и многопоточной обработкой, обеспечивая высокую производительность при расширении пропускной способности без увеличения сложности.
Пример запуска двух экземпляров Пипи:
$ pipy test/001-echo/pipy.cfg --reuse-port &
$ pipy test/001-echo/pipy.cfg --reuse-port &
Использование Docker
Docker-образ Пипи распознаёт следующие переменные окружения:
Запуск Пипи в Docker:
docker run -it --rm -e PIPY_CONFIG_FILE=/etc/pipy/test/001-echo/pipy.cfg flomesh/pipy:latest
docker run -it --rm -e PIPY_CONFIG_FILE=/etc/pipy/test/011-serve-static/pipy.cfg -e PIPY_SPAWN=1 -p 8000:6000 flomesh/pipy:latest
Если Пипи используется как sidecar-прокси, он поддерживает «прозрачный прокси». Для этого необходимо добавить NET_ADMIN при запуске.
docker run -it --rm -e PIPY_CONFIG_FILE=/etc/pipy/test/001-echo/pipy.cfg --cap-add NET_ADMIN flomesh/pipy:latest
Запуск на k8s
Мы предоставляем CRD и Operator для запуска Пипи на k8s. Если вам нужно запустить Пипи через CRD/Operator, вы можете использовать этот код в качестве примера.
Шаги для запуска на k8s:
git clone https://github.com/flomesh-io/pipy-operator
cd pipy-operator
kubectl apply -f etc/cert-manager-v1.1.0.yaml
kubectl apply -f artifact/pipy-operator.yaml
kubectl apply -f config/samples/standalone/001-echo.yaml
kubectl apply -f config/samples/ingress/001-routing.yaml
kubectl apply -f config/samples/sidecar/007-deployment-pipy.yaml
Документация
Документация доступна в каталоге docs:
Авторские права и лицензия
Подробные сведения доступны в следующих файлах:
Контакты
По вопросам безопасности, пожалуйста, обращайтесь по электронной почте security@flomesh.io. По юридическим вопросам — legal@flomesh.io, по коммерческим и рыночным вопросам — sales@flomesh.io. Другие вопросы можно задать по адресу pipy@flomesh.io.
Любые другие вопросы можно обсудить, создав issue на GitHub: https://github.com/flomesh-io/pipy/issues.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )