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