Корректное завершение работы приложения
Когда мы говорим о graceful shutdown (корректном завершении приложения), важно обеспечить несколько ключевых вещей:
- Нет новых запросов: сервер прекращает принимать новые запросы.
- Завершение текущих задач: ждём, пока выполняющиеся задачи дойдут до логической точки остановки
- Очистка ресурсов: освобождаем такие ресурсы, как соединения с базой данных, открытые файлы, сетевые подключения и т.д.
Существует несколько способов реализации, но я постараюсь дать самый короткий ради простоты: сначала создаём контекст (в main), который отменяется при получении сигнала прерывания (Ctrl+C) или SIGTERM.
Затем запускаем две горутины, координируемые через
Go errgroup — You Haven’t Used Goroutines Until You’ve Used This).
🔹 Первая - простой запуск сервера, но помните:
🔹 Вторая интереснее: это место для нашего graceful cleanup. Эта горутина ждёт закрытия
Если ваш сервис работает в Kubernetes, не стоит сразу отрубать приём новых запросов после получения
Приложение не должно завершаться мгновенно, ему нужно дождаться завершения всех активных запросов и продолжать слушать новые подключения, которые могут прийти во время процесса остановки Pod’а.
Kubernetes может потребоваться время, чтобы обновить все kube-proxies и балансировщики.
Это упрощённая версия, вы можете дополнительно: добавить таймаут в конфигурацию сервера, проверять, что ошибка closed, задать таймаут на shutdown и т.д.
👉 @GolangPortal
Когда мы говорим о graceful shutdown (корректном завершении приложения), важно обеспечить несколько ключевых вещей:
- Нет новых запросов: сервер прекращает принимать новые запросы.
- Завершение текущих задач: ждём, пока выполняющиеся задачи дойдут до логической точки остановки
- Очистка ресурсов: освобождаем такие ресурсы, как соединения с базой данных, открытые файлы, сетевые подключения и т.д.
Существует несколько способов реализации, но я постараюсь дать самый короткий ради простоты: сначала создаём контекст (в main), который отменяется при получении сигнала прерывания (Ctrl+C) или SIGTERM.
Затем запускаем две горутины, координируемые через
errgroup (если вы не знакомы с ней, посмотрите эту статью:Go errgroup — You Haven’t Used Goroutines Until You’ve Used This).
ListenAndServe всегда возвращает non-nil error.gCtx.Done(), которое прокидывается из нашего основного ctx.Если ваш сервис работает в Kubernetes, не стоит сразу отрубать приём новых запросов после получения
SIGTERM.Приложение не должно завершаться мгновенно, ему нужно дождаться завершения всех активных запросов и продолжать слушать новые подключения, которые могут прийти во время процесса остановки Pod’а.
Kubernetes может потребоваться время, чтобы обновить все kube-proxies и балансировщики.
Это упрощённая версия, вы можете дополнительно: добавить таймаут в конфигурацию сервера, проверять, что ошибка closed, задать таймаут на shutdown и т.д.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍5🔥4
Поздравляем, вы на 1 шаг ближе к работе мечты 🥳
Осталось только прочитать этот пост, подписаться на канал и откликнуться на вакансию 😉
Avito Career — место, где Авито делится актуальными вакансиями и стажировками для Go-разработчиков.
Подписывайтесь, чтобы найти ту самую работу ✨
Осталось только прочитать этот пост, подписаться на канал и откликнуться на вакансию 😉
Avito Career — место, где Авито делится актуальными вакансиями и стажировками для Go-разработчиков.
Подписывайтесь, чтобы найти ту самую работу ✨
👀1
Go sync.Cond — самый недооцененный механизм синхронизации: продолжение серии статей Phuong Le про сложные аспекты Go на простых иллюстрациях
Читаем здесь
👉 @GolangPortal
Читаем здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🌭1
Библиотека для мониторинга производительности Go-приложений, предоставляющая данные в реальном времени о метриках на уровне сервисов и отдельных функций
GitHub: monigo
👉 @GolangPortal
GitHub: monigo
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Изучаете, как вручную размещать Pod'ы в Kubernetes?
На платформе iximiuz Labs доступно задание, которое охватывает node selectors, правила affinity и taints.
Полезно, когда вам нужно контролировать размещение Pod'ов, например, для запуска рабочих нагрузок на узлах с GPU, изоляции сред или распределения трафика.
Если вы хотите освоить эти техники, это задание — отличный способ попрактиковаться.
Попробуйте здесь:
https://labs.iximiuz.com/challenges/kubernetes-pod-advanced-scheduling-3b631fdf
👉 @GolangPortal
На платформе iximiuz Labs доступно задание, которое охватывает node selectors, правила affinity и taints.
Полезно, когда вам нужно контролировать размещение Pod'ов, например, для запуска рабочих нагрузок на узлах с GPU, изоляции сред или распределения трафика.
Если вы хотите освоить эти техники, это задание — отличный способ попрактиковаться.
Попробуйте здесь:
https://labs.iximiuz.com/challenges/kubernetes-pod-advanced-scheduling-3b631fdf
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9
Опенсорсная альтернатива Vercel, Heroku и Netlify, с упрощёнными рабочими процессами
GitHub: nixopus
👉 @GolangPortal
GitHub: nixopus
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤3
Занимательная серия статей от Phuong Le про I/O в Go
Тема, с которой многие из нас регулярно работают, но не до конца понимают. Давайте разберёмся в этом:
▪️ Go I/O Readers, Writers и Data
▪️ Go I/O Closer, Seeker, WriterTo и ReaderFrom
👉 @GolangPortal
Тема, с которой многие из нас регулярно работают, но не до конца понимают. Давайте разберёмся в этом:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6
Высокопроизводительная библиотека для управления конфигурацией в Go-приложениях с нулевыми аллокациями, поддержкой универсальных форматов (JSON, YAML, TOML, HCL, INI, Properties) и сверхбыстрым CLI
GitHub: argus
👉 @GolangPortal
GitHub: argus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥4🤔1
Кэш-френдли структуры данных в Go: ускорение в 10 раз без изменения алгоритма
Узнайте, как оптимизировать структуры данных на Go под современные архитектуры CPU. Мы разберём кэш-линии, ложное разделение и ориентированное на данные проектирование, чтобы добиться существенного прироста производительности в реальных приложениях.
https://skoredin.pro/blog/golang/cpu-cache-friendly-go
👉 @GolangPortal
Узнайте, как оптимизировать структуры данных на Go под современные архитектуры CPU. Мы разберём кэш-линии, ложное разделение и ориентированное на данные проектирование, чтобы добиться существенного прироста производительности в реальных приложениях.
https://skoredin.pro/blog/golang/cpu-cache-friendly-go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤯2
This media is not supported in your browser
VIEW IN TELEGRAM
Знакомо чувство, когда читать про Go уже не хочется, а вот обсудить все, что волнует — да?
1 ноября в Москве пройдет Я.Субботник по Go от Яндекса — как раз то, что нужно. Митап, чтобы обсудить новые подходы, тренды, решения и вызовы индустрии.
В программе выступлений:
— Александр Никитин (старший разработчик бэкенда Яндекс Маркета): как с помощью Debug Tree удобно логировать и быстро находить баги в коде или дефекты в данных;
— Игорь Панасюк (разработчик бэкенда Плюса и Финтеха): как устроен garbage collector в Go 1.25, что изменилось и как это повлияет на ваши сервисы;
— Степан Пестерников (СТО Яндекс Игр): как используют KV-хранилища и кеши в Яндекс Играх, и др.
А еще нетворкинг в перерывах между докладами и круглые столы по темам от AI-инструментов до будущего языка.
Зарегистрироваться и познакомиться с программой можно тут.
1 ноября в Москве пройдет Я.Субботник по Go от Яндекса — как раз то, что нужно. Митап, чтобы обсудить новые подходы, тренды, решения и вызовы индустрии.
В программе выступлений:
— Александр Никитин (старший разработчик бэкенда Яндекс Маркета): как с помощью Debug Tree удобно логировать и быстро находить баги в коде или дефекты в данных;
— Игорь Панасюк (разработчик бэкенда Плюса и Финтеха): как устроен garbage collector в Go 1.25, что изменилось и как это повлияет на ваши сервисы;
— Степан Пестерников (СТО Яндекс Игр): как используют KV-хранилища и кеши в Яндекс Играх, и др.
А еще нетворкинг в перерывах между докладами и круглые столы по темам от AI-инструментов до будущего языка.
Зарегистрироваться и познакомиться с программой можно тут.
👍6❤3🔥2🤔2
Быстрая библиотека для извлечения данных из документов с поддержкой нескольких форматов для Go. Включает потоковый API для работы с крупными файлами и OCR для сканированных документов через Tesseract
GitHub: extractous-go
👉 @GolangPortal
GitHub: extractous-go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥2🤔1
Собери свою собственную базу данных. Пошаговое руководство по созданию key-value базы данных с нуля
https://www.nan.fyi/database
👉 @GolangPortal
https://www.nan.fyi/database
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Самостоятельно развёртываемый WAF (Web Application Firewall) на Go, выполняющий роль reverse-proxy для защиты ваших веб-приложений от атак и эксплуатации уязвимостей.
GitHub: SafeLine
👉 @GolangPortal
GitHub: SafeLine
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Долговечное фоновое выполнение с Go и SQLite
Статья рассказывает о том, как с помощью Watermill и SQLite можно построить фоновое выполнение задач в Go-приложении так, чтобы оно было долговечно устойчивым, то есть сохраняло корректность результата даже при сбоях системы, прерываниях выполнения и отказах инфраструктуры
Читайте здесь
👉 @GolangPortal
Статья рассказывает о том, как с помощью Watermill и SQLite можно построить фоновое выполнение задач в Go-приложении так, чтобы оно было долговечно устойчивым, то есть сохраняло корректность результата даже при сбоях системы, прерываниях выполнения и отказах инфраструктуры
Читайте здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Дженерики в Go: Ваш дружелюбный гид по повторно используемому коду
В этом гайде рассказывается, что такое дженерики, как их использовать и зачем они нужны
👉 Читать
👉 @GolangPortal
В этом гайде рассказывается, что такое дженерики, как их использовать и зачем они нужны
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3
Быстрое опенсорс приложение для ведения заметок в Markdown для студентов и креаторов, с бэкендом на Go
GitHub: Alexandrie
👉 @GolangPortal
GitHub: Alexandrie
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🤔1🌚1
От 19 часов до менее секунды: создание сверхбыстрого TCP-сканера на Go
Статья о том, как команда переписала свой сканер сети с обычного TCP-connect метода на «half-open» SYN-сканирование на языке и добилась сокращения времени проверки сети из 19 часов до менее чем одной секунды
Читайте здесь
👉 @GolangPortal
Статья о том, как команда переписала свой сканер сети с обычного TCP-connect метода на «half-open» SYN-сканирование на языке и добилась сокращения времени проверки сети из 19 часов до менее чем одной секунды
Читайте здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
Богатый терминальный интерфейс для GitHub, который не выбивает из рабочего потока, написан на Go
GitHub: gh-dash
👉 @GolangPortal
GitHub: gh-dash
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🤔5
Планировщик нового поколения, разработанный для cloud-native экосистемы, написанный на Go и работающий на базе фреймворка qumun
GitHub: Gthulhu
👉 @GolangPortal
GitHub: Gthulhu
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🤔3👍2
Arch Linux у которого установщик и система обновления целиком написаны на Go
https://archriot.org/
👉 @GolangPortal
https://archriot.org/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤4👍1😁1