Экспериментариум

Картинка для привлечения внимания :) В Bazel есть две крайне полезные фичи:
  • stamping — позволяет встроить в артефакт данные о том, от какого коммита можно собрать аналогичный артефакт;
  • remote cache и remote build &mdasg; позволяет иметь общий кэш между сборщиками или даже собрать артефакты на ферме.

Ранее, к сожалению, эти фичи были взаимоисключающими, но с версии Bazel 7.0 можно использовать stamping с remote cache при помощи scrubbing-а. Сегодня вышла версия Bazel 7.1, в которой появилась возможность использовать stamping с remote build.

... Read More
Картинка для привлечения внимания :)

Разработка программного обеспечения связана не только с написанием кода, но и с его отладкой. И отладка должна быть по возможности комфортной.

С некоторыми ошибками мы пишем в лог стек вызовов. Используемая нами IDE (Idea, GoLand) позволяет по скопированному стеку вызовов получить комфортную навигацию по файлам (Analyze external stack traces). К сожалению, эта возможность хорошо работает только в том случае, если бинарый файл собран на том же хосте, на котором запущена IDE.

Этот пост посвящён тому, как мы пытались подружить формат стека вызовов и IDE.

... Read More
Картинка для привлечения внимания :)

В Bazel есть любопытная фича, позволяющая добавить данные, которые не инвалидируют кэш сборки.

Например, это бывает полезно, чтобы добавить в исполняемый файл информацию о том, когда он был собран и из какой ревизии. Если для времени и номера ревизии использовать stamping, то, когда собранный файл уже есть в кэше, он пересобираться не будет.

... Read More
Картинка для привлечения внимания :)

При поиске решений для сборки больших проектов на Go с завидной регулярностью попадались отсылки на статьи про Bazel, где общий алгоритм действий сводился к следующему:

  1. С помощью Gazelle создаём BUILD-файлы и файлы зависимостей;
  2. PROFIT.

К сожалению, эти статьи не дали ответа на два вопроса:

  • Как, с точки зрения разработчика, должна выглядеть работа с репозиторием после миграции на Bazel?
  • Как мигрировать на Bazel за несколько шагов, а не одним прыжком?
... Read More
Картинка для привлечения внимания :)

Это первый пост из цикла, посвященного миграции с go build на Bazel.

К процессу миграции мы подошли на этапе, когда запуск тестов на CI занимал примерно от 15 минут до часа. При этом мы уже успели реализовать некоторое распараллеливание и кэширование результатов тестов. Без этого тесты на одной машине должны были бы идти примерно часов восемь.

После внедрения Bazel запуск тестов на CI в основном укладывается в интервал от 1,5 до 25 минут (50 перцентиль в районе 12 минут), что гораздо комфортнее исходной ситуации.

... Read More
Картинка для привлечения внимания :) Мы собираем зависимости для нашего тестового окружения в Docker-образ, что оказалось очень удобно. Но недавно у нас появился разработчик с MacBook M1, и резко встал вопрос о возможности поддержки двух платформ. ... Read More
Картинка для привлечения внимания :) Мы столкнулись с достаточно занятным поведением при работе с Headless-сервисом в Kubernetes. В нашем случае проблема возникла с mongos, но она актуальна для любого Headless-сервиса.

Приглашаю вас почитать нашу историю и самим попробовать поиграться с этой проблемой локально.

На одном из проектов мы используем MongoDB и Kubernetes. У MongoDB есть компонент: mongos. Через него выполняются запросы в шардированном MongoDB кластере (можно считать, что это просто хитрый proxy). До переезда в Kubernetes сервисы mongos устанавливались непосредственно на каждый хост.

При переезде сервисов в Kubernetes мы поселили пул mongos в Headless-сервис с автоматическим масштабированием Deployment через HPA (Horizontal Pod Autoscaler).

Через некоторое время выяснилось, что приложению при уменьшении количества Pod с mongos становится не очень хорошо.

... Read More

В Jenkins очень забавно сделано логирование: через WEB UI можно добавить логирование нужных логгеров в кольцевой буффер.

Но для логирования в файл нужно немного поплясать с бубном.

... Read More

Что не так с MySQL?
19 November 2016

Двуликий сервер Несколько раз на разных проектах мне приходилось объяснять, почему MySQL является далеко не лучшим выбором.

Мне несколько надоело каждый раз воспроизводить список проблем MySQL по памяти и я решил написать этот пост.

... Read More

Когда более 2-х лет назад был презентован Git as Subversion, некоторые люди активно предлагали попробовать Perforce.

И вот, волей судеб, последние полгода на работе проект живёт в Perforce. И у меня сложилось о нём своё мнение.

... Read More