Перейти к содержанию

Метроскоп

Живая схема московского метро, за которой стоит полный производственный контур: приложение на Java, кластер Kubernetes, конвейер сборки, метрики, логи, трейсы, цели по качеству обслуживания и канареечные релизы с автоматическим откатом.

Открыть схему Дашборды Исходный код

Схема сети с составами в движении

Каждая точка — состав. Положение рассчитывается по геометрии линий из OpenStreetMap и интервалу выпуска, который меняется по времени суток.

Зачем это сделано

Стенд отвечает на вопрос, который трудно раскрыть в резюме: как человек принимает инженерные решения, когда ресурсы ограничены, и что он делает, когда сервис начинает деградировать.

Поэтому здесь есть не только карта, но и:

  • пульт, который ломает сервис по-настоящему — утечка памяти, замедление ответов, наплыв запросов;
  • дашборды, на которых видно последствия каждого нажатия;
  • правила оповещения по скорости прожигания бюджета ошибок, а не по одиночным всплескам;
  • инструкция дежурного и разбор инцидента, написанные по реальному прогону, а не по шаблону.

Что внутри

Слой Технологии
Узел Ubuntu 24.04, Ansible, ufw, fail2ban, подкачка 4 ГБ
Кластер k3s, Traefik, cert-manager, Let's Encrypt
Инфраструктура как код Terraform (состояние в кластере), Helm
Приложение Java 21, Spring Boot 3.5, виртуальные потоки, PostgreSQL 16, Flyway
Интерфейс React 19, Vite, Tailwind, Canvas 2D, поток событий SSE
Метрики Prometheus, Micrometer, правила SLI, автомасштабирование по прикладной метрике
Логи Alloy → Loki, структурированный JSON с идентификатором трейса
Трейсы Агент OpenTelemetry → Tempo, переход из лога в трейс одним щелчком
Доставка GitHub Actions, Jenkins, Argo Rollouts, канарейка с автоматическим анализом

Ограничения, о которых честно

Стенд живёт на одном узле с 4 ГБ оперативной памяти. Это осознанное ограничение: интереснее показать, как уложить полный контур в скромные ресурсы, чем перечислить технологии, которые нигде не запущены. Отсюда часть решений — k3s вместо полного кластера, Loki вместо ELK, одна реплика PostgreSQL. Каждое такое решение записано в список решений вместе с ценой, которую оно стоит.

Движение составов — модель. Московский метрополитен не публикует телеметрию поездов, поэтому положение рассчитывается из настоящей геометрии линий и правдоподобных интервалов выпуска. Подробнее — в решении 0003.