Add week 7 materials
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# Семинар 7. Имена и поиск
|
||||
|
||||
Как по имени найти работающий сервис или нужные данные? Что произойдёт, если найденный адрес устарел? Разберём эти вопросы на примерах Consul, DNS, BitTorrent и Chord.
|
||||
|
||||
Материалы дополняют [лекцию 7](../07-naming-lookup.pdf). Каждый раздел содержит объяснения, вопросы и опыты для самостоятельного повторения.
|
||||
|
||||
## Темы
|
||||
|
||||
| Тема | Что исследуем |
|
||||
| --- | --- |
|
||||
| [Consul](consul/readme.md) | Поиск экземпляра сервиса и обращение по сохранённому адресу |
|
||||
| [DNS](dns/readme.md) | Делегирование, кэширование и ошибки поиска |
|
||||
| [BitTorrent](bittorrent/readme.md) | Поиск участников и проверка полученных данных |
|
||||
| [Chord](chord/readme.md) | Распределение ключей между узлами и поиск владельца ключа |
|
||||
|
||||
## Имя, идентификатор и адрес
|
||||
|
||||
У сервиса заказов `orders` работают два экземпляра: `app-a` и `app-b`. Каждый принимает запросы по своему адресу `IP:порт`.
|
||||
|
||||
Здесь важно различать три понятия:
|
||||
|
||||
- **Имя сервиса** — что мы ищем: `orders`.
|
||||
- **Идентификатор экземпляра** — какой именно участник перед нами: `app-a`.
|
||||
- **Адрес** — куда отправить запрос этому участнику.
|
||||
|
||||
Предположим, `app-a` переехал на другой адрес, сохранив свою идентичность. Имя сервиса и ID экземпляра остаются прежними, но клиенту нужно узнать новый адрес.
|
||||
|
||||
Теперь представьте, что экземпляр удалили и заменили новым. Что может произойти, если повторно использовать его ID, а в системе ещё остались старые ссылки или отложенные команды?
|
||||
|
||||
В [опыте с Consul](consul/readme.md) начнём с поиска адреса по имени сервиса и проверим, что происходит после остановки найденного экземпляра.
|
||||
|
||||
## Самостоятельный запуск опытов
|
||||
|
||||
Потребуются Docker и Docker Compose. В Windows Docker Desktop должен работать в режиме Linux containers. Отдельно устанавливать Python, `dig` или клиент BitTorrent для опытов не нужно.
|
||||
|
||||
Из корня репозитория перейдите в каталог семинара и подготовьте стенд:
|
||||
|
||||
~~~powershell
|
||||
cd materials/07-naming-lookup/seminar
|
||||
docker compose build tools
|
||||
docker compose pull consul
|
||||
docker compose up -d --wait
|
||||
docker compose ps
|
||||
~~~
|
||||
|
||||
**Все дальнейшие команды, включая команды в разделах, выполняются из этого каталога.** Для загрузки образов нужен интернет; основные опыты после подготовки работают локально.
|
||||
|
||||
Команды вида `docker compose run --rm -T tools …` запускают утилиту внутри учебной сети. Поэтому имена `consul`, `auth` и `resolver` в них доступны, даже если они неизвестны вашей ОС. Кавычки вокруг аргументов вида `"@auth"` сохраняйте: они нужны для PowerShell.
|
||||
|
||||
Интерфейс Consul можно открыть в браузере: [localhost:18500](http://localhost:18500). Сами опыты выполняются командами из соответствующих разделов.
|
||||
|
||||
После работы остановите стенд:
|
||||
|
||||
~~~powershell
|
||||
docker compose down
|
||||
~~~
|
||||
|
||||
Созданные в опыте с метаданными файлы и сохранённый клиентом адрес приложения остаются между запусками. Для полного сброса используйте `docker compose down -v`: команда удалит данные стенда, сохранив файлы репозитория. Если после пересоздания отдельных контейнеров перестали работать обращения между ними, выполните `docker compose down`, затем `docker compose up -d --wait`.
|
||||
|
||||
## Вопросы для самопроверки
|
||||
|
||||
1. Авторитетный DNS уже выдаёт новый адрес, а клиент использует старый. Где могли сохраниться старые сведения и когда они обновятся?
|
||||
2. Consul только что сообщил о здоровом экземпляре. Почему следующий HTTP-запрос всё равно может завершиться ошибкой?
|
||||
3. Трекер недоступен. Каким участникам это мешает продолжать загрузку в нашем опыте?
|
||||
4. После отказа узла Chord найден новый ответственный за ключ. Достаточно ли этого, чтобы получить значение?
|
||||
|
||||
Поиск предоставляет сведения для следующего обращения. Их актуальность нужно поддерживать, а доступность получателя и сохранность данных обеспечиваются отдельными механизмами.
|
||||
|
||||
[Дополнительное чтение](additional.md) — DNSSEC, GeoDNS/anycast, DHT BitTorrent и оптимизации обмена.
|
||||
Reference in New Issue
Block a user