Финал: тюнинг и дорожная карта
Последняя глава не учит новому — она учит постоянно «знать, как выглядит ваш сервис», и куда смотреть на пути развития 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 Карта памяти книги
51.5 Напутствие
Главный тезис XServer умещается в одно предложение: упаковать сервер обратно в один файл и доверять в правильных местах. Один exe, один каталог исходников, одна дисциплина поколенческого жизненного цикла — а дальше полная возможность писать всё на C.
Если три практики сделаны, у вас уже есть: горячо перезагружаемый REST-сервис, шлюз бинарного протокола и ферма сайтов производственной формы. Лучшее продолжение учёбы — взять реальную потребность и развернуть её в продакшн: там вас ждут справочник по устранению неполадок из главы 6 и три столпа наблюдаемости из главы 43.
Когда возникнут проблемы: сначала логи (гл. 06), потом границы (гл. 31/39), затем тестовые базовые линии (гл. 43) — и, наконец, сайт учебника xrt (xrt.xywhsoft.com) и справочные страницы этой книги всегда останутся источниками фактов, на которые можно положиться.
Частые ошибки
- Симптом
- После выхода в прод базовые линии больше не гонялись; регрессии производительности всплывают из жалоб пользователей.
- Причина
- Бенчмарк — не разовое задание: «круг до и круг после» должно быть в чек-листе релиза (в процессах гл. 42/42 для этого оставлены места).
- Симптом
- После обновления версии поведение, списанное из книги слово в слово, меняется — и рождает путаницу.
- Причина
- Учебник объясняет принципы и поведение текущего релиза; контракт — это то, что говорят xsbase.h и сигнатуры справочных страниц — они выходят в ногу с бинарником (принцип «единого источника фактов» из гл. 05).
Упражнения
Закройте книгу и восстановите карту памяти из 51.4, пометив у каждого пункта номер главы.
Постройте для своего проекта собственный скрипт бенчмарка (три элемента: корпус / форма нагрузки / круги).
Оформите найденные при обучении проблемы и улучшения в issue или патчи документации — в том числе для этой книги (учебник тоже часть репозитория).
Итоги
| Пункт | Вывод |
|---|---|
| Тюнинг | измерить → локализовать → одна переменная → снова измерить; узкие места чаще в бизнес-слое |
| Бенчмарки | три элемента — корпус / нагрузка / круги; долгий забег смотрит здоровье, а не скорость |
| Дорожная карта | серверная сторона XTP2, экосистема расширений, индустриальная документация, xrt в ногу |
| Контракт | авторитет — xsbase.h и справочные страницы, они в ногу с бинарником |
| Конец книги | 51 глава · 5 томов · 3 практики · одно предложение: упаковать в один файл, доверять в правильных местах |
- сайт xrt — полный учебник нижележащего рантайма и справочник API на 285 страниц, книга-спутник этой