home.social

#graceful_shutdown — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #graceful_shutdown, aggregated by home.social.

fetched live
  1. Graceful Shutdown в Python-приложениях на Kubernetes: внедрение и практический опыт

    Часто ли вы сталкиваетесь с проблемой потери данных, неконсистентными состояниями или ошибками в Sentry о внезапно закрытых соединениях при рестарте сервисов? Если вы когда-нибудь пытались это исправить, то наверняка слышали про Graceful Shutdown. Привет! Меня зовут Антон, я бэкенд-разработчик Python

    habr.com/ru/companies/selectel

    #selectel #python #kubernetes #graceful_shutdown #fastapi #flask #celery #uvicorn #gunicorn #devops

  2. Graceful Shutdown в Python-приложениях на Kubernetes: внедрение и практический опыт

    Часто ли вы сталкиваетесь с проблемой потери данных, неконсистентными состояниями или ошибками в Sentry о внезапно закрытых соединениях при рестарте сервисов? Если вы когда-нибудь пытались это исправить, то наверняка слышали про Graceful Shutdown. Привет! Меня зовут Антон, я бэкенд-разработчик Python

    habr.com/ru/companies/selectel

    #selectel #python #kubernetes #graceful_shutdown #fastapi #flask #celery #uvicorn #gunicorn #devops

  3. System Design на практике: создаем микросервис генерации уникальных идентификаторов

    Привет! Это вторая часть серии статей, посвященной проектированию реальной системы сокращения ссылок. В [прошлой статье] мы спроектировали общую микросервисную архитектуру нашего будущего высоконагруженного сервиса. Мы разделили монолит на независимые компоненты, определили зоны ответственности и настроили их взаимодействие. Сегодня мы переходим от теории к практике и займемся сердцем любого сокращателя ссылок — микросервисом генерации уникальных идентификаторов (ID) . Почему это отдельная проблема? На первый взгляд задача кажется тривиальной: взять случайную строку или автоинкремент из базы данных. Но когда система сталкивается с масштабами миллионов запросов в секунду (RPS), стандартные подходы ломаются:

    habr.com/ru/articles/1068960/

    #микросервисная_архитектура #сокращатель_ссылок #асинхронная_обработка_ошибок #горутины #каналы_go #grpc_серверы #graceful_shutdown

  4. System Design на практике: создаем микросервис генерации уникальных идентификаторов

    Привет! Это вторая часть серии статей, посвященной проектированию реальной системы сокращения ссылок. В [прошлой статье] мы спроектировали общую микросервисную архитектуру нашего будущего высоконагруженного сервиса. Мы разделили монолит на независимые компоненты, определили зоны ответственности и настроили их взаимодействие. Сегодня мы переходим от теории к практике и займемся сердцем любого сокращателя ссылок — микросервисом генерации уникальных идентификаторов (ID) . Почему это отдельная проблема? На первый взгляд задача кажется тривиальной: взять случайную строку или автоинкремент из базы данных. Но когда система сталкивается с масштабами миллионов запросов в секунду (RPS), стандартные подходы ломаются:

    habr.com/ru/articles/1068960/

    #микросервисная_архитектура #сокращатель_ссылок #асинхронная_обработка_ошибок #горутины #каналы_go #grpc_серверы #graceful_shutdown

  5. Почему при rolling update летят 502, хотя readiness-проба на месте

    Классическая сцена. Команда выкатывает релиз, деплой проходит зелёным, kubectl rollout status рапортует об успехе — а в графиках ингресса на минуту вырастает горка пятисотых. Не тысячи, обычно доли процента, но стабильно, каждый деплой. Дальше начинается фольклор. «Ну это же рестарт, при рестарте всегда так». «Добавьте ретраи на клиенте». «Деплойтесь ночью». Самый частый вариант — на графики просто перестают смотреть в момент выката. На самом деле rolling update умеет проходить вообще без потерь, и readiness-проба тут ни при чём — она отвечает за другую половину задачи. Потери происходят на выключении подов, и причина в том, что удаление пода — это не последовательность шагов, а гонка.

    habr.com/ru/articles/1062020/

    #kubernetes #devops #rolling_update #zero_downtime #readiness_probe #preStop #graceful_shutdown #kubeproxy #endpoints

  6. Почему при rolling update летят 502, хотя readiness-проба на месте

    Классическая сцена. Команда выкатывает релиз, деплой проходит зелёным, kubectl rollout status рапортует об успехе — а в графиках ингресса на минуту вырастает горка пятисотых. Не тысячи, обычно доли процента, но стабильно, каждый деплой. Дальше начинается фольклор. «Ну это же рестарт, при рестарте всегда так». «Добавьте ретраи на клиенте». «Деплойтесь ночью». Самый частый вариант — на графики просто перестают смотреть в момент выката. На самом деле rolling update умеет проходить вообще без потерь, и readiness-проба тут ни при чём — она отвечает за другую половину задачи. Потери происходят на выключении подов, и причина в том, что удаление пода — это не последовательность шагов, а гонка.

    habr.com/ru/articles/1062020/

    #kubernetes #devops #rolling_update #zero_downtime #readiness_probe #preStop #graceful_shutdown #kubeproxy #endpoints

  7. Отказоустойчивый запуск WSGI приложения. Обзор архитектуры Gunicorn

    Gunicorn кажется простым, пока не сталкиваешься с эксплуатацией: внезапные ошибки 502, зависшие воркеры и странное поведение при перезапусках. За этими симптомами стоят вполне конкретные причины — от медленных клиентов и отсутствия буферизации до особенностей реализации GThread и механики Graceful Shutdown. В этой статье разберём реальные сценарии отказов, посмотрим, как менялась архитектура GThread в разных версиях Gunicorn, и соберём практичную конфигурацию с Nginx, Docker и Kubernetes, которая ведёт себя предсказуемо под нагрузкой.

    habr.com/ru/companies/domclick

    #python #gunicorn #wsgi #prefork #gthread #graceful_shutdown #keepalive #nginx #docker

  8. Отказоустойчивый запуск WSGI приложения. Обзор архитектуры Gunicorn

    Gunicorn кажется простым, пока не сталкиваешься с эксплуатацией: внезапные ошибки 502, зависшие воркеры и странное поведение при перезапусках. За этими симптомами стоят вполне конкретные причины — от медленных клиентов и отсутствия буферизации до особенностей реализации GThread и механики Graceful Shutdown. В этой статье разберём реальные сценарии отказов, посмотрим, как менялась архитектура GThread в разных версиях Gunicorn, и соберём практичную конфигурацию с Nginx, Docker и Kubernetes, которая ведёт себя предсказуемо под нагрузкой.

    habr.com/ru/companies/domclick

    #python #gunicorn #wsgi #prefork #gthread #graceful_shutdown #keepalive #nginx #docker

  9. Code Review Horror Stories. Часть 2: API, ошибки и graceful shutdown

    Продолжение разбора реального кода с собеседования. В первой части разобрали 8 проблем concurrency и memory: race conditions, утечки горутин, проигнорированный mutex, TOCTOU. Это была первая половина из 21 бага в одном сервисе на 150 строк. Сегодня — вторая часть. Тут нет страшных race conditions, но есть то, что выдаёт уровень разработчика на собесе: отношение к ошибкам, валидация, API design, graceful shutdown, observability . Эти баги не упадут “вдруг” в продакшене — они будут тихо пилить вам костыль за костылём, пока кто-то не сядет переписывать. Актуально для Go 1.26. Напомню итог первой части: из 8 багов про concurrency на интервью нашёл 7, пропустил только TOCTOU race. В этой части из 13 багов пропустил два : package applike с func main() (то, что код не компилируется — банально не посмотрел на объявление пакета) и отсутствие slog (просто не зацепился за log.Println , а зря). Остальные 11 — поймал. Расскажу, какими паттернами в чтении кода я их вылавливал.

    habr.com/ru/articles/1033634/

    #go #golang #code_review #интервью #баги #api #graceful_shutdown #concurrency #go_126

  10. Code Review Horror Stories. Часть 2: API, ошибки и graceful shutdown

    Продолжение разбора реального кода с собеседования. В первой части разобрали 8 проблем concurrency и memory: race conditions, утечки горутин, проигнорированный mutex, TOCTOU. Это была первая половина из 21 бага в одном сервисе на 150 строк. Сегодня — вторая часть. Тут нет страшных race conditions, но есть то, что выдаёт уровень разработчика на собесе: отношение к ошибкам, валидация, API design, graceful shutdown, observability . Эти баги не упадут “вдруг” в продакшене — они будут тихо пилить вам костыль за костылём, пока кто-то не сядет переписывать. Актуально для Go 1.26. Напомню итог первой части: из 8 багов про concurrency на интервью нашёл 7, пропустил только TOCTOU race. В этой части из 13 багов пропустил два : package applike с func main() (то, что код не компилируется — банально не посмотрел на объявление пакета) и отсутствие slog (просто не зацепился за log.Println , а зря). Остальные 11 — поймал. Расскажу, какими паттернами в чтении кода я их вылавливал.

    habr.com/ru/articles/1033634/

    #go #golang #code_review #интервью #баги #api #graceful_shutdown #concurrency #go_126

  11. Очередь задач на Postgres: SKIP LOCKED + lease/heartbeat + backpressure (практический опыт)

    Как сделать надёжную очередь задач без Rabbit/Kafka, используя только Postgres? Разбираю боевой паттерн: FOR UPDATE SKIP LOCKED для конкурентного забора, lease/heartbeat для возврата задач после падений и backpressure, чтобы воркеры не съели память.

    habr.com/ru/articles/984102/

    #PostgreSQL #очередь_задач #SKIP_LOCKED #FOR_UPDATE #lease #heartbeat #backpressure #atleastonce #idempotency #graceful_shutdown

  12. Очередь задач на Postgres: SKIP LOCKED + lease/heartbeat + backpressure (практический опыт)

    Как сделать надёжную очередь задач без Rabbit/Kafka, используя только Postgres? Разбираю боевой паттерн: FOR UPDATE SKIP LOCKED для конкурентного забора, lease/heartbeat для возврата задач после падений и backpressure, чтобы воркеры не съели память.

    habr.com/ru/articles/984102/

    #PostgreSQL #очередь_задач #SKIP_LOCKED #FOR_UPDATE #lease #heartbeat #backpressure #atleastonce #idempotency #graceful_shutdown

  13. Хватит писать try-catch в контроллерах: как я причесал ошибки в Express и перестал бояться деплоя

    Знаете это чувство, когда открываешь контроллер в Express проекте, чтобы поправить одну строчку логики, и видишь ЭТО ? Бесконечная вложенность, проверки на существование полей, ручной парсинг ошибок от базы данных и, конечно же, его величество try-catch , который занимает 80% файла. Я тоже через это проходил. В каждом новом микросервисе я копипастил одни и те же функции обработки ошибок. В одном проекте я ловил ошибки Mongoose через err.name === 'ValidationError' , в другом — через instanceof . Где-то мы отдавали { error: "message" } , где-то { status: "fail", msg: "..." } . В какой-то момент мне это надоело. Мне захотелось инструмент, который я могу просто подключить одной строкой, и он сам поймет, что "E11000" от Mongo — это 409 Conflict, а ошибка Zod — это 400 Bad Request. При этом я не хотел тянуть в проект тяжелые зависимости. Так родилась библиотека ds-express-errors . Сегодня я расскажу, зачем я ее написал и почему она может сэкономить вам кучу нервов.

    habr.com/ru/articles/981456/

    #error_handling #express #graceful_shutdown #javascript #nodejs #opensourse #middleware #custom_config_parameters

  14. Хватит писать try-catch в контроллерах: как я причесал ошибки в Express и перестал бояться деплоя

    Знаете это чувство, когда открываешь контроллер в Express проекте, чтобы поправить одну строчку логики, и видишь ЭТО ? Бесконечная вложенность, проверки на существование полей, ручной парсинг ошибок от базы данных и, конечно же, его величество try-catch , который занимает 80% файла. Я тоже через это проходил. В каждом новом микросервисе я копипастил одни и те же функции обработки ошибок. В одном проекте я ловил ошибки Mongoose через err.name === 'ValidationError' , в другом — через instanceof . Где-то мы отдавали { error: "message" } , где-то { status: "fail", msg: "..." } . В какой-то момент мне это надоело. Мне захотелось инструмент, который я могу просто подключить одной строкой, и он сам поймет, что "E11000" от Mongo — это 409 Conflict, а ошибка Zod — это 400 Bad Request. При этом я не хотел тянуть в проект тяжелые зависимости. Так родилась библиотека ds-express-errors . Сегодня я расскажу, зачем я ее написал и почему она может сэкономить вам кучу нервов.

    habr.com/ru/articles/981456/

    #error_handling #express #graceful_shutdown #javascript #nodejs #opensourse #middleware #custom_config_parameters

  15. Чистим main.go: предсказуемый старт и надежный Graceful Shutdown

    Сталкивались ли вы с болью при управлении порядком запуска и остановки зависимостей в вашем Go-сервисе? Разработка больших сервисов неизбежно приводит к необходимости управлять множеством зависимостей. В этом контексте мы говорим о долгоживущих компонентах , чья работа обеспечивается отдельными горутинами: как правило, это блокирующий метод (например, Start ), внутри которого крутится цикл обработки. Примерный сценарий жизненного цикла сервиса выглядит так: При запуске критически важно, чтобы пул соединений с БД, кэш и очереди были полностью готовы до того, как HTTP-сервер откроет порт и начнет принимать входящий трафик. С graceful shutdown ситуация обратная: порядок должен быть строго зеркальным. Сначала нужно перестать принимать новые запросы, дождаться завершения текущих, остановить воркеры, и только потом разрывать соединения с инфраструктурой. Иначе мы получаем неприятные ошибки подключения и даже потерянные транзакции в момент деплоя. Если эти проблемы вам не знакомы, смело закрывайте вкладку. Скорее всего, эта статья не принесет вам пользы. Но если вы ищете способ автоматизировать эту рутину, сохранив код чистым - добро пожаловать под кат.

    habr.com/ru/articles/976800/

    #go #golang #graceful_shutdown #dag #Dependency_Injection #Uber_Fx #Микросервисы #Open_Source #Архитектура #lifecycle

  16. Чистим main.go: предсказуемый старт и надежный Graceful Shutdown

    Сталкивались ли вы с болью при управлении порядком запуска и остановки зависимостей в вашем Go-сервисе? Разработка больших сервисов неизбежно приводит к необходимости управлять множеством зависимостей. В этом контексте мы говорим о долгоживущих компонентах , чья работа обеспечивается отдельными горутинами: как правило, это блокирующий метод (например, Start ), внутри которого крутится цикл обработки. Примерный сценарий жизненного цикла сервиса выглядит так: При запуске критически важно, чтобы пул соединений с БД, кэш и очереди были полностью готовы до того, как HTTP-сервер откроет порт и начнет принимать входящий трафик. С graceful shutdown ситуация обратная: порядок должен быть строго зеркальным. Сначала нужно перестать принимать новые запросы, дождаться завершения текущих, остановить воркеры, и только потом разрывать соединения с инфраструктурой. Иначе мы получаем неприятные ошибки подключения и даже потерянные транзакции в момент деплоя. Если эти проблемы вам не знакомы, смело закрывайте вкладку. Скорее всего, эта статья не принесет вам пользы. Но если вы ищете способ автоматизировать эту рутину, сохранив код чистым - добро пожаловать под кат.

    habr.com/ru/articles/976800/

    #go #golang #graceful_shutdown #dag #Dependency_Injection #Uber_Fx #Микросервисы #Open_Source #Архитектура #lifecycle

  17. [Перевод] Graceful Shutdown в Go на практике

    Разберемся с сигналами от ОС, поработаем с таймаутами и контекстом в нашем HTTP сервере и шаг за шагом сделаем Graceful Shutdown в Go приложении.

    habr.com/ru/articles/908344/

    #golang #go #graceful_shutdown #practice

  18. [Перевод] Graceful Shutdown в Go на практике

    Разберемся с сигналами от ОС, поработаем с таймаутами и контекстом в нашем HTTP сервере и шаг за шагом сделаем Graceful Shutdown в Go приложении.

    habr.com/ru/articles/908344/

    #golang #go #graceful_shutdown #practice

  19. До свидания, Kafka, или graceful shutdown на Spring Boot для Kafka

    В этой статье я немного объясню важность graceful shutdown и расскажу как сделать плавное завершение работы твоего Spring Boot приложения, которое взаимодействует с Kafka.

    habr.com/ru/articles/908022/

    #java #springboot #kafka #graceful_shutdown

  20. До свидания, Kafka, или graceful shutdown на Spring Boot для Kafka

    В этой статье я немного объясню важность graceful shutdown и расскажу как сделать плавное завершение работы твоего Spring Boot приложения, которое взаимодействует с Kafka.

    habr.com/ru/articles/908022/

    #java #springboot #kafka #graceful_shutdown

  21. [Перевод] Корректное завершение работы подов в Kubernetes

    Перевели статью и наглядную инфографику управляющего директора Learnk8s Daniele Polencic о корректном завершении работы подов в Kubernetes. В тексте много примеров и иллюстраций, которые помогут начинающим разобраться, как предотвратить разрыв соединений при запуске или остановке пода. В том числе для долгоживущих соединений и задач.

    habr.com/ru/companies/flant/ar

    #kubernetes #pod #graceful_shutdown #поды #завершение_работы #контейнеризация #деплоймент #deployment #k8s

  22. [Перевод] Корректное завершение работы подов в Kubernetes

    Перевели статью и наглядную инфографику управляющего директора Learnk8s Daniele Polencic о корректном завершении работы подов в Kubernetes. В тексте много примеров и иллюстраций, которые помогут начинающим разобраться, как предотвратить разрыв соединений при запуске или остановке пода. В том числе для долгоживущих соединений и задач.

    habr.com/ru/companies/flant/ar

    #kubernetes #pod #graceful_shutdown #поды #завершение_работы #контейнеризация #деплоймент #deployment #k8s