Git Hosting на Go: от 10k до 100k RPS
Git Hosting на Go: от 10k до 100k RPS
Практический курс: Git-хостинг на Go, применяя паттерны из курса «Архитектура распределённых систем».
Как этот курс соотносится с капстоуном go-advanced. Обе практики строят Git-хостинг, но роли разные: здесь — управляемый практикум по эволюции производительности (10k → 100k RPS): дорожная карта готова, на каждом шаге разобраны решения и trade-offs. Капстоун go-advanced — наоборот: самостоятельное проектирование своего сервиса с нуля, ADR и защита решений. Порядок любой: практикум даёт арсенал решений, капстоун — проверку, что вы умеете выбирать их сами.
Почему Go, а не Symfony?
| Проблема | Symfony | Go |
|---|---|---|
| packfile streaming | Nginx → CGI workaround (PHP OOM на >16MB) | exec.Cmd.Stdin = r.Body — нативный стрим, нет лимита |
| Bulkhead | 2 пула PHP-FPM + Nginx upstream | chan struct{} — семафор на 5 concurrent |
| 100k RPS | RoadRunner (отдельная технология) | Go IS long-lived — не нужен RoadRunner |
| Memory | OOM на packfile, memory leaks в воркерах | GC управляет, streaming без буферизации |
Go не решает архитектурные проблемы (Outbox, Saga, шардирование — те же), но убирает инфраструктурные костыли: нет CGI, нет RoadRunner, нет двух пулов FPM.
Трек
| Модуль | Тема | Отличие от Symfony-курса |
|---|---|---|
| 1 | Setup: Go binary, docker-compose, первый clone | Проще — один бинарник, нет Nginx для dev |
| 2 | Git Smart HTTP: exec.Command + io streaming | Нет проблемы OOM — Go стримит нативно |
| 3 | Bulkhead: chan struct{} вместо FPM pools | Одна конструкция вместо двух пулов + Nginx |
| 4 | Outbox: goroutine + pgx FOR UPDATE SKIP LOCKED | Тот же паттерн, Go-идиоматичный код |
| 5 | Cache-Aside: go-redis для ls-tree | Тот же паттерн |
| 6 | PR Saga: state machine в Go | Тот же паттерн |
| 7 | Scale 100k: Go не нужен RoadRunner, но нужен Kafka+Citus+CDN | Главная разница: рантайм не меняется |
| 8 | Defense: 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).