Комментарии 15
Плюс за анекдот.
А о чём статья то? ))
я написал бесчисленное количество костылей, чтобы действительно отказоустойчивый (а главное, долгоживущий) код продолжал нормально работать
Комментарий не по основной теме статьи, но как-то сложно воспринимать отказоустойчивым такой код, который перестает нормально работать от простого рестарта контейнера.
В концепциях вроде "The Twelve-Factor App" про это есть даже явный пункт - Disposability. Т.е, надёжность строится на том, что процесс можно убить в любой момент, состояние вынесено наружу, старт быстрый, деградация плавная.
12-Factor — это что-то на джейсоноукладочном? Или это троллинг?
Ну попробуйте ваш сервер СУБД запустить в контейнере, и посмотрите, что получится.
СУБД - это stateful-сервис, и на него не распространяются требования 12-Factor. Речь идёт про прикладной код, который должен уметь безболезненно переживать рестарт контейнера.
У кого речь идёт про прикладной код? Прикладной код не бывает stateful? А главное, я вроде нигде не утверждал, что хоть раз написал что-то, не переживающее рестарт контейнера (просто из-за убогости дизайна докера чато этот рестарт приходится окостыливать).
Вы же сами в статье пишете:
я написал бесчисленное количество костылей, чтобы действительно отказоустойчивый ... код продолжал нормально работать в условиях, где сброс горячего кэша из-за внезапного перезапуска контейнера ... — норма.
Это и есть суть замечания про отказоустойчивость: прикладной код не должен ломаться от обычного перезапуска. Никто не спорит, что прикладной код может быть stateful - вопрос в том, как и где это состояние хранится и насколько оно привязано к жизни контейнера
Если честно, я не понимаю, что вы хотите сказать.
Горячий кэш всегда привязан к жизни контейнера, по определению. Хранить его где-то — нелепо и глупо, это кэш. Горячим кэшем, разумеется, прецеденты не ограничиваются, просто этот — самый понятный. В любом хайлоаде — СУБД — это медленная и неповоротливая кувалда на крайний случай, когда ничего лучше не придумать.
Если вкратце, проблема решается консенсусом и пассивной репликацией, а до докера — она была решена эрлангом из коробки, без приседаний и СМС.
Сложно аргументированно комментировать, не зная, что именно вы делали. Возможно, вы не до конца разобрались с деплоем в K8s и делали все как-будто у вас по старинке физические машины с фиксированными IP. С тем же Akka Cluster, помню, были свои нюансы с необходимостью использовать StatefulSets и Headless Service.
Так вы код СУБД писали и запускали в докере? Ну, тоже ничего страшного. Если у СУБД корректно вынесено состояние и есть механизм восстановления, то все должно быть нормально.
Всё-таки, вы тут очень много пишете про инфраструктуру, а тему feature flags не раскрыли. :-)
Конфиг, сделанный по уму