highload весна 2014 лекция 7

21
Проектирование высоконагруженных систем Лекция №7 Быков Александр

Upload: technopark

Post on 22-May-2015

444 views

Category:

Education


2 download

TRANSCRIPT

Page 1: HighLoad весна 2014 лекция 7

Проектирование высоконагруженны

х систем

Лекция №7

Быков Александр

Page 2: HighLoad весна 2014 лекция 7

2

Построение архитектуры

HighLoad. Лекция №7

Разбиение системы на компоненты

Разбиение в точках масштабирования

Автономность компонент

Изоляция компонент

Минимизация зависимостей

Page 3: HighLoad весна 2014 лекция 7

3

Frontend & Backend

HighLoad. Лекция №7

Разделяем сервера на 2 группы:

Frontend сервера – общаются с клиентом

Backend сервера – делают сложную часть работы

Закрываем backend во внутренней сети

Регулируем на frontend нагрузку на backend

Page 4: HighLoad весна 2014 лекция 7

4

Разбивка страниц на группы

HighLoad. Лекция №7

Страницы (блоки):

Простые и сложные

Важные и неважные

Посещаемые и нет

Разбиваем на группы:

Простые и посещаемые

Сложные но важные

Прочее полезное

Делаем так чтобы

проблемы с запросами

одной группы не вызвали

проблем в другой

Page 5: HighLoad весна 2014 лекция 7

5

Функциональные группы серверов

HighLoad. Лекция №7

Группы по функциям, важности, стабильности,

шардам

Самые используемые функции должны работать

всегда

Проблема не должна выходить за пределы группы

Тяжелые, нестабильные страницы не должны класть

соседей

Сложные функции стараемся выделить в отдельные

сервисы

Page 6: HighLoad весна 2014 лекция 7

6

Сложность и надежность

HighLoad. Лекция №7

Большое кол-во компонентов

Высокая вероятность поломки одного из них

Необходимо резервирование

Необходимо работать при отсутствии части

компонент

Сложные системы все равно ломаются

Page 7: HighLoad весна 2014 лекция 7

7

Выбор компонент

HighLoad. Лекция №7

Самодельное ПО это дорого

Самодельное ПО ломается

Коробочное ПО тоже ломается

Когда оно ломается вам никто не поможет

Если нет исходных кодов ваши дела плохи

Выводы:

Используем Open Source как основу

При необходимости правим баги и дорабатываем под

себя

Page 8: HighLoad весна 2014 лекция 7

8

Выбор технологий и ЯП

HighLoad. Лекция №7

Технологии которые знает ваша команда

Широкое использование крупными проектами –

хороший знак

Скриптовые языки – большая скорость разработки

Сразу пишем на C если знаем нагрузку и перла не

хватит

Соблюдаем баланс «удобство» vs

«производительность»

Используем минимум разных технологий

Годные технологии: Perl, Python, C, C++, Java, MySQL,

PostgreSQL, memcached, nginx, apache, tarantool,

hadoop

Page 9: HighLoad весна 2014 лекция 7

9

Оптимизация узких мест

HighLoad. Лекция №7

Поставить новый сервер взамен старого 5-летней

давности

Заменить тупой алгоритм «в лоб» на оптимальный

Переписать код на C, подключить через Perl::XS

Переписать в отдельный демон написанный на C

Распараллелить алгоритм на несколько серверов

Page 10: HighLoad весна 2014 лекция 7

10

Graceful degradation

HighLoad. Лекция №7

Автоматическое отключение неважных блоков

Игнорирование неважных ошибок

Пользователь должен получить то зачем пришел

Кандидаты: реклама, промо-блоки, комментарии,

лайки

Page 11: HighLoad весна 2014 лекция 7

11

Обработка ошибок при обработке запроса

HighLoad. Лекция №7

Попробовать сделать запрос еще раз

Сходить в другой сервер

Сходить в сервер с упрощенной версией

Показать старое значение из кэша

Показать заглушку

Показать пустой блок

Показать ошибку в середине страницы (PHP)

Показать “Internal Server Error”

Page 12: HighLoad весна 2014 лекция 7

12

HighLoad. Лекция №7

Page 13: HighLoad весна 2014 лекция 7

13

HighLoad. Лекция №7

Page 14: HighLoad весна 2014 лекция 7

14

HighLoad. Лекция №7

Page 15: HighLoad весна 2014 лекция 7

15

Отложенная обработка запроса

HighLoad. Лекция №7

Работу которую сложно или невозможно делать

онлайн.

Выполнения тяжелых операций в период малой

нагрузки

Общение с нестабильными партнерами

Операции не связанные с действиями пользователя

Примеры:

Обсчет статистики за предыдущий день

Ротация логов на фронтендах (gzip и нагрузка на

сеть/диск)

Отправка писем по SMTP-протоколу

Банковские транзакции

Page 16: HighLoad весна 2014 лекция 7

16

Отложенная обработка запроса

HighLoad. Лекция №7

Крупные сервисы считают статистику только так

Чем больше серверов, чем сложнее система тем

сложнее делать онлайн-обработку чего-либо где

требуется надежная фиксация результата

Высокая производительность и консистентность

Минусы: большая задержка результата (часы, сутки)

Page 17: HighLoad весна 2014 лекция 7

17

Запись и обработка логов

HighLoad. Лекция №7

На фронтенде:

Занимают место и могут не умещаться за день

Теряются / становятся недоступны вместе с сервером

Тяжело копировать раз в сутки

На отдельном сервере:

Передаем по TCP/UDP или маленькими файлами

Можно считать онлайн-статистики

Page 18: HighLoad весна 2014 лекция 7

18

Мониторинг

HighLoad. Лекция №7

Проверяем отдельно доступность компонент

Проверяем живость серверов и аппаратных ресурсов

на них

Проверяем работоспособность сервисов в целом

Проверяем критические ошибки в логах

Рисуем графики нагрузки/заполненности компонент

Смотрим на графики активности пользователей

Экран мониторинга со списком важных проблем

Дежурная смена и SMS оповещения

Page 19: HighLoad весна 2014 лекция 7

19

Выкатка новых версий

HighLoad. Лекция №7

• Длинные итерации для сложных продуктов

• Неделю пишем, неделю тестируем и выкатываем

• Выкатываем последовательно: тестовый сервер,

офис, пререлизный сервер, 1 фронтенд, все

фронтенды, 1% пользователей, 100% пользователей.

• Сначала выкатываем, потом плавно включаем новый

функционал на долю пользователей следя за

нагрузкой

Page 20: HighLoad весна 2014 лекция 7

20

Слежение за производительностью

HighLoad. Лекция №7

Сервера с двойной (повышенной) нагрузкой в

балансировке

Дополнительные дублирующие операции с базой в

коде

Если начнет тормозить – отключаем дополнительную

нагрузку

Используем выигранное время чтобы придумать

решение

Синтетической нагрузкой тестировать бесполезно

Копией реальной нагрузки не всегда возможно

Заодно проверяем новые версии на регрессии по

скорости

Page 21: HighLoad весна 2014 лекция 7

СПАСИБО ЗА ВНИМАНИЕ

Быков Александр

[email protected]