При запросах в сети с использованием доменного имени, первым шагом является получение адреса сервера через разрешение доменных имён, после чего используется сетевой адрес для последующих запросов. Workflow уже реализовал полную систему разрешения и кэширования доменных имён, обычно пользователи не нуждаются в знании внутренних механизмов для плавной отправки сетевых задач.
Глобальная конфигурация в Workflow включает:
struct WFGlobalSettings
{
struct EndpointParams endpoint_params;
struct EndpointParams dns_server_params;
unsigned int dns_ttl_default;
unsigned int dns_ttl_min;
int dns_threads;
int poller_threads;
int handler_threads;
int compute_threads;
int fio_max_events;
const char *resolv_conf_path;
const char *hosts_path;
};
Конфигурционные параметры, связанные с разрешением доменных имён, включают:
/etc/resolv.conf
на обычных Linux-системах; если это значение равно NULL
, то используется многопоточное синхронное разрешение/etc/hosts
на обычных Linux-системах; если это значение равно NULL
, то использование таблицы разрешения отключеноWorkflow расширяет конфигурационный файл resolv.conf
, позволяя пользователям модифицировать конфигурацию для поддержки функции DNS over TLS(DoT)
. Обратите внимание, прямое изменение /etc/resolv.conf
может повлиять на другие процессы. Можно скопировать этот файл для изменения и установить новый путь к файлу в конфигурации resolv_conf_path
Workflow. Например, используя протокол dnss
для nameserver
, соединение будет установлено через SSL.
nameserver dnss://8.8.8.8/
nameserver dnss://[2001:4860:4860::8888]/
В некоторых сетевых условиях, хотя компьютер поддерживает IPv6, но из-за отсутствия публичного IPv6-адреса, он не может общаться с внешним миром (например, локальный IPv6-адрес начинается с fe80
). В этом случае можно установить endpoint_params.address_family
как AF_INET
, чтобы заставить разрешение доменных имён использовать только IPv4-адреса. Аналогично, файл resolv.conf
может указывать IPv4 и IPv6 адреса для nameserver
; в этом случае можно установить dns_server_params.address_family
как AF_INET
или AF_INET6
, чтобы заставить использовать только IPv4 или IPv6 адреса для доступа к DNS.
Глобальная конфигурация применяется ко всем доменным именам по умолчанию. Если требуется применить различные конфигурации к некоторым доменным именам, можно использовать функцию upstream. Используя upstream, можно отдельно указать параметры dns_ttl_default
и dns_ttl_min
, а также отдельно указать тип IP-адреса, используемый этим доменным именем, через endpoint_params.address_family
.
Сетевые задачи часто требуют разрешения доменных имён для получения IP-адреса, который нужно использовать для доступа. Стратегии разрешения доменных имён в Workflow следующие:
Unix Domain Socket
, если да, используется этот адрес без необходимости запуска разрешения доменных имёнhosts_path
, если есть, используется этот адресМногие сценарии, требующие множества сетевых запросов, используют компоненты кэширования доменных имён. Если каждый запрос запускал бы запрос к DNS, это могло бы перегрузить DNS. Workflow настроил время жизни кэша (dns_ttl_default и dns_ttl_min), чтобы обеспечить его своевременное обновление. Когда кэш доменного имени истёк, первый запрос, заметивший истечение времени, продлевает время жизни записи на 5 секунд и запускает запрос к DNS. За эти 5 секунд все запросы к этому доменному имени будут использовать кэшированный результат разрешения DNS, не требуя нового разрешения.Механизм асинхронного замка гарантирует, что запросы разрешения доменных имён для одного доменного имени не запускаются одновременно. Без защиты замками, множество запросов к одному доменному имени могут вызвать нагрузку на DNS, поскольку каждая задача будет запускать запрос к DNS, не найдя результат в кэше. Здесь "одно доменное имя" относится к тройке (host, port, family)
. Если для одного доменного имени указано использование только IPv4 и IPv6 через upstream, они будут защищены различными асинхронными замками, что позволит запустить запросы к DNS одновременно.
Workflow реализует полную систему задач DNS (см. dns_cli), если указан параметр resolv_conf_path
, запросы к DNS будут выполняться асинхронно. По умолчанию Workflow использует /etc/resolv.conf
как значение этого параметра на Unix-подобных системах. Асинхронное разрешение доменных имён не блокирует ни один поток и не занимает весь пул потоков, что позволяет более эффективно выполнять задачи разрешения доменных имён.
Если параметр resolv_conf_path
установлен как NULL
, синхронное разрешение доменных имён будет выполнено путём вызова функции getaddrinfo
. Этот метод использует отдельный пул потоков, количество потоков которого настраивается параметром dns_threads
. При необходимости выполнения большого количества запросов к DNS в короткий промежуток времени, синхронный подход может привести к значительному увеличению задержек.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )