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

6.1 KiB
Raw Blame History

Семинар 7. Имена и поиск

Как по имени найти работающий сервис или нужные данные? Что произойдёт, если найденный адрес устарел? Разберём эти вопросы на примерах Consul, DNS, BitTorrent и Chord.

Материалы дополняют лекцию 7. Каждый раздел содержит объяснения, вопросы и опыты для самостоятельного повторения.

Темы

Тема Что исследуем
Consul Поиск экземпляра сервиса и обращение по сохранённому адресу
DNS Делегирование, кэширование и ошибки поиска
BitTorrent Поиск участников и проверка полученных данных
Chord Распределение ключей между узлами и поиск владельца ключа

Имя, идентификатор и адрес

У сервиса заказов orders работают два экземпляра: app-a и app-b. Каждый принимает запросы по своему адресу IP:порт.

Здесь важно различать три понятия:

  • Имя сервиса — что мы ищем: orders.
  • Идентификатор экземпляра — какой именно участник перед нами: app-a.
  • Адрес — куда отправить запрос этому участнику.

Предположим, app-a переехал на другой адрес, сохранив свою идентичность. Имя сервиса и ID экземпляра остаются прежними, но клиенту нужно узнать новый адрес.

Теперь представьте, что экземпляр удалили и заменили новым. Что может произойти, если повторно использовать его ID, а в системе ещё остались старые ссылки или отложенные команды?

В опыте с Consul начнём с поиска адреса по имени сервиса и проверим, что происходит после остановки найденного экземпляра.

Самостоятельный запуск опытов

Потребуются Docker и Docker Compose. В Windows Docker Desktop должен работать в режиме Linux containers. Отдельно устанавливать Python, dig или клиент BitTorrent для опытов не нужно.

Из корня репозитория перейдите в каталог семинара и подготовьте стенд:

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. Сами опыты выполняются командами из соответствующих разделов.

После работы остановите стенд:

docker compose down

Созданные в опыте с метаданными файлы и сохранённый клиентом адрес приложения остаются между запусками. Для полного сброса используйте docker compose down -v: команда удалит данные стенда, сохранив файлы репозитория. Если после пересоздания отдельных контейнеров перестали работать обращения между ними, выполните docker compose down, затем docker compose up -d --wait.

Вопросы для самопроверки

  1. Авторитетный DNS уже выдаёт новый адрес, а клиент использует старый. Где могли сохраниться старые сведения и когда они обновятся?
  2. Consul только что сообщил о здоровом экземпляре. Почему следующий HTTP-запрос всё равно может завершиться ошибкой?
  3. Трекер недоступен. Каким участникам это мешает продолжать загрузку в нашем опыте?
  4. После отказа узла Chord найден новый ответственный за ключ. Достаточно ли этого, чтобы получить значение?

Поиск предоставляет сведения для следующего обращения. Их актуальность нужно поддерживать, а доступность получателя и сохранность данных обеспечиваются отдельными механизмами.

Дополнительное чтение — DNSSEC, GeoDNS/anycast, DHT BitTorrent и оптимизации обмена.