Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Реализация нагруженных и отказоустойчивых систем

396 views

Published on

UWDC 2017

Published in: Software
  • Be the first to comment

Реализация нагруженных и отказоустойчивых систем

  1. 1. Реализация нагруженных и отказоустойчивых систем Руслан Сафин технический директор Byndyusoft
  2. 2. • Далеко не всегда зависит от количества пользователей • Нагружает определенный контур в системе Нагрузка
  3. 3. • запросы внешней среды • ответы внешней среде • события по расписанию • изменение состояния в БД Потоки данных
  4. 4. • Перезагрузка • полная • по времени • по ключу • по тэгам • Накатывание изменений Инвалидация кэша
  5. 5. • Опрос необходимости перезагрузки кэша • Опрос выполнения задач • Передача данных между сервисами системы Антипаттерн: Shared Database
  6. 6. • Сигналы о перегрузке кэша • Команды • Данные команды Шина сообщений
  7. 7. • Подписка только на нужные события • Отправка изменений пачкой • Применение изменений пачкой Оптимизация накатывания изменений в кэшах
  8. 8. • Последовательное чтение из БД • Последовательное чтение из БД и уже прогрузившихся нод • Единая отдельная точка прогрузки и раздачи кэша Оптимизация холодного старта кэшей
  9. 9. • Единая точка записи в БД Событий слишком много — блокировки в БД
  10. 10. • Отдельная БД на быструю запись нетранзакционных данных, кластер БД • Транзакционная БД для «важных» данных Оптимизация БД — разделение на SQL и NoSQL
  11. 11. • Разделение обязанностей • Подписка на изменения в соответствии с состоянием кэша • Отслеживание исполнения (диспетчеризация) • Взаимодействие между собой нодов одного типа — эффект роя Оптимизация однотипных нодов
  12. 12. • Дублирование всего • Балансировка нагрузки • Мониторинг с автопереключением (БД, балансировщики, сетевые интерфейсы и т.д.) • Разнесение дублирующих виртуалок на физически разные хосты • Авторазворачивание сервисов взамен упавших • Пессимистичная архитектура кода! Отказоустойчивость
  13. 13. • Тестирование разворачивания бекапов • Тестирование отказа отдельных сервисов • Тестирование массовых отказов (хоста с несколькими виртуалками и др. сценарии) • Нагрузочное тестирование • Регрессионное! Тестирование отказоустойчивости
  14. 14. • Уровни алертинга • debug / info / error / critical • в понедельник / с утра / посреди ночи • Автоматические меры • Dashboard • Функциональное тестирование • Тестирование мониторинга • Взаимодействие с кодом! • Сравнение параметров разных окружений Мониторинг
  15. 15. КАК? • Итеративно, как можно проще • Тестовое окружение, максимально приближенное к боевому • Логирование • R&D
  16. 16. • Нагрузка — потоки данных • Кэширование • своя структура данных в кэше • оптимальная инвалидация • холодный старт — не заDDоSить самим себя • Шина сообщений — среда общения сервисов • логика при подписке, а не при отправке • «внутривидовое» общение роя Еще разок
  17. 17. • Запись в БД • Минимизация параллельной записи • разделение БД по назначениям • Автомасштабирование, отказоустойчивость и мониторинг • Тестирование • функциональности • отказоустойчивости • нагрузкоустойчивости • мониторинга Еще разок
  18. 18. Dev DevOps QA
  19. 19. Спасибо! Руслан Сафин iruslansafin@gmail.com @razonrus

×