SlideShare a Scribd company logo
1 of 48
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

More Related Content

What's hot

Резервное копирование и оптимизация хранения данных
Резервное копирование и оптимизация хранения данныхРезервное копирование и оптимизация хранения данных
Резервное копирование и оптимизация хранения данныхAndrey Karpov
 
Максим Шапошников, Nutanix
Максим Шапошников, NutanixМаксим Шапошников, Nutanix
Максим Шапошников, NutanixOntico
 
HPE adaptive backup and recovery
HPE adaptive backup and recoveryHPE adaptive backup and recovery
HPE adaptive backup and recoveryAnatoliy Arkhipov
 
RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.Olesya Shelestova
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Ontico
 
Безопасность ЦОД-часть 2
Безопасность ЦОД-часть 2Безопасность ЦОД-часть 2
Безопасность ЦОД-часть 2Cisco Russia
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...IT-Portfolio
 
Тестирование аварий / Андрей Губа (Одноклассники)
Тестирование аварий / Андрей Губа (Одноклассники)Тестирование аварий / Андрей Губа (Одноклассники)
Тестирование аварий / Андрей Губа (Одноклассники)Ontico
 
Презентация Защита данных от Dell Software: краткий обзор и планы развития ...
Презентация Защита данных от Dell Software:  краткий обзор и планы  развития ...Презентация Защита данных от Dell Software:  краткий обзор и планы  развития ...
Презентация Защита данных от Dell Software: краткий обзор и планы развития ...Marina Gryshko
 
SLA для ИБ аутсорсинга: что можно посчитать, а что нельзя
SLA для ИБ аутсорсинга: что можно посчитать, а что нельзяSLA для ИБ аутсорсинга: что можно посчитать, а что нельзя
SLA для ИБ аутсорсинга: что можно посчитать, а что нельзяjet_information_security
 
Безопасность ЦОД-часть 1
Безопасность ЦОД-часть 1Безопасность ЦОД-часть 1
Безопасность ЦОД-часть 1Cisco Russia
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusOntico
 
CloudsNN 2014. Демидов Александр. Заоблачная безопасность: как обойти чужие г...
CloudsNN 2014. Демидов Александр. Заоблачная безопасность: как обойти чужие г...CloudsNN 2014. Демидов Александр. Заоблачная безопасность: как обойти чужие г...
CloudsNN 2014. Демидов Александр. Заоблачная безопасность: как обойти чужие г...Clouds NN
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОDaria Oreshkina
 
Penetration testing (AS IS)
Penetration testing (AS IS)Penetration testing (AS IS)
Penetration testing (AS IS)Dmitry Evteev
 

What's hot (19)

Резервное копирование и оптимизация хранения данных
Резервное копирование и оптимизация хранения данныхРезервное копирование и оптимизация хранения данных
Резервное копирование и оптимизация хранения данных
 
Максим Шапошников, Nutanix
Максим Шапошников, NutanixМаксим Шапошников, Nutanix
Максим Шапошников, Nutanix
 
HPE adaptive backup and recovery
HPE adaptive backup and recoveryHPE adaptive backup and recovery
HPE adaptive backup and recovery
 
SIEM для ИТ
SIEM для ИТSIEM для ИТ
SIEM для ИТ
 
RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
 
Безопасность ЦОД-часть 2
Безопасность ЦОД-часть 2Безопасность ЦОД-часть 2
Безопасность ЦОД-часть 2
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
 
Тестирование аварий / Андрей Губа (Одноклассники)
Тестирование аварий / Андрей Губа (Одноклассники)Тестирование аварий / Андрей Губа (Одноклассники)
Тестирование аварий / Андрей Губа (Одноклассники)
 
Презентация Защита данных от Dell Software: краткий обзор и планы развития ...
Презентация Защита данных от Dell Software:  краткий обзор и планы  развития ...Презентация Защита данных от Dell Software:  краткий обзор и планы  развития ...
Презентация Защита данных от Dell Software: краткий обзор и планы развития ...
 
