shad-go/lectures/07-distbuild/lecture.slide

82 lines
3.3 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# distbuild
Домашнее задание 2
## Цели второго ДЗ
- Написать _сложную_ систему
- Без _сложных_ алгоритмов
- Но с большим числом движущихся частей
- Написать подсистему исполнения джобов
- Написать клиент + сервер
## Современная сборка
Что происходит, когда вы запускаете `go build ./cmd/gitfame`?
.image graph.avif _ 900
## Современная сборка
Что происходит, когда вы запускаете `go build ./cmd/gitfame`?
1. `go build` строит граф сборки
- Вершина графа - файл + команда для его сборки (compile/link)
- Ребра - входные файлы для команды / зависимости
- Чтобы слинковать исполняемый файл, нужно скомпилировать все пакеты
- Чтобы запустить тест, нужно собрать исполняемый файл теста
- Все зависимости явно указаны в графе (герметичность). <s>`./run-whatever.sh`</s>
2. Граф сборки исполняется
- Команды в вершинах исполняются параллельно, если это возможно
- Результаты складываются в кэш
- Вместо исполнения команды, результат могут взять из кеша
## Современная сборка
.image jobs.avif _ 900
## Как работает кэш
Обычный кэш `key -> value`.
- `value` - директория с файлами
- Как сформировать ключ?
- `"./cmd/gitfame"` - не подходит
- Можно использовать хеш `sha1` от всех входных файлов и от всех команд вершины.
- Хеш входного файла можно заменить на ключ вершины, которая его породила.
## Как работает кэш
.image hash.avif _ 900
## Задача distbuild
- Граф сборки дан на вход
- Нужно исполнить этот граф в распределённой системе и закешировать результат
- Система состоит из 3-х компонент:
* Клиент
* Координатор
* Воркер
## Клиент
* Представьте, что он работает внутри команды `go build`
* Вам дают граф сборки.
* Нужно залить граф на координатор, вместе с исходными файлами.
* После этого, стримить результаты исполнения с координатора.
## Воркер
* В цикле просит с координатора следующий джоб и исполняет его.
* Хранит кеш артефактов.
## Координатор
* Общается с клиентом и воркером.
* Решает на каком воркере запускать какой джоб.
## Links
- [How bazel works](https://sluongng.hashnode.dev/bazel-caching-explained-pt-1-how-bazel-works)