Совет по Docker
Как понять, что раздувает образ
Любой Docker-образ состоит из слоев.
Каждая строка в Dockerfile добавляет новый слой.
По этим слоям можно понять, почему образ получается большим, долго собирается или плохо кешируется.
Вот как посмотреть слои и узнать, что именно менялось в каждом из них.
Используй утилиту dive.
Она показывает наглядно:
- какие слои созданы
- какие файлы добавлены или изменены
- сколько места занимает каждый слой
Когда начинаешь изучать слои образа, можно быстро выяснить:
• какая команда в Dockerfile добавляет лишний вес
• как оптимизировать сборку, чтобы образ был меньше и собирался быстрее
Dive также дает оценку «эффективности» образа. Она показывает, насколько много данных дублируется или просто впустую занимает место в слоях.
👉 Java Portal
Как понять, что раздувает образ
Любой Docker-образ состоит из слоев.
Каждая строка в Dockerfile добавляет новый слой.
По этим слоям можно понять, почему образ получается большим, долго собирается или плохо кешируется.
Вот как посмотреть слои и узнать, что именно менялось в каждом из них.
Используй утилиту dive.
Она показывает наглядно:
- какие слои созданы
- какие файлы добавлены или изменены
- сколько места занимает каждый слой
Когда начинаешь изучать слои образа, можно быстро выяснить:
• какая команда в Dockerfile добавляет лишний вес
• как оптимизировать сборку, чтобы образ был меньше и собирался быстрее
Dive также дает оценку «эффективности» образа. Она показывает, насколько много данных дублируется или просто впустую занимает место в слоях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4
Java/Backend. Интервью. Сценарный вопрос про распределенный лок:
У тебя есть критичный сервис, допустим обработка заказов, который крутится на нескольких инстансах в Kubernetes. Чтобы избежать гонки, когда два инстанса одновременно берут один и тот же заказ, ты ставишь распределенный лок через Redis setnx с TTL 10 секунд.
Какой критичный кейс все равно возможен, если один из инстансов словит Full GC паузу длиной 15 секунд сразу после получения лока? Опиши ситуацию split-brain и к чему она приведет по данным.
Как это разруливать на интервью:
→ сначала важно отметить, что простой Redis-лок с TTL помогает, если сервис просто упал, но создает новую, куда более опасную проблему
→ баг в том, что длинная пауза, например Full GC, может быть дольше, чем TTL лока
→ и вот что ломается (Split-Brain):
Service A берет лок,
и тут же уходит в GC на 15 секунд
Через 10 секунд Redis удаляет лок по TTL
Service B спокойно берет тот же лок,
и начинает обрабатывать заказ
Через 15 секунд Service A просыпается
все еще уверенный, что лок у него
и тоже обрабатывает этот же заказ
→ итог: два сервиса одновременно трогают один и тот же заказ. Данные ломаются. Например клиенту списывают деньги дважды.
→ реальное решение (меняем дизайн): вообще избавиться от лока
Кладем заказы в очередь сообщений,
например Kafka или RabbitMQ
Consumer group с несколькими инстансами читает этот топик
Брокер гарантирует, что каждое сообщение (заказ) уходит только одному инстансу из группы
👉 Java Portal
У тебя есть критичный сервис, допустим обработка заказов, который крутится на нескольких инстансах в Kubernetes. Чтобы избежать гонки, когда два инстанса одновременно берут один и тот же заказ, ты ставишь распределенный лок через Redis setnx с TTL 10 секунд.
Какой критичный кейс все равно возможен, если один из инстансов словит Full GC паузу длиной 15 секунд сразу после получения лока? Опиши ситуацию split-brain и к чему она приведет по данным.
Как это разруливать на интервью:
→ сначала важно отметить, что простой Redis-лок с TTL помогает, если сервис просто упал, но создает новую, куда более опасную проблему
→ баг в том, что длинная пауза, например Full GC, может быть дольше, чем TTL лока
→ и вот что ломается (Split-Brain):
Service A берет лок,
и тут же уходит в GC на 15 секунд
Через 10 секунд Redis удаляет лок по TTL
Service B спокойно берет тот же лок,
и начинает обрабатывать заказ
Через 15 секунд Service A просыпается
все еще уверенный, что лок у него
и тоже обрабатывает этот же заказ
→ итог: два сервиса одновременно трогают один и тот же заказ. Данные ломаются. Например клиенту списывают деньги дважды.
→ реальное решение (меняем дизайн): вообще избавиться от лока
Кладем заказы в очередь сообщений,
например Kafka или RabbitMQ
Consumer group с несколькими инстансами читает этот топик
Брокер гарантирует, что каждое сообщение (заказ) уходит только одному инстансу из группы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2
Учебник по Java от Андрея Иванцова теперь доступен онлайн на GitBook. В нём собрано всё, что нужно новичку: от простых типов данных и строк до исключений и коллекций. Материал подан по делу, с примерами кода и понятными объяснениями.
Ссылка для тех, кто хочет прокачаться: andrey-ivantsov.gitbook.io/java
👉 Java Portal
Ссылка для тех, кто хочет прокачаться: andrey-ivantsov.gitbook.io/java
Please open Telegram to view this post
VIEW IN TELEGRAM
👀7
Совет по Spring Boot 4. В Jackson 3 теперь в приоритете JsonMapper для работы с JSON. Обрати внимание на новый import. ObjectMapper из com.fasterxml больше не нужен. JsonMapper теперь основной инструмент для JSON в современных Spring-приложениях.
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Зарплата 207.000р у Middle-разработчика в Яндекс
«В день уходит несколько часов на созвоны, в остальное время закрываю задачки из спринта, редко перерабатываю. У компании топовый офис, но с коллективом как-то не заладилось. Радуюсь классному ДМС и стабильной зарплате» - middle разработчик из Яндекса.
Бигтех по-русски - канал с реальными зарплатами и историями IT-специалистов российского БигТеха. Там уже опубликованы рассказы программистов Альфа-банка, Сбера и Тинькофф🤯
Читайте: @bigtech_russia
«В день уходит несколько часов на созвоны, в остальное время закрываю задачки из спринта, редко перерабатываю. У компании топовый офис, но с коллективом как-то не заладилось. Радуюсь классному ДМС и стабильной зарплате» - middle разработчик из Яндекса.
Бигтех по-русски - канал с реальными зарплатами и историями IT-специалистов российского БигТеха. Там уже опубликованы рассказы программистов Альфа-банка, Сбера и Тинькофф
Читайте: @bigtech_russia
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7
Spring Framework 7 добавил встроенный механизм ретраев. Больше не нужно подключать внешнюю зависимость spring-retry. Если надо больше контроля, чем даёт
👉 Java Portal
@Retryable, используй RetryTemplatePlease open Telegram to view this post
VIEW IN TELEGRAM
👍7
Spring Boot 4 делает настройку HTTP-интерфейсов гораздо чище
Больше никакого ручного создания прокси и шаблонного кода. Просто используй
Было 5+ строк конфигурации на каждый клиент → стала одна аннотация
👉 Java Portal
Больше никакого ручного создания прокси и шаблонного кода. Просто используй
@ImportHttpServices и готово.Было 5+ строк конфигурации на каждый клиент → стала одна аннотация
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
kill -15 даёт ядру возможность завершить процесс аккуратно, чтобы тот успел всё почистить и закрыть как положено.
kill -9 — это уже жёсткий килл, без шансов на «прощальную речь». Процесс просто вырубается, не успев освободить ресурсы или записать данные.
Вот пример с node http-server: при обычном завершении (-15) он корректно закрывает соединения, а при -9 просто падает без возможности что-то доработать.
Короче, будь готов к -9, но надейся на -15.
👉 Java PortalМ
kill -9 — это уже жёсткий килл, без шансов на «прощальную речь». Процесс просто вырубается, не успев освободить ресурсы или записать данные.
Вот пример с node http-server: при обычном завершении (-15) он корректно закрывает соединения, а при -9 просто падает без возможности что-то доработать.
Короче, будь готов к -9, но надейся на -15.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3