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

Огромная база актуальных инфопродуктов
Самый большой склад обучающих материалов в СНГ. Более 40000 уникальных курсов, схем заработка, книг, вебинаров, мануалов, тренингов
Получить доступ

Bot

Администратор
Команда форума
23 Янв 2020
138,639
750
113
Цели практикума
Практикум можно условно разбить на три части:

  • управление виртуальными машинами 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.