SETCON'18 - Dzmitry Nichyparuk - Designing reliable software

1BREST
Дизайн
отказоустойчивых
систем
22 апреля 2018
2BREST
О докладчике
Dzmitry Nichyparuk
Software Engineering Team Leader
С ЭПАМ с 2010
Экспертиза: Web Applications and Services
Технологии: .NET, JavaScript, NodeJS
Область интересов: Software Architecture
3BREST
4BREST
Стабильность системы
Отказоустойчивая система продолжает обрабатывать транзакции даже
когда импульсные помехи, постоянная нагрузка или неисправность
отдельных узлов нарушают нормальный процесс обработки транзакций.
Стабильность: компоненты системы не только продолжают работу, но и
дают пользователю возможность закончить работу.
5BREST
Основные опасности для долговечности систем:
• утечки памяти
• рост объемов данных
Как правило не обнаруживается при тестировании.
Долговечность
Долговечная система способна обрабатывать
транзакции долгое время.
Долговечная система
Но как “долго”?
6BREST
К отказу может привести как и внезапные импульсы, так
и чрезмерная нагрузка.
Всегда найдется компонент, который откажет раньше
других и начнет создавать нагрузку на другие элементы
системы.
Нагрузка - катализатор для роста трещин.
• Режим отказа - это фактор, послуживший триггером
дефекта, способ распространения отказа и результат
повреждения.
• Безопасные режимы отказов - ограничители трещин,
защищающие компоненты от выхода из строя
Трещины и режимы отказов
7BREST
8BREST
• Чем выше нагрузка и чем сложнее интеграционные связи, тем, как правило, выше скорость
распространения трещин (отказов).
• Сильная взаимосвязь может быть
• в коде самого ПО
• в меж-системных вызовах
• в общих ресурсах
• Менее связная архитектура наоборот сработает как амортизатор, уменьшая влияние
ошибки, а не увеличивая его.
• На каждом этапе цепочки отказ можно:
• остановить
• замедлить
• ускорить
Распространение трещин
9BREST
Системы имеют свойство ломаться
Есть факторы, которые предвидеть невозможно.
И что можно с ними сделать?
10BREST
11BREST
Каждый сетевой канал ставит под угрозу стабильность системы
Проблемы канала связи могу стать проблемой вашего приложения
Точки интеграции
Паттерны
• предохранитель (circuit breaker)
• квитирование (hand shaking)
• связующее ПО
Защита точек интеграции
Тестирование
• Stub-ы, эмулирующие отказы точек интеграции
12BREST
• Передача файла (File transfer)
• Общая база данных (Shared DB)
• Удаленный вызов процедуры (Remote procedure call)
• Обмен сообщениями (Message, BUS)
Возможные схемы интеграции
13BREST
14BREST
Отказ под нагрузкой
Выход одного сервера из строя ставит под угрозу остальные: вся освободившаяся нагрузка
ложится на их плечи
• Шаблон перегородок
• Предохранитель
Защита
Катализаторы отказа
• Утечки ресурсов
• Скрытые дефекты
15BREST
16BREST
Каскадные отказы
Каскадный отказ возникает, когда трещина возникая в
одном слое или компоненте вызывает проблемы в
вызывающем слое или компоненте.
Это возможно при наличии механизма перехода
отказа из одного слоя в другой - неправильная
работа в вызываемом слое провоцирует отказы в
вызывающем
Защищайте границы от средств передачи трещин
Используйте паттерны
• предохранитель
• тайм-ауты.
Защита
17BREST
18BREST
• Пользователи потребляют трафик
• Пользователи потребляют память
• Пользователи - это расходы на обслуживание
• Нежелательные пользователи
• программы-анализаторы
• грабберы каталогов (системы конкурентной разведки)
• пауки поисковиков
....
• Злоумышленники
Прямой угрозы пользователи конечно же не несут, но создаваемая ими нагрузка
повышает вероятность сбоя.
Пользователи
19BREST
20BREST
• Держите открытым канал общения с отделом маркетинга.
• Планируйте акции
• Готовьте отдельные экземпляры сервисов под специальные предложения
• Ссылки со специальными предложениями должны вести на специальные “легкие” страницы
• Защищайте общие ресурсы
Хороший маркетинг может “уронить” систему очень быстро
21BREST
• Переход к архитектуре без общего ресурса
• Один процесс выйдя из под контроля при наличии общего ресурса может вывести из игры остальные
экземпляры.
• Замена пессимистических блокировок оптимистическими
• Отдельный фрагмент сети под опасный трафик для случая с неоднородной нагрузкой
• Быстрый отказ - позволит освободить ресурсы для транзакций не связанных с общим ресурсом
Общий ресурс - узкое место
22BREST
Справедлив для отношений
• Многие к одному
• Многие к нескольким
Двух-точечная связь.
• Nсоед = n* (Nузлов^2)
Приемлемость такой скорости роста сложности зависит от
конечного масштаба системы
Альтернативы:
• Очередь сообщений
• Передача сообщений по подписке
• Групповая TCP/UDP рассылка
• Широковещательная рассылка UDP
Эффект масштабирования
23BREST
24BREST
Несбалансированные мощности
Перегрузка внешней системой Защита
Внутренняя система система
• Шаблон “квитирование” – обратная
связь для внешней системы
• Переборки – резервирование ресурсов
для внутренних операций
Внешняя система
• Шаблон “предохранитель” – снизит
нагрузку на внутреннюю систему
25BREST
Несбалансированные мощности
Тестирование
• Не ограничивайтесь стандартной нагрузкой при тестировании.
– Найдите самую ресурсоемкую операцию, типовую нагрузку и удвойте ее.
• Убедитесь что система ведет себя предсказуемо.
– Устойчивая система замедлит свою работу либо быстро завершит ее, если не сможет выполнить
транзакцию за отведенное время.
– После снятия нагрузки система начнет функционировать в обычном режиме.
– Аварийное завершение, зависшие потоки, бессмысленные ответы показывают, что система не выживет.
• Тестировать стоит оба интерфейса
– внешний сервис, когда внутренний не отвечает
– внутренний сервис, когда нагрузка выше расчетной
26BREST
27BREST
Причина медленных ответов
• избыточный спрос - нет резерва мощности для обработки входящих запросов
• утечки памяти (GC) - высокая загрузка ЦПУ может быть обусловлена не работой над
транзакциями, а работой сборщика мусора, дефрагментацией памяти.
• Медленное реагирование распространяется вверх - как постепенно нарастающий каскадный
отказ и ответы ведут к росту трафика
– Избавляйтесь от общих ресурсов и узких мест
– Используйте принцип быстрого отказа
Медленная реакция
Медленный ответ намного хуже, чем отказ в соединении или возвращение ошибки!
28BREST
29BREST
SLA-инверсия
SLA - соглашение об уровне доступа
• Изоляция партнеров
• Внедрение предохранителей
Работа с SLA-инверсией
30BREST
31BREST
• Не полагайтесь на поставщика, что он вернет ожидаемо ограниченный набор данных. В какой-
то момент этих данных может стать слишком много.
• Огромные наборы данных - причина медленной реакции (долгих ответов)
• Используйте реальные наборы данных при тестировании
Огромные наборы данных
• Ограничение размера ответа в запросе (LIMIT, TOP)
• Прерывание обработки результата, если данных слишком много
Защита приложения
Что произойдет, когда БД неожиданно вернет 1 млн записей, а приложение явно не
ограничивает набор результатов?
32BREST
33BREST
Предохранитель
34BREST
• при защите от отказов в точках интеграции
• при каскадных отказах
• при несбалансированной производительности
• медленных ответах
Предохранители
Эффективны
Используйте предохранители вместе с таймаутами
• таймауты укажут на проблемы с точкой интеграции
• предохранитель предотвратит обращения к проблемной точке интеграции
Комбинируйте
35BREST
36BREST
Таймауты
• с шаблоном “предохранитель”
• с шаблоном “быстрый отказ”
Комбинируйте
В случае
• наличия точек интеграции
• блокированных потоков
• медленных ответов
Для восстановления после неожиданных отказов
• Иногда зависшую операцию проще отменить и перезапустить
Эффективны
Позволяют устранить или смягчить влияние трещин на систему
37BREST
38BREST
Переборки реализуют идею изоляции повреждений.
Применив этот шаблон в системе вы разделите систему на части и не дадите отказу возникшему в
одной ее части, разрушить всю систему.
Наиболее распространенный вид изоляции - физическая избыточность:
• несколько серверов
• несколько приложений
• отдельные фермы для важных задач
• разделение через привязку к процессору или группе процессоров
• разделение пулов потоков
• виртуальные машины
Переборки
39BREST
• Шаблон переборок позволяет распределить вычислительную мощность с целью сохранения
частичной функциональности в случае проблем.
• Определяя границы следует оценить влияние ф-циональных возможностей на бизнес и
рассмотреть эти данные в рамках архитектуры.
• Разбиение системы на группы означает, что каждой отдельной группе нужны резервные
мощности - это больше чем при объединении всех сервисов.
Переборки
40BREST
41BREST
• Шаблон быстрого отказа повышает общую стабильность системы не допуская медленных
ответов.
• Позволяют поддерживать вычислительную мощность противодействуя пустым расходам
процессорного времени.
Быстрый отказ
Преимущества
• В комплексе с таймаутами быстрые отказы позволяют предотвратить каскадные отказы.
Комбинируйте
42BREST
43BREST
Квитирование - попытка сервера защитить себя путем регулировки внешней нагрузки.
• Сервер может отказаться от предлагаемой работы, если он испытывает недостаток ресурсов
• Клиент может проверить готовность сервиса принять его запрос через запрос “проверки здоровья”
Квитирование особенно полезно в случаях несбалансированной вычислительной мощности
• Использование предохранителя на клиенте и быстрого отказа или квитирования на сервере
• Использование квитирования на паре клиент-сервер
Квитирование
Квитирование - передача от одного устройства к другому сигнала, удостоверяющего
наличие связи с этим устройством.
Пример: HTTP (503) - Сервис недоступен
44BREST
45BREST
• СПО позволяет связывать сервисы изначально не предназначенные для совместной работы.
• Хорошо сделанное СПО одновременно интегрирует и разделяет системы.
Связующее ПО
• Лицензии на ПО
• Плата за трафик
СПО влияет на стоимость продукта!
Преимущества
46BREST
47BREST
• Изучайте внимательно требования.
• Согласовывайте уровень защиты элементов системы.
• Смотрите на все внешние зависимости с недоверием.
• Используйте паттерны стабильности.
• Тестируйте режимы отказов
• Инфраструктурные
• Отказы в точках интеграции или ненадежных внутренних системах
Отказы неизбежны
48BREST
THANK
YOU
1 von 48

