6.1 KiB
Семинар 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.
Вопросы для самопроверки
- Авторитетный DNS уже выдаёт новый адрес, а клиент использует старый. Где могли сохраниться старые сведения и когда они обновятся?
- Consul только что сообщил о здоровом экземпляре. Почему следующий HTTP-запрос всё равно может завершиться ошибкой?
- Трекер недоступен. Каким участникам это мешает продолжать загрузку в нашем опыте?
- После отказа узла Chord найден новый ответственный за ключ. Достаточно ли этого, чтобы получить значение?
Поиск предоставляет сведения для следующего обращения. Их актуальность нужно поддерживать, а доступность получателя и сохранность данных обеспечиваются отдельными механизмами.
Дополнительное чтение — DNSSEC, GeoDNS/anycast, DHT BitTorrent и оптимизации обмена.