Go

Архив партий VOG в Parquet: 17 миллионов игр с диска сервера в S3

Архив партий VOG в Parquet: 17 миллионов игр с диска сервера в S3

Как архив VOG за двадцать пять лет — около 17,7 млн партий в собственном файловом формате на диске игрового сервера — переехал в Parquet в S3-совместимом хранилище: почему не Iceberg и не protobuf, почему первое поколение с ходами по колонкам пришлось переделать в «транскрипт как есть», что ломалось при выгрузке, как сверяли результат и как старые партии стали открываться в браузере

Вход без паролей в VOG: одна авторизация для браузера и Windows-клиента

Вход без паролей в VOG: одна авторизация для браузера и Windows-клиента

Как VOG ушёл от коротких паролей, присланных письмом, к быстрому и надёжному входу без паролей: один поток для входа и регистрации по коду из письма, соцсети с разным набором для России и остального мира, сессии с ротацией, вход в Windows-клиент через браузер по PKCE, подтверждение входа с уже авторизованного устройства — и как вход по коду из письма стал инструментом почтовой бомбардировки

Плагины Picodata на Rust: pike, миграции и blue-green

Плагины Picodata на Rust: pike, миграции и blue-green

Когда SQL не хватает, Picodata расширяют плагином на Rust: сервис внутри кластера со своим жизненным циклом, миграциями схемы и обновлением версий без остановки. Разбор на рабочем плагине — от скелета через pike до blue-green, включая места, где всё это ведёт себя не так, как ожидаешь

«Доступна новая версия сайта»: как вкладка узнаёт о выкладке и почему не перезагружается сама

«Доступна новая версия сайта»: как вкладка узнаёт о выкладке и почему не перезагружается сама

Сайт VOG перестал перезагружать страницу при переходах, и вкладка стала жить часами на коде, загруженном до выкладки. Как вкладка узнаёт о новой сборке почти без лишней нагрузки на сервер — из заголовков обычных ответов и редкого опроса, — почему обновление предлагается кнопкой, а не делается само, и как одна строка ?v= дала на странице две копии React

Установщик на Go для Windows-клиента: как VOG ушёл от MSI и redist

Установщик на Go для Windows-клиента: как VOG ушёл от MSI и redist

Старый MSI-установщик VOG перестал ставиться на свежие Windows из-за распространяемого пакета Visual C++. Как вместо него появился загрузчик на Go — один статический файл без cgo и без единой сторонней зависимости, с окном на голом WinAPI, модульной установкой, откатом версий, двумя слоями подписей Ed25519 и честными отношениями с антивирусами

Логи и корреляция: структурные логи, trace_id и Loki

Логи и корреляция: структурные логи, trace_id и Loki

Структурный лог и коррелируемый лог — не одно и то же: в Go trace_id в stdout приходится добавлять руками, в Java его кладёт агент. Разбираем модель Loki, замеряем последствия высокой кардинальности (2 стрима против 1202), выясняем, почему на OTLP-логах не работает привычный json-парсер, и ловим ошибку корреляции, которая проявляется у каждого шестнадцатого трейса.

Распределённый трейсинг end-to-end: контекст через HTTP, БД и брокеры

Распределённый трейсинг end-to-end: контекст через HTTP, БД и брокеры

Распределённый трейсинг держится на одном: контекст должен пережить каждую границу. Разбираем W3C trace context дословно с провода, проброс через HTTP, PostgreSQL и NATS, два воспроизводимых разрыва трейса, head- и tail-семплинг с фактическими долями и две ловушки TraceQL, которые дают правдоподобные неверные числа.

Picodata и PostgreSQL: где кончается совместимость

Picodata и PostgreSQL: где кончается совместимость

PostgreSQL-протокол — основной способ работы с Picodata: psql, pgx и psycopg подключаются к ней тем же кодом, что к PostgreSQL. Но совместимость частичная, и граница проходит не там, где ожидаешь. Живая матрица пяти клиентов против 59 SQL-конструкций, поведение pg_dump и мигратора, и почему у Picodata собственный JDBC-драйвер