惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
博客园 - 司徒正美
J
Java Code Geeks
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
D
Docker
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
腾讯CDC
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Check Point Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
I
InfoQ
雷峰网
雷峰网
The Cloudflare Blog
美团技术团队
Engineering at Meta
Engineering at Meta

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
Go для сетевой безопасности: почему (и как) мы перешли на...
pavel_kirillov · 2026-06-24 · via Все публикации подряд на Хабре

Почему нам важна производительность?

Работа с сетевой безопасностью требует внимания к деталям. В компании Netopia мы создаем платформу для непрерывной оценки защищенности и управления политиками межсетевых экранов. Наш продукт помогает контролировать доступы, моделировать трафик по сети и автоматизировать изменения правил. Нам доверяют крупные банки, федеральные компании и операторы связи. И требования по безопасности к продукту предъявляют немаленькие.

Когда собираешь большие конфигурации сетевых устройств или интегрируешься с ITSM-системами через API, производительность кода напрямую влияет на надежность сервиса. Основным языком разработки является Go. Мы ценим его за эффективность, но иногда стандартных инструментов становится мало.

В этой статье хотим поделиться опытом перехода на библиотеку net/netip. Это решение продиктовано не трендами, а реальной необходимостью оптимизации. Стандартный пакет net не всегда справлялся с нашими объемами данных так эффективно, как хотелось бы. Расскажем, как внедрение netip помогло сделать платформу быстрее и надежнее.

Ограничения стандартного пакета net

Большинство разработчиков на Go начинают работу с сетью со стандартного пакета net. И это правильно: он стабилен, хорошо документирован и отлично справляется с типовыми задачами. Для многих проектов его возможностей более, чем достаточно, — он просто работает, позволяя быстро реализовать нужную логику. Однако в Netopia мы работаем с такими объемами данных, что каждая лишняя операция имеет значение.

Со временем мы заметили, что при масштабировании стандартный подход начинает упираться в свои ограничения. Главная проблема — наследие архитектуры.

Пакет net был создан давно, в нем заложены механизмы, которые сегодня считаются избыточными. Особенно это касается валидации IP-адресов. В высоконагруженных контурах сбора телеметрии стандартные методы создают слишком много аллокаций памяти. Это приводит к повышенной нагрузке на сборщик мусора (Garbage Collector) и росту задержек. Когда ты отвечаешь за безопасность банка или оператора связи, такая неэффективность становится непозволительной роскошью. Нам нужно было решение, которое дает тот же уровень удобства, но без скрытых затрат на производительность.

Почему мы выбрали net/netip?

Решение нашлось в самой экосистеме Go. Начиная с версии 1.18, в стандартной библиотеке появился пакет net/netip. Это не сторонняя библиотека, а официальная, оптимизированная замена старому net, созданная с учетом накопленных ошибок. Для команды безопасности важно минимизировать внешние зависимости, поэтому возможность использовать стандартный инструмент стала решающим фактором. Мы не стали внедрять его сразу «в бою». Сначала провели серию тестов на наших реальных данных, сравнили бенчмарки и убедились: рефакторинг окупится стабильностью. Что именно нам понравилось в net/netip? Вот три ключевых преимущества:

  1. Отсутствие аллокаций. Основные операции работают без выделения памяти в куче. Это резко снижает нагрузку на сборщик мусора, что критично для наших потоков телеметрии.

  2. Производительность. Парсинг и сравнение адресов работают заметно быстрее благодаря оптимизированной внутренней структуре.

  3. Безопасность типов. Значения в netip неизменяемы (immutable). Это предотвращает случайные ошибки изменения данных и делает код более предсказуемым. Для нас это означало не просто «стало быстрее», а «стало надежнее для клиентов».

Для нас это означало не просто «стало быстрее», а «стало надежнее для клиентов».

Практика: как это выглядит в коде?

Чтобы показать разницу в подходах, приведем несколько базовых примеров. Они демонстрируют, как netip упрощает типовые задачи работы с адресами, делая код чище и понятнее.

1. Парсинг IP-адреса

Вместо сложных проверок мы получаем строгую типизацию сразу на этапе чтения строки:

addr, err := netip.ParseAddr(«192.168.1.1»)

if err != nil {

    // обработка ошибки

}

// addr теперь безопасный объект IP

2. Работа с подсетями (Prefix)

Пакет позволяет легко работать с масками и диапазонами адресов:

prefix, err := netip.ParsePrefix(«10.0.0.0/8»)

if err != nil {

    // обработка ошибки

}

// prefix содержит адрес и длину маски

3. Проверка вхождения адреса в подсеть

Одна из самых частых задач в безопасности решается одним методом без лишних вычислений:

if prefix.Contains(addr) {

    // Адрес находится внутри диапазона

}

Такой код куда легче читаем. Но, что важнее, он и работает предсказуемо быстро, так как внутри не скрыто лишних аллокаций памяти. Для нас это значит, что даже сложные проверки политик доступа выполняются мгновенно.

На что обратить внимание при миграции?

Переход на новый инструмент потребовал внимания к деталям. Например, поведение с IPv4-mapped IPv6 адресами здесь строже. В старом пакете они могли неявно приводиться к IPv4, а в netip — нет.
Для нас это скорее плюс: правила безопасности должны работать явно и предсказуемо. Мы учли эту специфику при написании фильтров, чтобы избежать ложных срабатываний или пропуска трафика. Также мы обратили внимание на обработку зон в IPv6. Пакет может игнорировать их в префиксах, поэтому мы добавили дополнительную валидацию на входе. Такие мелочи важны, когда речь идет о доступе к инфраструктуре банка. Понимание этих особенностей позволяет нам использовать инструмент максимально эффективно и безопасно.

Стабильность через внимание к деталям

Для нас важно быть открытыми в таких технических вопросах. Обмен архитектурными решениями — это способ передачи опыта, необходимого для улучшения продукта. Мы предпочитаем внедрять улучшения заранее, опираясь на новые возможности языка и практики сообщества, а не ждать серьезных проблем. Такой подход помогает держать платформу надежной для клиентов, даже когда задачи усложняются. В конце концов, стабильность сервиса складывается именно из таких небольших, но важных оптимизаций и внимания к деталям.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Никто еще не голосовал. Воздержавшихся нет.