Глава 51 / 51 (финал)
Том 5 · Расширения, эксплуатация и практика (конец тома)

Финал: тюнинг и дорожная карта

Последняя глава не учит новому — она учит постоянно «знать, как выглядит ваш сервис», и куда смотреть на пути развития XServer.

Обзор

Позиционирование: выпускной вечер. Раздел о тюнинге — методология, а не таблица параметров (параметры устаревают, методы — нет); дорожная карта опирается на реальное состояние репозитория; в конце — карта всей книги для повторения и поиска.

51.1 Методология тюнинга

Единственно правильный порядок: измерить → локализовать → изменить одну переменную → измерить снова. Типичные рычаги XServer по слоям:

СлойРычагОснование
Процессworkers (стартуем ≈ по числу ядер; для IO-тяжёлых нагрузок поднимаем)гл. 11
Маршрутизациясначала статическая таблица; динамические маршруты после Compile естественно плоскиегл. 17
IOстатические файлы через статический слой (предрендеренные заголовки); большие файлы кусками через SendFileгл. 10/15
Данныепакетная запись в транзакциях SQLite; reset и переиспользование операторовгл. 32
Логикамедленные операции — в фоновые потоки; кэш горячих точек (компиляция шаблонов на этапе Init)гл. 41/19
Протоколужесточённые лимиты снижают цену враждебного трафика; WS-рассылки лимитируем и объединяемгл. 22/39

Напоминание о простой вещи: в замерах routebench XServer стоит в одной группе с Go, на десяти тысячах маршрутов отставание всего +41% — у большинства приложений узкое место не в слое XServer, а в вашем бизнес-коде и обращениях к данным. Сначала измерьте, потом действуйте — не крутите параметры против несуществующего узкого места.

51.2 Как правильно бенчмаркать

  • У сравнения должна быть база: методология routebench — фиксированные корпуса (10/100/1k/10k маршрутов), фиксированная форма нагрузки (последовательные запросы по одному keep-alive-соединению), усреднение по многим кругам — переносите её на свой сервис и привыкайте «прогонять по кругу до и после каждого изменения»
  • Задержка и пропускная способность — разные числа: задержка одного соединения отражает накладные расходы пути; пропускная способность при конкурентности — это цифра ёмкости (четырёхпротокольные прогоны pressure_test — готовый шаблон)
  • Считаются только долгие забеги: шестичасовые сэмплы drill смотрят на деградацию и утечки, а не на скорость — производительность мгновенна, здоровье — длительно
  • Остерегайтесь микробенчмарков: кэш компиляции экономит миллисекунды, один медленный db-запрос стоит сотни — чувство порядка величин важнее приёмчиков

51.3 Дорожная карта

Видимые направления по текущему состоянию репозитория (авторитетны репозиторий и история версий — это не обещания):

  • Серверная сторона XTP2: библиотека кадров готова (гл. 33); естественный следующий шаг — обёртка протокольного автомата на уровне хоста — тогда проект-шлюз (Практика 2) поднимется с «ремесла сборки» до «конфигурации»
  • Экосистема расширений: механизм реестра (гл. 39) уже принимает трио из любой C-библиотеки — каждое новое расширение расширяет «стандартную библиотеку» скриптов
  • Документация и поиск: поиск / sitemap / индустриальная многоязычность сайта с учебником (тем самым, который вы читаете) и справочника API — в планах
  • xrt развивается в ногу: нижележащие пять бэкендов событийного цикла, корутины и стек TLS обновляются непрерывно — XServer получает всё это бесплатно (достаточно синхронизировать одноголовую библиотеку)

Лучший способ судить о развитии XServer — смотреть на его тестовые базовые линии: число сценариев func_test, образцы атак drill, стеки сравнения routebench — пока растут тесты, растёт и продукт.

51.4 Карта памяти книги

Одна модель (гл. 03): поколение · аренда · счётчик ссылок до нуля — ответ на любой вопрос жизненного цикла Два файла (гл. 04/07): xs.json (факты сборки) + main.c (факты бизнеса) Три состояния (гл. 14): OK / FALLBACK / TAKEOVER — кому достанется остаток жизни запроса Четыре протокола (гл. 21-25): ws шесть колбэков · tcp три колбэка · udp один колбэк · http один колбэк Пять рубежей (гл. 44): транспорт · лимиты · время · статический слой · плоскость управления Шестичастный шаблон (гл. 01): форма каждой главы этой книги Семь состояний (гл. 26): жизнь намерения перезагрузки — цифры забыть не страшно; достаточно помнить, «в какую главу вернуться»

51.5 Напутствие

Главный тезис XServer умещается в одно предложение: упаковать сервер обратно в один файл и доверять в правильных местах. Один exe, один каталог исходников, одна дисциплина поколенческого жизненного цикла — а дальше полная возможность писать всё на C.

Если три практики сделаны, у вас уже есть: горячо перезагружаемый REST-сервис, шлюз бинарного протокола и ферма сайтов производственной формы. Лучшее продолжение учёбы — взять реальную потребность и развернуть её в продакшн: там вас ждут справочник по устранению неполадок из главы 6 и три столпа наблюдаемости из главы 43.

Когда возникнут проблемы: сначала логи (гл. 06), потом границы (гл. 31/39), затем тестовые базовые линии (гл. 43) — и, наконец, сайт учебника xrt (xrt.xywhsoft.com) и справочные страницы этой книги всегда останутся источниками фактов, на которые можно положиться.

Частые ошибки

Выпустился — и перестал измерять
Симптом
После выхода в прод базовые линии больше не гонялись; регрессии производительности всплывают из жалоб пользователей.
Причина
Бенчмарк — не разовое задание: «круг до и круг после» должно быть в чек-листе релиза (в процессах гл. 42/42 для этого оставлены места).
Принимать учебник за контракт
Симптом
После обновления версии поведение, списанное из книги слово в слово, меняется — и рождает путаницу.
Причина
Учебник объясняет принципы и поведение текущего релиза; контракт — это то, что говорят xsbase.h и сигнатуры справочных страниц — они выходят в ногу с бинарником (принцип «единого источника фактов» из гл. 05).

Упражнения

БазаПовторение всей книги

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

Приёмка: все семь пунктов помечены верно; к каждому можете привести свой пример не из книги.
ПродвинутыйСвоя базовая линия

Постройте для своего проекта собственный скрипт бенчмарка (три элемента: корпус / форма нагрузки / круги).

Приёмка: у трёх подряд изменений есть данные «до и после».
ВызовОтдать долю open source

Оформите найденные при обучении проблемы и улучшения в issue или патчи документации — в том числе для этой книги (учебник тоже часть репозитория).

Приёмка: отправлено хотя бы одно пригодное к слиянию улучшение.

Итоги

ПунктВывод
Тюнингизмерить → локализовать → одна переменная → снова измерить; узкие места чаще в бизнес-слое
Бенчмаркитри элемента — корпус / нагрузка / круги; долгий забег смотрит здоровье, а не скорость
Дорожная картасерверная сторона XTP2, экосистема расширений, индустриальная документация, xrt в ногу
Контрактавторитет — xsbase.h и справочные страницы, они в ногу с бинарником
Конец книги51 глава · 5 томов · 3 практики · одно предложение: упаковать в один файл, доверять в правильных местах
Дальнейшее чтение по xrt
  • сайт xrt — полный учебник нижележащего рантайма и справочник API на 285 страниц, книга-спутник этой