Джефф Этвуд недавно написал сообщение в блоге о реализации Netflix "Chaos Monkey". Это статья очень высокого уровня. Мне любопытно, реализовал ли кто-нибудь этот метод для тестирования системы.
Я предполагаю, что я действительно пытаюсь спросить: какие стратегии вы реализуете, чтобы гарантировать, что ваша архитектура сможет пережить часть сбоя системы?
c#
architecture
cloud-computing
Robotsushi
источник
источник
Ответы:
Изоляция и постепенная деградация являются общими стратегиями. (Другой термин, который вы можете увидеть, похожий на изоляцию, - это разъединение , хотя я склонен видеть это в меньшем масштабе, например в OOD / P. Концепция та же.)
Вы изолируете различные части системы друг от друга, так что если один из них не работает, другие могут по-прежнему отвечать на запросы. Как сказано в блоге Netflix , если поиск не работает, потоковая передача все равно будет в порядке. Это просто означает, что поиск и потоковая передача были достаточно разнесены, чтобы узкое место или неспособность одного не повлиять на другое.
При постепенном ухудшении, если лучшая реализация чего-либо недоступна, вам нужно заполнить что-то еще. Опять из поста Netflix, у них есть система для просмотра вещей, которые вы смотрели и любили, и затем выработка персональных рекомендаций других на что посмотреть. Если эта система не работает, они возвращаются к рекомендациям вещей, которые в целом популярны. Суть в том, чтобы План B, План C и т. Д. Выполняли или показывали что-то, когда План A терпит неудачу, а не показывает ничего или ошибку.
Один из распространенных примеров постепенной деградации на стороне клиента (является ли реализация распространенной или нет) включает использование javascript на веб-сайтах. Если javascript браузера отключен или просто недоступен, страницы сайта все равно должны успешно работать без него. Это может быть не так быстро или гладко, но все равно должно работать, а не становиться непригодным для использования.
Это очень общие идеи. Практически каждый проект будет реализовывать их по-разному, в зависимости от услуг и подсистем, которые они предоставляют, и зависимостей между ними.
источник