Files
hse-2026/materials/07-naming-lookup/seminar/readme.md
T
2026-10-21 23:03:28 +03:00

70 lines
6.1 KiB
Markdown
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.
# Семинар 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 и оптимизации обмена.