Más contenido relacionado

Was ist angesagt?(19)

HPE adaptive backup and recoveryHPE adaptive backup and recovery
HPE adaptive backup and recovery
Anatoliy Arkhipov180 views
SIEM для ИТSIEM для ИТ
SIEM для ИТ
Olesya Shelestova759 views
RuSIEM (15.11.2015)RuSIEM (15.11.2015)
RuSIEM (15.11.2015)
Olesya Shelestova1K views
Mmx cvk-2015Mmx cvk-2015
Mmx cvk-2015
Юрий Малеванный347 views
RuSIEM 2016RuSIEM 2016
RuSIEM 2016
Olesya Shelestova1.2K views
Penetration testing (AS IS)Penetration testing (AS IS)
Penetration testing (AS IS)
Dmitry Evteev1.1K views

Similar a SETCON'18 - Dzmitry Nichyparuk - Designing reliable software(20)

Backup commvault data_lineBackup commvault data_line
Backup commvault data_line
Татьяна Янкина157 views
Distributed systemsDistributed systems
Distributed systems
Даниил Зайцев359 views
Cloud computingCloud computing
Cloud computing
Артем Захарченко388 views

SETCON'18 - Dzmitry Nichyparuk - Designing reliable software

  • 2. 2BREST О докладчике Dzmitry Nichyparuk Software Engineering Team Leader С ЭПАМ с 2010 Экспертиза: Web Applications and Services Технологии: .NET, JavaScript, NodeJS Область интересов: Software Architecture
  • 4. 4BREST Стабильность системы Отказоустойчивая система продолжает обрабатывать транзакции даже когда импульсные помехи, постоянная нагрузка или неисправность отдельных узлов нарушают нормальный процесс обработки транзакций. Стабильность: компоненты системы не только продолжают работу, но и дают пользователю возможность закончить работу.
  • 5. 5BREST Основные опасности для долговечности систем: • утечки памяти • рост объемов данных Как правило не обнаруживается при тестировании. Долговечность Долговечная система способна обрабатывать транзакции долгое время. Долговечная система Но как “долго”?
  • 6. 6BREST К отказу может привести как и внезапные импульсы, так и чрезмерная нагрузка. Всегда найдется компонент, который откажет раньше других и начнет создавать нагрузку на другие элементы системы. Нагрузка - катализатор для роста трещин. • Режим отказа - это фактор, послуживший триггером дефекта, способ распространения отказа и результат повреждения. • Безопасные режимы отказов - ограничители трещин, защищающие компоненты от выхода из строя Трещины и режимы отказов
  • 8. 8BREST • Чем выше нагрузка и чем сложнее интеграционные связи, тем, как правило, выше скорость распространения трещин (отказов). • Сильная взаимосвязь может быть • в коде самого ПО • в меж-системных вызовах • в общих ресурсах • Менее связная архитектура наоборот сработает как амортизатор, уменьшая влияние ошибки, а не увеличивая его. • На каждом этапе цепочки отказ можно: • остановить • замедлить • ускорить Распространение трещин
  • 9. 9BREST Системы имеют свойство ломаться Есть факторы, которые предвидеть невозможно. И что можно с ними сделать?
  • 11. 11BREST Каждый сетевой канал ставит под угрозу стабильность системы Проблемы канала связи могу стать проблемой вашего приложения Точки интеграции Паттерны • предохранитель (circuit breaker) • квитирование (hand shaking) • связующее ПО Защита точек интеграции Тестирование • Stub-ы, эмулирующие отказы точек интеграции
  • 12. 12BREST • Передача файла (File transfer) • Общая база данных (Shared DB) • Удаленный вызов процедуры (Remote procedure call) • Обмен сообщениями (Message, BUS) Возможные схемы интеграции
  • 14. 14BREST Отказ под нагрузкой Выход одного сервера из строя ставит под угрозу остальные: вся освободившаяся нагрузка ложится на их плечи • Шаблон перегородок • Предохранитель Защита Катализаторы отказа • Утечки ресурсов • Скрытые дефекты
  • 16. 16BREST Каскадные отказы Каскадный отказ возникает, когда трещина возникая в одном слое или компоненте вызывает проблемы в вызывающем слое или компоненте. Это возможно при наличии механизма перехода отказа из одного слоя в другой - неправильная работа в вызываемом слое провоцирует отказы в вызывающем Защищайте границы от средств передачи трещин Используйте паттерны • предохранитель • тайм-ауты. Защита
  • 18. 18BREST • Пользователи потребляют трафик • Пользователи потребляют память • Пользователи - это расходы на обслуживание • Нежелательные пользователи • программы-анализаторы • грабберы каталогов (системы конкурентной разведки) • пауки поисковиков .... • Злоумышленники Прямой угрозы пользователи конечно же не несут, но создаваемая ими нагрузка повышает вероятность сбоя. Пользователи
  • 20. 20BREST • Держите открытым канал общения с отделом маркетинга. • Планируйте акции • Готовьте отдельные экземпляры сервисов под специальные предложения • Ссылки со специальными предложениями должны вести на специальные “легкие” страницы • Защищайте общие ресурсы Хороший маркетинг может “уронить” систему очень быстро
  • 21. 21BREST • Переход к архитектуре без общего ресурса • Один процесс выйдя из под контроля при наличии общего ресурса может вывести из игры остальные экземпляры. • Замена пессимистических блокировок оптимистическими • Отдельный фрагмент сети под опасный трафик для случая с неоднородной нагрузкой • Быстрый отказ - позволит освободить ресурсы для транзакций не связанных с общим ресурсом Общий ресурс - узкое место
  • 22. 22BREST Справедлив для отношений • Многие к одному • Многие к нескольким Двух-точечная связь. • Nсоед = n* (Nузлов^2) Приемлемость такой скорости роста сложности зависит от конечного масштаба системы Альтернативы: • Очередь сообщений • Передача сообщений по подписке • Групповая TCP/UDP рассылка • Широковещательная рассылка UDP Эффект масштабирования
  • 24. 24BREST Несбалансированные мощности Перегрузка внешней системой Защита Внутренняя система система • Шаблон “квитирование” – обратная связь для внешней системы • Переборки – резервирование ресурсов для внутренних операций Внешняя система • Шаблон “предохранитель” – снизит нагрузку на внутреннюю систему
  • 25. 25BREST Несбалансированные мощности Тестирование • Не ограничивайтесь стандартной нагрузкой при тестировании. – Найдите самую ресурсоемкую операцию, типовую нагрузку и удвойте ее. • Убедитесь что система ведет себя предсказуемо. – Устойчивая система замедлит свою работу либо быстро завершит ее, если не сможет выполнить транзакцию за отведенное время. – После снятия нагрузки система начнет функционировать в обычном режиме. – Аварийное завершение, зависшие потоки, бессмысленные ответы показывают, что система не выживет. • Тестировать стоит оба интерфейса – внешний сервис, когда внутренний не отвечает – внутренний сервис, когда нагрузка выше расчетной
  • 27. 27BREST Причина медленных ответов • избыточный спрос - нет резерва мощности для обработки входящих запросов • утечки памяти (GC) - высокая загрузка ЦПУ может быть обусловлена не работой над транзакциями, а работой сборщика мусора, дефрагментацией памяти. • Медленное реагирование распространяется вверх - как постепенно нарастающий каскадный отказ и ответы ведут к росту трафика – Избавляйтесь от общих ресурсов и узких мест – Используйте принцип быстрого отказа Медленная реакция Медленный ответ намного хуже, чем отказ в соединении или возвращение ошибки!
  • 29. 29BREST SLA-инверсия SLA - соглашение об уровне доступа • Изоляция партнеров • Внедрение предохранителей Работа с SLA-инверсией
  • 31. 31BREST • Не полагайтесь на поставщика, что он вернет ожидаемо ограниченный набор данных. В какой- то момент этих данных может стать слишком много. • Огромные наборы данных - причина медленной реакции (долгих ответов) • Используйте реальные наборы данных при тестировании Огромные наборы данных • Ограничение размера ответа в запросе (LIMIT, TOP) • Прерывание обработки результата, если данных слишком много Защита приложения Что произойдет, когда БД неожиданно вернет 1 млн записей, а приложение явно не ограничивает набор результатов?
  • 34. 34BREST • при защите от отказов в точках интеграции • при каскадных отказах • при несбалансированной производительности • медленных ответах Предохранители Эффективны Используйте предохранители вместе с таймаутами • таймауты укажут на проблемы с точкой интеграции • предохранитель предотвратит обращения к проблемной точке интеграции Комбинируйте
  • 36. 36BREST Таймауты • с шаблоном “предохранитель” • с шаблоном “быстрый отказ” Комбинируйте В случае • наличия точек интеграции • блокированных потоков • медленных ответов Для восстановления после неожиданных отказов • Иногда зависшую операцию проще отменить и перезапустить Эффективны Позволяют устранить или смягчить влияние трещин на систему
  • 38. 38BREST Переборки реализуют идею изоляции повреждений. Применив этот шаблон в системе вы разделите систему на части и не дадите отказу возникшему в одной ее части, разрушить всю систему. Наиболее распространенный вид изоляции - физическая избыточность: • несколько серверов • несколько приложений • отдельные фермы для важных задач • разделение через привязку к процессору или группе процессоров • разделение пулов потоков • виртуальные машины Переборки
  • 39. 39BREST • Шаблон переборок позволяет распределить вычислительную мощность с целью сохранения частичной функциональности в случае проблем. • Определяя границы следует оценить влияние ф-циональных возможностей на бизнес и рассмотреть эти данные в рамках архитектуры. • Разбиение системы на группы означает, что каждой отдельной группе нужны резервные мощности - это больше чем при объединении всех сервисов. Переборки
  • 41. 41BREST • Шаблон быстрого отказа повышает общую стабильность системы не допуская медленных ответов. • Позволяют поддерживать вычислительную мощность противодействуя пустым расходам процессорного времени. Быстрый отказ Преимущества • В комплексе с таймаутами быстрые отказы позволяют предотвратить каскадные отказы. Комбинируйте
  • 43. 43BREST Квитирование - попытка сервера защитить себя путем регулировки внешней нагрузки. • Сервер может отказаться от предлагаемой работы, если он испытывает недостаток ресурсов • Клиент может проверить готовность сервиса принять его запрос через запрос “проверки здоровья” Квитирование особенно полезно в случаях несбалансированной вычислительной мощности • Использование предохранителя на клиенте и быстрого отказа или квитирования на сервере • Использование квитирования на паре клиент-сервер Квитирование Квитирование - передача от одного устройства к другому сигнала, удостоверяющего наличие связи с этим устройством. Пример: HTTP (503) - Сервис недоступен
  • 45. 45BREST • СПО позволяет связывать сервисы изначально не предназначенные для совместной работы. • Хорошо сделанное СПО одновременно интегрирует и разделяет системы. Связующее ПО • Лицензии на ПО • Плата за трафик СПО влияет на стоимость продукта! Преимущества
  • 47. 47BREST • Изучайте внимательно требования. • Согласовывайте уровень защиты элементов системы. • Смотрите на все внешние зависимости с недоверием. • Используйте паттерны стабильности. • Тестируйте режимы отказов • Инфраструктурные • Отказы в точках интеграции или ненадежных внутренних системах Отказы неизбежны

