Comments 37
Может это стало причиной что уволились(ли) люди, которые были в курсе как действовать в подобной ситуации, а поделиться в общую knowledge base не успели или уже не захотели. Это лишь догадки как может быть связано с поглощением MS.
Запасаемся попкорном и ждём проблем от продуктов/ RedHat...
Одно из двух: либо раньше github не умел переживать сплиты (что фантастично), либо таки кто-то поковырялся или специально подгадил.
Шардирование тут никак не помогло бы, потому что вылетел не какой-то один сервер, а весь ДЦ.
Собственно, тут есть два противоречивых требования — с одной стороны, избежать трансконтинентальной латенси и соблюдать строгую консистентность с другой стороны. Как ни крути, но всегда будет какое-то количество недоехавших до слейвов транзакций, которые так и не будут реплицированы в случае аварийной смены мастера. В принципе, есть та же Galera, можно было бы перевезти часть критичных к консистентности кластеров мускуля на нее; но опять же, это автоматом добавит RTT ко всем операциям записи.
Я б сказал, проблема тут вот в чем:
приложения на востоке, которые зависят от записи информации в западный кластер MySQL, в настоящее время не способны справиться с дополнительной задержкой из-за передачи большинства их вызовов БД туда и обратно
Сразу возникает вопрос — а зачем содержать ДЦ, в который нельзя полноценно переключиться? Надо либо допиливать эти приложения, либо сделать так, чтобы приложения бежали рядом со своими данными: переключился мастер базы — балансеры переключили юзерский трафик на новое место.
Шардирование тут никак не помогло, потому что вылетел не какой-то один сервер, а весь ДЦ.
Мм, а почему нельзя ключ шарда привязать к региону. Вроде бы в этом случае просто пропадет запись только в один из ДЦ, к которому был привязан данный регион.
Вот у нас есть ключ шардирования, который делит пользователей на:
- User1- East
- User2- East
- User3- East
- User4- West
- User5- West
(Ситуация очень упрощенная, ведь среди мета-данных гитхаба есть проекты, задачи и прочее, что не относится к одному пользователю).
Пусть упал East DC. В этой ситуации пользователи User1, User2 и User3 не могут ничего записывать. А пользователи User4 и User5 — могут.
Не очень понимаю, откуда тут появится запись в шард на другое побережье? Вижу в этом примере только чтение из реплики данных пользователей User1, User2, User3 из другого побережья.
Ну, навскидку можно предположить, что помимо базового функционала гита, основное «мясо» гитхаба — это как раз взаимодействие между пользователями, так что я бы предположил, что по юзерам их данные шардируются плоховато. Конечно, если это не так, то да, шардирование тут бы уполовинило серьёзность инцидента, но никак не решила б его целиком, а заодно добавила бы задержки на все операции, которые касаются взаимодействия между разными шардами. Да и в целом, шардирование оно про масштабирование, а не доступность.
Недостаточно заинсталлить «Оркестратор», или какие то другие продукты с звучащими брендами, недостаточно произносить фразы об умных практиках.
«Мы не имели опыта падения датацентров целиком» — удивительно, то есть для Хабра нет тестовой системы, и архитектурные решения не проходят тестирования? Это же элементарные вещи, как можно не проверить работоспособность системы, и что вообще произойдёт, если в тестовой системе отключить один кластер.
В команду нужен человек, который в состоянии рисовать на бумажке алгоритмы функционирования архитектуры «что будет, если», имеющий желание это делать, и имеющий полномочия для изменений архитектуры.
Для многих сервисов много мелких даунтаймов по 43 секунды гораздо менее заметны, чем один большой
Эта работа включает умышленное внесение неисправностей и применение инструментов хаос-инжиниринга.
Анализ инцидента 21 октября на GitHub