RuSIEM (15.11.2015)
RuSIEM (15.11.2015)RuSIEM (15.11.2015)
RuSIEM (15.11.2015)
 
SLA для ИБ аутсорсинга: что можно посчитать, а что нельзя
SLA для ИБ аутсорсинга: что можно посчитать, а что нельзяSLA для ИБ аутсорсинга: что можно посчитать, а что нельзя
SLA для ИБ аутсорсинга: что можно посчитать, а что нельзя
 
Mmx cvk-2015
Mmx cvk-2015Mmx cvk-2015
Mmx cvk-2015
 
Безопасность ЦОД-часть 1
Безопасность ЦОД-часть 1Безопасность ЦОД-часть 1
Безопасность ЦОД-часть 1
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 Rus
 
RuSIEM 2016
RuSIEM 2016RuSIEM 2016
RuSIEM 2016
 
CloudsNN 2014. Демидов Александр. Заоблачная безопасность: как обойти чужие г...
CloudsNN 2014. Демидов Александр. Заоблачная безопасность: как обойти чужие г...CloudsNN 2014. Демидов Александр. Заоблачная безопасность: как обойти чужие г...
CloudsNN 2014. Демидов Александр. Заоблачная безопасность: как обойти чужие г...
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПО
 
Penetration testing (AS IS)
Penetration testing (AS IS)Penetration testing (AS IS)
Penetration testing (AS IS)
 

Similar to SETCON'18 - Dzmitry Nichyparuk - Designing reliable software

Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Yandex
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейCisco Russia
 
Производительность программных систем
Производительность программных системПроизводительность программных систем
Производительность программных системDima Dzuba
 
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндексit-people
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Dima Dzuba
 
Защита центров обработки данных. Механизмы безопасности для классической фабр...
Защита центров обработки данных. Механизмы безопасности для классической фабр...Защита центров обработки данных. Механизмы безопасности для классической фабр...
Защита центров обработки данных. Механизмы безопасности для классической фабр...Cisco Russia
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.Serguei Gitinsky
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_haElena Ometova
 
Обеспечение безопасности в локальных сетях.pptx
Обеспечение безопасности в локальных сетях.pptxОбеспечение безопасности в локальных сетях.pptx
Обеспечение безопасности в локальных сетях.pptxElvinKerimov3
 
Современные DoS-атаки и защита от них с помощью инфраструктурных решений, Але...
Современные DoS-атаки и защита от них с помощью инфраструктурных решений, Але...Современные DoS-атаки и защита от них с помощью инфраструктурных решений, Але...
Современные DoS-атаки и защита от них с помощью инфраструктурных решений, Але...Ontico
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Проблематика создания OpenFlow контроллеров для SDN
Проблематика создания OpenFlow контроллеров для SDNПроблематика создания OpenFlow контроллеров для SDN
Проблематика создания OpenFlow контроллеров для SDNARCCN
 
Защита данных от Dell Software
Защита данных от Dell SoftwareЗащита данных от Dell Software
Защита данных от Dell SoftwareDell_Russia
 
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESBАрхитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESBPavel Treshnikov
 

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

Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
 
Производительность программных систем
Производительность программных системПроизводительность программных систем
Производительность программных систем
 
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6
 
Защита центров обработки данных. Механизмы безопасности для классической фабр...
Защита центров обработки данных. Механизмы безопасности для классической фабр...Защита центров обработки данных. Механизмы безопасности для классической фабр...
Защита центров обработки данных. Механизмы безопасности для классической фабр...
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.
 
Backup commvault data_line
Backup commvault data_lineBackup commvault data_line
Backup commvault data_line
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
 
Обеспечение безопасности в локальных сетях.pptx
Обеспечение безопасности в локальных сетях.pptxОбеспечение безопасности в локальных сетях.pptx
Обеспечение безопасности в локальных сетях.pptx
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
 
