Files
hse-2026/materials/07-naming-lookup/seminar/readme.md
T

70 lines
6.1 KiB
Markdown
Raw Normal View History

2026-10-21 23:03:28 +03:00
# Семинар 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 и оптимизации обмена.