Hinweis der Redaktion

  1. Интегрировать плохо совместимые между собой системы - это нормально
  2. Выход одного сервера из строя ставит под угрозу остальные: вся освободившаяся нагрузка ложится на их плечи. Это повышает вероятность следующего сбоя. Остальные серверы должны иметь защиту. Иначе весь кластер прекратит работу в результате каскадных отказов.
  3. Системные отказы начинаются с одной трещины в некотором компоненте из-за какой-то фундаментальной проблемы. Трещину можно замедлить или остановить. Но если не принимать мер, то трещина будет распространяться по пути различных структурных проблем
  4. В приведенном примере внешняя система всегда может перегрузить внутреннюю.
  5. Медленный ответ намного хуже, чем отказ в соединении или возвращение ошибки. Особенно в ситуации со службами промежуточного уровня в SOA.
  6. P(сайт работает) = (1-P(внутренний отказ) * P(партнер 1 работает) * P(партнер 2 работает) *...
  7. Если медленная обработка транзакции хуже отказа, то медленная реакция на отказ - еще хуже!
  8. Отказы неизбежны. Они будут возникать как в ваших так и в удаленных системах Антипаттерны стабильности ускоряют и усиливаю эффект от временных событий, ускоряют скорость роста трещин. Устранение антипаттернов не избавит вас от отказов, но значительно снизит причиняемый ими вред.