1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cloudwego-netpoll

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_CN.md 5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 07:07 59ea76c

CloudWeGo-Netpoll

Введение

Netpoll — это высокопроизводительная NIO (Non-blocking I/O) сетевая библиотека, разработанная ByteDance, которая специализируется на RPC-сценариях.

RPC обычно имеет сложную логику обработки и не может обрабатывать I/O последовательно. В то же время Go стандартный пакет net разработал API в режиме BIO (Blocking I/O), что заставляет RPC-фреймворк при проектировании выделять отдельный goroutine для каждого соединения. Это приводит к большому количеству goroutines при высокой параллельности, что значительно увеличивает нагрузку на планирование. Кроме того, net.Conn не предоставляет API для проверки активности соединения, поэтому сложно разработать эффективный пул соединений, а сбойные соединения в пуле не могут быть своевременно очищены.

С другой стороны, в сообществе открытого исходного кода в настоящее время не хватает Go сетевых библиотек, ориентированных на RPC. Такие проекты, как evio, gnet и т. д., ориентированы на такие сценарии, как Redis, HAProxy и другие.

Таким образом, Netpoll появился вовремя. Он заимствует отличные дизайнерские идеи из evio и netty и обладает выдающейся производительностью, более подходящей для микросервисной архитектуры. В то же время Netpoll также предоставляет некоторые функции, рекомендуемые для замены net в дизайне RPC.

На основе Netpoll разработаны RPC-фреймворк Kitex и HTTP-фреймворк Hertz, которые являются лидерами отрасли по производительности.

Примеры демонстрируют, как использовать Netpoll для создания RPC Client и Server.

Для получения дополнительной информации см. документацию.

Функции

  • Уже поддерживается:

    • LinkBuffer предоставляет nocopy API, который можно использовать для потокового чтения и записи;
    • gopool предоставляет высокопроизводительный пул goroutine;
    • mcache обеспечивает эффективное повторное использование памяти;
    • IsActive поддерживает проверку активности соединения;
    • Dialer поддерживает создание клиента;
    • EventLoop поддерживает создание сервера;
    • Поддерживает TCP и Unix Domain Socket;
    • Поддержка Linux и macOS (операционная система).
  • Скоро будет открыто:

    • multisyscall поддерживает пакетные системные вызовы;
    • io_uring;
    • Shared Memory IPC;
    • Последовательное планирование I/O, подходит для чисто вычислительных задач;
    • TLS поддерживается;
    • UDP поддерживается.
  • Не поддерживается: Windows (операционная система).

Производительность

Тестирование производительности должно соответствовать требованиям промышленного использования. В сценариях RPC параллельные запросы и тайм-ауты ожидания являются необходимыми функциями поддержки.

Мы предоставляем проект netpoll-benchmark для долгосрочного отслеживания и сравнения данных о производительности Netpoll и других фреймворков в различных ситуациях для справки.

Дополнительные тесты см. в проектах kitex-benchmark и hertz-benchmark.

Ссылки

  • Официальный сайт: https://www.cloudwego.io
  • Документация по использованию: docs/guide/guide_cn.md
  • Проектный документ: docs/reference/design_cn.md
  • Объяснение DATA RACE: docs/reference/explain.md

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/cloudwego-netpoll.git
git@api.gitlife.ru:oschina-mirror/cloudwego-netpoll.git
oschina-mirror
cloudwego-netpoll
cloudwego-netpoll
develop