Производительность и масштабируемость [Devhands] [Алексей Рыбак]

Bot

Администратор
Команда форума
23 Янв 2020
199,566
3,129
113
269049.jpg

Цели практикума
Практикум можно условно разбить на три части:

  • управление виртуальными машинами Linux
  • нагрузочное тестирование собственного стэка и подходы к планированию мощностей
  • масштабирование СУБД
Управление виртуальными машинами Linux
Участники ставят, собирают, конфигурируют свой собственный стэк — мы поддерживаем практически любой стэк (Java, Python, PHP, C#, Golang, node.js; MySQL или PostgreSQL), поскольку вопросы масштабируемости и производительности общеуниверсальны и не зависят от стэка.

Вы изучите основы администрирования Linux: управление пакетами при помощи пакетного менеджера apt, ручная сборка из исходников и управление ручными сборками, конфигурация и управление systemd-сервисами, мониторинг и базовый анализ производительности с Prometheus и Grafana.

Мы обсудим основы параллелизма в Linux, модели серверов, почему nginx работает супер-быстро и лучше, чем Apache, почему MySQL имеет лучшую серверную модель, чем PostgreSQL, и как с этим бороться и успешно использовать PostgreSQL в больших проектах. В дополнение к вашему любимому серверу приложений вы будете использовать nginx в качестве балансировщика и обратного прокси, MySQL или PostgreSQL в качестве базы данных и Memcached или Redis в качестве кэш-сервера.

Нагрузочное тестирование собственного стэка и подходы к планированию мощностей

Мы изучим основы настройки производительности, тестирования производительности и выжмем максимальную пропускную способность из вашей виртуальной машины. Наш текущий студенческий «рекорд» — 100K «синтетических» RPS с Golang/Fiber на довольно скромной виртуалке.

Участники построят latency/RPS-диаграммы и сравнят показатели производительности и ограничения компонент вашего стэка. Мы используем wrkx (нашу доработку wrk2), но поскольку у нас настоящая программа R&D, мы будем рады использовать любой инструмент, поддерживающий независимо управляемые клиентские потоки и пул соединений.

Масштабирование СУБД

В этом модуле мы изучим (всё будет доступно на вашей собственной инфраструктуре):

  • кластерный Redis
  • кластерная СУБД CockroachDB
  • шардинг-прокси SPQR поверх классического PostgreSQL 17
Везде изучим, как сделано шардирование, переключение мастера, решардинг и т.д.
Занятие 1. Управление Linux-сервером

Знакомство с виртуальной машиной, управление пакетами, сборка open source софта для исследований, работа в screen/tmux, systemd-юниты и управление сервисами, grafana/prometheus/экспортеры.

Занятие 2. Основы нагрузочного тестирования

Основы нагрузочного тестирования. Архитектура стрелялки, соединения, треды/воркеры, интенсивность и связь между ними. Coordinated omission. Перцентили. Знакомство с wrkx и подходами к автоматизации (lsmt). Проведение тестов, тюнинг nginx (выжать не менее 100K RPS на статику с одной ноды).

Занятие 3. Проведение нагрузочного тестирования

Создание собственного сервиса с динамически конфигурируемой нагрузкой на CPU (для языков с корутинами/горутинами/async-io — с особыми оговорками).

Занятие 4. Обсуждение результатов нагрузочного тестирования и планирование мощностей

Проведение нагрузочных тестов, анализ данных мониторинга, построение и анализ latency/throughput-диаграмм (показать диаграмму и рассказать, что она значит). Применение полученных данных в оценках планирования мощностей.

Занятие 5. Резервная встреча (сдача «хвостов»)

Резервная встреча для сдачи «хвостов» по практике «с инфрой». Краткое введение в принципы масштабирования приложений, кешей, СУБД. Что мы посмотрим в практикуме по масштабированию СУБД и почему именно это решение.

Занятие 6. Redis-кластер

Архитектура, принципы работы и практикум с кластерным Redis.

Занятие 7. Stateless PostgreSQL Query Router (кластер SPQR + PostgreSQL)

Архитектура, принципы работы и практикум с прокси-роутером SPQR и PostgreSQL.

Занятие 8. Кластер CockroachDB

Архитектура, принципы работы и практикум с кластером CockroachDB.