Контейнер под капотом, или Как четыре syscall'а изменили подход к эксплуатации ПО Для многих контейнеры — это просто docker run и YAML-конфиги. Но внутри это не магия и не аппаратная виртуализация, а обычный процесс в Linux, ограниченный на уровне ядра. Залезаем «под капот» контейнеризации и показываем, как собрать примитивный контейнер на Go, используя всего четыре системных вызова. 📎 Подробная статья — тут. #backendvk #go #linux
Backend VK Hub
Комьюнити VK для бэкендеров. Cамые хардовые кейсы, дискуссии в кругу своих и прямой доступ к нашим экспертам 😎
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
7 из 7channel internals — как устроен канал внутри Канал в Go выглядит как примитив языка, но за ним стоит конкретная структура hchan в runtime. Большинство знают семантику — отправил, получил, заблокировался. Но когда начинаются утечки горутин, дедлоки или неожиданное поведение select — без понимания устройства найти причину сложно. Разбираем, что происходит внутри на каждой операции. #backendvk #go
Индексы на NULL работают не так, как индексы на значения В большинстве БД NULL не равен ничему, включая другой NULL. Это ломает интуицию при работе с индексами. CREATE INDEX idx_deleted_at ON orders(deleted_at); -- использует индекс SELECT FROM orders WHERE deleted_at = '2024-01-01'; -- НЕ использует индекс в некоторых БД SELECT FROM orders WHERE deleted_at IS NULL; PostgreSQL индексирует NULL и использует индекс для IS NULL. MySQL InnoDB — тоже. Но Oracle по умолчанию не включает NULL в B-tree ...
Привет! Это рубрика «Знакомство с командой», и сегодня с нами Егор Замараев, руководитель отдела контентных сервисов Одноклассников. Егор в компании уже 13 лет: обсудили путь от сборки тестовых ферм до управления стримом продуктовой разработки в ОК. О том, как автоматизировать рутину, интегрировать Единые технологии и как находить баланс между работой, семьей и увлечениями. ➡️ Старт карьеры Я работаю в Одноклассниках давно — уже порядка тринадцати лет. По специальности я инженер-проектировщик эл...
Optimistic locking с @Version в JPA Mobile Когда два запроса одновременно читают одну запись и оба хотят её изменить — один из них молча затрёт изменения другого. Пессимистичная блокировка решает это через SELECT FOR UPDATE, но держит соединение открытым всё время транзакции. Оптимистичная блокировка работает иначе: конфликт обнаруживается только в момент записи, без удержания блокировки на время чтения. #backendvk #java #jpa #highload
Соскучились по нашим митапам? У нас отличные новости — совсем скоро пройдёт VK JT Meetup для опытных Go-разработчиков! 4 апреля — в Москве, 11-го — в Санкт-Петербурге. План такой: 📌 Стартуем! Обсуждаем два доклада от наших лидов — разборы реальных кейсов оптимизации из практики VK 📌 Выходим на хайвей: решайте архитектурную задачу в команде с обратной связью от экспертов 📌 Пит-стоп — завершаем встречу вечеринкой для нетворкинга В Москве вас ждёт дополнительная активность — обсуждение инженерны...
sealed interface + when = исчерпывающая обработка ошибок API На бэкенде ошибки часто летят через exception: где-то бросили, выше поймали, залогировали, отдали ответ. Но с ростом проекта становится сложнее понять: какие ошибки вообще может вернуть этот endpoint? И какие из них мы забыли обработать. sealed interface делает такие ошибки явной частью контракта: sealed interface CreateOrderError { data class UserNotFound(val userId: Long) : CreateOrderError data class InsufficientBalance( val has: Bi...