ЛентаСтатьиЗаметкиКурсы
Рецепты
← Все курсы

Git Hosting на Go: от 10k до 100k RPS

GoGitArchitectureHighloadYandex CloudpgxKafka

Git Hosting на Go: от 10k до 100k RPS

Практический курс: Git-хостинг на Go, применяя паттерны из курса «Архитектура распределённых систем».

Как этот курс соотносится с капстоуном go-advanced. Обе практики строят Git-хостинг, но роли разные: здесь — управляемый практикум по эволюции производительности (10k → 100k RPS): дорожная карта готова, на каждом шаге разобраны решения и trade-offs. Капстоун go-advanced — наоборот: самостоятельное проектирование своего сервиса с нуля, ADR и защита решений. Порядок любой: практикум даёт арсенал решений, капстоун — проверку, что вы умеете выбирать их сами.

Почему Go, а не Symfony?

ПроблемаSymfonyGo
packfile streamingNginx → CGI workaround (PHP OOM на >16MB)exec.Cmd.Stdin = r.Body — нативный стрим, нет лимита
Bulkhead2 пула PHP-FPM + Nginx upstreamchan struct{} — семафор на 5 concurrent
100k RPSRoadRunner (отдельная технология)Go IS long-lived — не нужен RoadRunner
MemoryOOM на packfile, memory leaks в воркерахGC управляет, streaming без буферизации

Go не решает архитектурные проблемы (Outbox, Saga, шардирование — те же), но убирает инфраструктурные костыли: нет CGI, нет RoadRunner, нет двух пулов FPM.

Трек

МодульТемаОтличие от Symfony-курса
1Setup: Go binary, docker-compose, первый cloneПроще — один бинарник, нет Nginx для dev
2Git Smart HTTP: exec.Command + io streamingНет проблемы OOM — Go стримит нативно
3Bulkhead: chan struct{} вместо FPM poolsОдна конструкция вместо двух пулов + Nginx
4Outbox: goroutine + pgx FOR UPDATE SKIP LOCKEDТот же паттерн, Go-идиоматичный код
5Cache-Aside: go-redis для ls-treeТот же паттерн
6PR Saga: state machine в GoТот же паттерн
7Scale 100k: Go не нужен RoadRunner, но нужен Kafka+Citus+CDNГлавная разница: рантайм не меняется
8Defense: ADR + ROI Go vs PHPСравнение TCO двух стеков

Пререквизиты

  • Курс «Архитектура распределённых систем» (модули 1–10)
  • Go 1.23+
  • Docker, Docker Compose
  • Git internals (bare-репозитории, packfile, refs)

Boilerplate

src/courses/git-hosting/boilerplate/go/ — рабочий каркас с docker-compose (PostgreSQL, Redis, Kafka, Jaeger, Prometheus, Grafana).

Программа курса

1

Модуль 1: Setup — Go binary, docker-compose, первый clone

→
2

Модуль 2: Git Smart HTTP — exec.Command с нативным стримингом

→
3

Модуль 3: Bulkhead — chan struct{} вместо пулов FPM

→
4

Модуль 4: Outbox — goroutine + pgx FOR UPDATE SKIP LOCKED

→
5

Модуль 5: Cache-Aside — go-redis для деревьев файлов

→
6

Модуль 6: PR Saga — state machine в Go

→
7

Модуль 7: Scale to 100k — Go не нужен RoadRunner, но нужен Kafka + Citus + CDN

→
8

Модуль 8: Defense — ADR + ROI Go vs Symfony

→
Начать обучение