проблемы которые сами себе и создают. Roblox - сервис которым пользуется 50 миллионнов человек упал на три дня.
Они выпустили неплохой постмортем, в котором рассказали о причинах и последствиях. https://blog.roblox.com/2022/01/roblox-return-to-service-10-28-10-31-2021/
Правда судя по выводам они не поняли, что проблема не техническая, а архитектурная.
Что случилось?
Вкратце — у них упал консул после обновления на проде. Из-за чего упал сервисдискавери, номад не смог поднимать новые поды и vault отказался работать тоже.
Почему это архитектурная проблема?
Потому что если у вас всё завязано на один сервис, то когда он упадёт, то всё перестанет работать.
Если вы используете консул и как service discovery, и как БД для номада, и как БД для vault и как просто KV store, то ну у вас всё упадёт если упадёт consul.
А если у вас много ролей для одного кластера, то упасть он может не только из-за обновления но и из-за того что
* vault начал больше писать-читать
* номад начал больше писать-читать
* сервисы начали больше писать-читать
Я иногда слышал доводы от сторонников всё писать в одно место, мол якобы так проще инфраструктура. Но простая инфраструктура ≠ меньше компонент. Было бы у них просто по одному кластеру на каждую задачу — проблема бы не затронула всю компанию. Хотя да, это было бы аж на +20 строчек кода тераформа больше и невероятно сильно усложнило бы инфраструктуру.
Вторая проблема тоже 100500 лет как известна — кешируйте сервис дискавери.
DNS не зря имеет ту архитектуру которую имеет. Там люди думали и сделали ну неплохо. Но окей, у DNS свои проблемы. Но и гугл, и нетфликс так или иначе решили сервис дискавери через локальное кеширование. Их инженеры с докладами по всему миру проехались и рассказали как они решали такие проблема. И я помню как ещё 8 лет назад уже заранее закладывал локальное кеширование в план.
Ведь пусть лучше сервис сходит на часть старых нод какое-то время, чем вообще не будет знать куда идти.
Третяя ошибка — если ваш сервис пользует несколько миллионов человек и они приносят деньги — почему бы не иметь несколько прод кластеров слабо связанных друг с другом (если это возможно — а судя по выводам которые они сделали — это возможно)
Несколько разных прод окружений удобны ещё и тем что и выкатывать обновления можно только на часть прод пользователей. И если упадёт — ну что-то работать не будет, но что-то будет. А если что-то может упасть, то оно упадёт, датацентр сгорит и так далее. Почему бы не подготовиться и не почитать Талеба.
И проблема даже не в том, что кто-то не подумал заранее. Мне не нравится что в выводах никто в Roblox не подумал — а может у нас плохая архитектура? Может надо что-то изменить на более высоком уровне?
Вобщем, когда говорят про техническую проблему, чаще всего внутри лежит неверное архитектурное или процесульаное решение. Просто это незаметно. Потому что хорошее и правильное решение просто не позволит сервису упасть, и рассказывать о том как героически его поднимали уже будет незачем, да и некому. Да ещё и про ошибку выжевшего насуют полные карманы.
Ты это, не пугай таким
Ты это расскажи любителям сервис мешей)
Крутой пост…
Обсуждают сегодня