Современные DoS-атаки и защита от них с помощью инфраструктурных решений, Але...
Современные DoS-атаки и защита от них с помощью инфраструктурных решений, Але...Современные DoS-атаки и защита от них с помощью инфраструктурных решений, Але...
Современные DoS-атаки и защита от них с помощью инфраструктурных решений, Але...
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Проблематика создания OpenFlow контроллеров для SDN
Проблематика создания OpenFlow контроллеров для SDNПроблематика создания OpenFlow контроллеров для SDN
Проблематика создания OpenFlow контроллеров для SDN
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
Защита данных от Dell Software
Защита данных от Dell SoftwareЗащита данных от Dell Software
Защита данных от Dell Software
 
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESBАрхитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
 

More from Nadzeya Pus

SETCON'18 - Yauheni Pakala - .NET Embedding
SETCON'18 - Yauheni Pakala - .NET Embedding SETCON'18 - Yauheni Pakala - .NET Embedding
SETCON'18 - Yauheni Pakala - .NET Embedding Nadzeya Pus
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101Nadzeya Pus
 
SETCON'18 - Siarhei Tuzik - Enterprise Orchestration
SETCON'18 - Siarhei Tuzik - Enterprise OrchestrationSETCON'18 - Siarhei Tuzik - Enterprise Orchestration
SETCON'18 - Siarhei Tuzik - Enterprise OrchestrationNadzeya Pus
 
SETCON'18 - Siarhei Skavarodkin - Docker for developers
SETCON'18 - Siarhei Skavarodkin - Docker for developersSETCON'18 - Siarhei Skavarodkin - Docker for developers
SETCON'18 - Siarhei Skavarodkin - Docker for developersNadzeya Pus
 
SETCON'18 - Ilya labacheuski - GraphQL adventures
SETCON'18 - Ilya labacheuski - GraphQL adventuresSETCON'18 - Ilya labacheuski - GraphQL adventures
SETCON'18 - Ilya labacheuski - GraphQL adventuresNadzeya Pus
 
SETCON'18 - Aliaksander Stsepaniuk - Effective CPU
SETCON'18 - Aliaksander Stsepaniuk - Effective CPUSETCON'18 - Aliaksander Stsepaniuk - Effective CPU
SETCON'18 - Aliaksander Stsepaniuk - Effective CPUNadzeya Pus
 
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы Nadzeya Pus
 

More from Nadzeya Pus (7)

SETCON'18 - Yauheni Pakala - .NET Embedding
SETCON'18 - Yauheni Pakala - .NET Embedding SETCON'18 - Yauheni Pakala - .NET Embedding
SETCON'18 - Yauheni Pakala - .NET Embedding
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101
 
SETCON'18 - Siarhei Tuzik - Enterprise Orchestration
SETCON'18 - Siarhei Tuzik - Enterprise OrchestrationSETCON'18 - Siarhei Tuzik - Enterprise Orchestration
SETCON'18 - Siarhei Tuzik - Enterprise Orchestration
 
SETCON'18 - Siarhei Skavarodkin - Docker for developers
SETCON'18 - Siarhei Skavarodkin - Docker for developersSETCON'18 - Siarhei Skavarodkin - Docker for developers
SETCON'18 - Siarhei Skavarodkin - Docker for developers
 
SETCON'18 - Ilya labacheuski - GraphQL adventures
SETCON'18 - Ilya labacheuski - GraphQL adventuresSETCON'18 - Ilya labacheuski - GraphQL adventures
SETCON'18 - Ilya labacheuski - GraphQL adventures
 
SETCON'18 - Aliaksander Stsepaniuk - Effective CPU
SETCON'18 - Aliaksander Stsepaniuk - Effective CPUSETCON'18 - Aliaksander Stsepaniuk - Effective CPU
SETCON'18 - Aliaksander Stsepaniuk - Effective CPU
 
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
SETCON'18 - Aleh Toba - Путь из Developer-a в Manager-ы
 

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 • Изучайте внимательно требования. • Согласовывайте уровень защиты элементов системы. • Смотрите на все внешние зависимости с недоверием. • Используйте паттерны стабильности. • Тестируйте режимы отказов • Инфраструктурные • Отказы в точках интеграции или ненадежных внутренних системах Отказы неизбежны

Editor's Notes

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