golang

Новинка «Высокопроизводительный Go. Руководство по оптимизации»

  • четверг, 29 октября 2026 г. в 00:00:20
https://habr.com/ru/companies/bhv_publishing/articles/1100680/

Привет, Хабр!

Сегодня мы рады представить вам нашу очередную новинку, которая украсит полку профессионального бэкенд-разработчика: «Высокопроизводительный Go. Руководство по оптимизации». Она продолжает сразу два направления нашей работы и ориентирована как на современных бэкендеров, всё активнее переходящих на Go, так и просто на ответственных разработчиков, желающих систематизировать проверенные практики повышения производительности. Книга сложилась из заметок и кода, над которыми много лет работал Александр Ставонин – выдающийся специалист по Go, C++, IoT и высокопроизводительным вычислениям. В своё время Александр давал на Хабре подробное интервью для компании Getmatch, в котором рассказывал о личном опыте обустройства в Сингапуре. Англоязычные черновики книги, которые легли в основу русского издания, выложены на сайте goperf.dev.

Процитируем введение к этой книге, из которого сразу становится понятен замысел автора.

Перед вами руководство по оптимизации приложений на языке Go, которое поможет разработчикам повысить производительность кода Go, используя современные рабочие паттерны, особенно если вы создаете сервисы, которые должны справляться с реальной нагрузкой: API, бэкенд-пайплайны или распределенные системы.

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

 В Go нет такого тонкого уровня контроля, как в C++ или Rust, но зато имеется достаточно возможностей, чтобы заботиться о производительности, и большое количество инструментов, с помощью которых это можно осуществить. От анализа шаблонов распределения памяти и уменьшения накладных расходов на GC (сборщик мусора и управление памятью) до построения эффективных сетевых сервисов и управления масштабными параллельными вычислениями. Особое внимание уделяется оптимизациям, результаты которых можно измерить и использовать на практике.

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

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

Под спойлером – оглавление этой книги

Оглавление

Весь материал, изложенный в книге, автор рассматривает на примерах из специально разработанного учебного приложения. Это приложение передаёт данные с использованием фреймворка gRPC, протоколов TLS, TCP, HTTP/2. Данное приложение иллюстрирует работу при всплесках трафика, эффективную сборку мусора, применение пакетных операций и восстановление после отказов. Как понятно из оглавления, автор уделяет внимание профилированию, тестированию и развитию приложения в расчете на возрастающие нагрузки.

Рассматриваемые в книге темы перетекают от элементарных вопросов всё ближе и ближе к проду. Автор последовательно разбирает обращение с объектами и структурами данных, операции ввода/вывода, работу с компилятором и передачу данных по сети. Каждый из этих уровней позволяет выиграть свою долю производительности – таким образом, автор рассказывает об оптимизации приложения сразу на всех уровнях. Если вас интересует низкоуровневая оптимизация, обратите внимание на главы 13, 14 и 15, где рассказано о буферизации, объединении операций в пакеты и о работе с флагами компилятора. Глава 16, с которой начинается вторая часть книги, содержит уникальный материал о нагрузочном тестировании и готовых инструментах для этой цели, которые более практически нигде не рассматриваются (по крайней мере, на русском языке). Впрочем, можете посмотреть на Хабре статью «Почему ваш Go‑сервис ломается под 1000 RPS и как найти узкое место за полчаса», которую написал @badcasedaily1 – Артём Михайлов. Он также сотрудничает с нами как автор, написал великолепную книгу «Алгоритмы на языке Go» и сейчас пишет новую книгу с рабочим названием «Приручение компилятора. Искусство генерации машинного кода для Rust и C++».

Возвращаясь к рассматриваемой здесь новинке «Высокопроизводительный Go. Руководство по оптимизации» едва ли удивлю вас, напомнив, что одна из самых востребованных областей применения Go – сетевые технологии. Вся вторая половина книги (главы 17–29) посвящена доскональному разбору именно этих аспектов. Вот лишь некоторые из них: установка и разрыв соединения, TLS-рукопожатия, QUIC и quic-go, работа с горутинами (возобновление прерванных задач), сравнение производительности TCP, HTTP/2 и gRPC, предотвращение утечек памяти.

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

Здесь я хотел бы в качестве анонса перекинуть мостик к ещё одному проекту, который мы очень надеемся довести до книги и книжных полок. Буквально на этой неделе мы обсуждали с другим автором проект оглавления к будущей книге о микросервисах и эволюционной архитектуре, и он задал мне вопрос, который здесь уместно привести:

Язык примеров. Насколько принципиально использование Java? Я хотел бы предложить Go в качестве основного языка книги. Я уже работаю с ним, и он хорошо подходит для компактных листингов, демонстрирующих отделение бизнес-логики от инфраструктурного кода, организацию зависимостей и взаимодействие микросервисов.

Вслед за моим собеседником, задавшим этот вопрос, я укрепляюсь во мнении, что книгу Александра Ставонина мы издали очень вовремя, и вы по достоинству её оцените (не только в качестве хорошего подарка под приближающуюся ёлочку). Заходите к автору на гитхаб https://github.com/astavonin, знакомьтесь с ним, совершенствуйтесь в создании красивого, долговечного и отказоустойчивого кода на Go.