На сервере очень часто идёт работа с DigitalOcean Spaces, это аналог Amazon S3, совместимый API. Запускаются короткие процессы PHP, которые работают (PUT/GET/DELETE) с отдельными файлами в хранилище.
Получается, на каждый запуск выполняется новый DNS запрос, чтобы создать соединение с URL бакета? На миллионах запросов накопится заметная задержка.
Как кэшируются DNS запросы, или как их заставить кэшироваться? На уровне OS, PHP или в будущем Docker контейнера.
Серверы Centos и Debian, PHP 5.6, Laravel, AWS php-sdk. Собираюсь завернуть "рабочих" в Docker, но пока без него. Переход на object storage только планирую и пробую. Сейчас данные все ещё хранятся на локальной файловой системе и расшарены по NFS.
При DNS запросе происходит следующее:
1. Проверяется /etc/hosts
2. Проверяется локальный кеш
3. Выполняется DNS запрос на ваш DNS сервер (он все это повторяет, если что, делает запрос к своему DNS серверу и так до рута)
Соответственно самые простые варианты - или пропишите в запросах айпишники, или пропишите в /etc/hosts
Или обычный DNS кеш клиента сам разберется.
п.2 локальный кэш – для меня пока тёмный лес. Вроде пишут, что на Linux днс по умолчанию не кэшируется. Надо ставить какие-то сторонние примочки, которые, типа, с багами. Может, есть какой-то вариант in-memory запоминать на N минут пару "имя - ip", чтобы это было доступно всем PHP-процессам на машине?
ip сложно прописать, т.к. используется готовый SDK, а там требуется именно читаемое имя букета, и от него в т.ч. считается хэш для подписи запроса.
Поэтому нужна бы какая-то прослойка общей памяти между php с curl и дальнейшим путём ресолвинга. Кстати, где именно тот участок кода, который занимается ресолвингом? Где-то в недрах библиотеки curl?
Ресолвингом занимается драйвер TCP/IP системы, естественно он не в curl
на пару минут вполне закеширует сама ОС.
Ну и вариант /etc/hosts - очень надежный - разве не подходит?