История «Дорога к True® Full Stack — DNS» начинается с ввода URL-адреса.....

JavaScript полный стек
История «Дорога к True® Full Stack — DNS» начинается с ввода URL-адреса.....

предисловие

Давно не вел блог, мой первоначальный заголовок был«XXX от входного URL до загрузки страницы завершено»?

Но вдумайтесь, это контент, который много раз пережевывали другие, он не сложный, и слишком много мест, которые можно оптимизировать в процессе работы страницы.

Тогда просто копай себе яму, или оставайся на год в отделе разработки эксплуатации и сопровождения.

В этой статье постараемсяЭксплуатация и техническое обслуживание передних и задних концов или множества углов, описать оптимизацию всего сайта от разбора до работы.

1. Обзор процесса

1. Серия событий от ввода URL до парсинга в браузере

Многие интервью в крупных компаниях любят задавать такой вопрос на собеседовании, введите URL-адрес, чтобы увидеть, что случилось со страницей? , Сегодня подведем итоги. Вкратце, есть следующие процессы

  1. Введите URL в браузере
  2. DNS(DNS), найдите IP-сервер
  3. положить началоTCPсоединять,HTTPТрехстороннее рукопожатие, отправить запрос (Request)
  4. Сервер отвечает HTTP (ответ)
  5. Ресурсы загрузки браузераhtml css js imagesЖдать
  6. Код парсинга браузера (если на сервереgzipСжатие, браузер сначала распаковывает)
  7. Браузер отображает презентацию для пользователя

2. Объедините страницы действий, чтобы закрыть вкладки

Мы делаем что-то после рендеринга страницы:

  • кнопка повторный щелчок
  • действие прокрутки
  • Условный поиск запроса

Поместим вышеизложенное в==> 8. Работа интерфейса

ещеШаг 3. Инициируйте TCP-соединениеВставить перед:

  • Браузер разрешил оптимизацию одновременных запросов

Начнем с разрешения DNS...

2. Процесс разрешения DNS

кChromeБраузер в качестве примера:

  1. Chrome сначала будет искать в собственном кеше DNS браузера.

    (Время кеша относительно короткое, по умолчанию всего 1 минута, и он может вместить только 1000 кешей)

Примечание:chrome://net-internals/#dnsДля просмотраChromeсобственный кеш)

  1. Если соответствующая запись не найдена в собственном кеше браузера, тоChromeбудет искать собственный кэш DNS операционной системы
  • Windows- существуетWindowsПосмотреть вDNSПроцесс кэширования записей очень прост. Просто откройте командную строку и введите следующую команду:ipconfig /displaydns.

  • Mac- существуетMacСмотреть наDNSПроцесс кэширования записей немного отличается. Сначала вам нужно открыть консольное приложение, выбрать устройство на левой боковой панели и ввести:any:mdnsresponderВойдите в строку поиска. Далее откройте командную строку и введите следующую команду:

    sudo log config --mode "private_data:on"
    sudo killall -INFO mDNSResponder
    

    Затем вернитесь в консольное приложение и просмотрите список кешированных DNS-записей. Например, на скриншоте ниже показаноwx.qlogo.cnтайникCNAMEЗаписывать.

  1. Если он также не найден в кэше DNS системы, то попробуйте прочитатьhostsдокумент. Проверьте, есть ли IP-адрес, соответствующий доменному имени, если да, то разрешение выполнено успешно.

    • Примечание:WindowsродыC:\Windows\System32\drivers\etc,Macявляется/etc/hosts.
    • Это разрешение доменных имен на уровне операционной системы часто используется злоумышленниками, изменяющимиhostsСодержимое файла разрешает доменное имя в указанноеipадрес, что привело к так называемому захвату доменного имени, поэтомуhostsФайл установлен в режим только для чтения, чтобы предотвратить злонамеренное вмешательство.
  2. если вhostsЕсли соответствующая запись не найдена в файле, браузер инициируетDNSсистемный вызов для запроса локального сервера именlocalDNS(LDNS) для разрешения доменного имени.

  • пройти черезUDPсогласие наDNS53 для инициирования запроса, этот запрос является рекурсивным запросом, то есть операторомDNSСервер должен

должны предоставить намIPадрес)

  • Первый запрос будет сделан к локальному серверу имен (LDNS) для разрешения этого доменного имени. Этот сервис обычно находится в углу вашего города, не очень далеко, и его производительность очень хорошая. Обычно он кэширует результаты разрешения доменного имени, и около 80% разрешения доменного имени заканчивается здесь.
  • Если на локальном сервере разрешения доменных имен нет записи доменного имени, запустите рекурсивное + итеративное разрешение.

К этому моменту все разрешение DNS, которое может сделать браузер, было завершено, и следующие шаги связаны с сервером. Вы можете игнорировать то, что не хотите видеть.

  1. еслиlocalDNSПо-прежнему нет хитов, просто идите прямо кRoot ServerСервер доменных имен запрашивает разрешение.
  2. Корневой сервер имен возвращает запрошенный первичный сервер имен локальному серверу имен (gTLD Server)адрес.gTLDявляется международным сервером доменных имен верхнего уровня, таким как.com,.cn,.orgПодождите, в мире их всего 13 или около того.
  3. локальный сервер именlocalDNSодин шаг назадgTLDСервер отправляет запрос.
  4. принятие запросаgTLDСервер находит и возвращает соответствующее доменное имяName ServerАдрес сервера доменных имен, этоName ServerОбычно это сервер доменных имен, зарегистрированный пользователем, например, доменное имя, примененное пользователем в поставщике услуг доменных имен, затем задача разрешения доменного имени выполняется сервером поставщика доменных имен.
  5. Name ServerСервер доменных имен будет запрашивать сохраненную таблицу сопоставления между доменными именами и IP-адресами.При нормальных обстоятельствах целевой IP-адрес будет получен в соответствии с доменным именем, а значение TTL будет возвращено на сервер.DNS ServerСервер доменных имен.
  6. Возвращает доменное имяIPа такжеTTLстоимость,LDNSбудет кэшировать это доменное имя иIPСоответствующее отношение времени кэширования определяется выражениемTTLконтроль стоимости.
  7. Результат разрешения возвращается пользователю, и пользователь кэширует его в кэше локальной системы в соответствии со значением TTL, и процесс разрешения доменного имени завершается.

Примечание. В реальном процессе разрешения DNS может быть больше, чем эти 11 шагов (шаг 1 фактически может быть проигнорирован), напримерName ServerУровней может быть много, а может быть и одинGTMдля управления балансировкой нагрузки, что может повлиять на процесс разрешения доменного имени.

Если вы не хотите видеть текст, вы можете посмотреть на картинку:

3. Оптимизация DNS

Прежде всего, необходимо уточнить: в кэше DNS есть многоуровневые кэши, по удаленности от браузера они бывают следующих типов:

  • кеш браузера
  • системный кеш
  • кеш маршрутизатора
  • IPSкеш сервера
  • кеш корневого сервера имен
  • Кэш ДВУ
  • Кэш основного сервера имен.

Не слишком ли много времени нужно каждый раз анализировать так много шагов? Как я могу уменьшить шаги в этом процессе? тогда нужноDNSулучшен. А во фронтенд-оптимизации сDNSВ нем есть два момента:

  • уменьшатьDNSзапросов
  • DNSготовить

DNS Поскольку это основной протокол Интернета, оптимизаторы веб-сайтов легко упускают из виду его скорость анализа. Большинство новых браузеров теперь оптимизированы для разрешения DNS, типичногоDNSзатраты на синтаксический анализ20-120Миллисекунды, сокращение времени и времени разрешения DNS — хороший метод оптимизации. Я не буду говорить об этом здесь, сосредоточьтесь наDNSПредварительно разберите его.

3.1 Передняя часть:DNS prefetch

DNS prefetchЭто позволяет разрешению доменного имени с этим атрибутом в фоновом режиме без нажатия пользователем ссылки, а разрешение доменного имени и загрузка содержимого являются последовательными сетевыми операциями, поэтому этот метод может сократить время ожидания пользователя и улучшить взаимодействие с пользователем.

По умолчанию браузер предварительно выбирает доменное имя страницы и текущее доменное имя (доменное имя просматриваемой веб-страницы), которые не находятся в одном и том же домене, и кэширует результат, который является неявным.DNS Prefetch.

Если вы хотите предварительно выбрать поля, которые не отображаются на странице, используйте отображаемыйDNS Prefetch.

Его использование также очень просто, еслиlinkДобавьте к метке соответствующий атрибут:

/* 这是用来告知浏览器当前页面要做DNS预解析 */
<meta http-equiv="x-dns-prefetch-control" content="on" /> 
<link rel="dns-prefetch" href="//example.com">
  • Если вашей странице необходимо посетить много ресурсов с разными доменными именами, вы можете использовать эту технологию, чтобы ускорить получение ресурсов, чтобы получить лучший пользовательский опыт.
  • должны знать о том,DNSПодготовка хорошая, но злоупотреблять ею нельзя. Если предварительное разрешение DNS повторяется для нескольких страниц, количество запросов DNS будет увеличено.

В настоящее время многие крупные сайты также применили эту оптимизацию, например:

Таобао:

Цзиндон:

Если вам нужно отключить неявноеDNS Prefetch, вы можете использовать следующие теги:

<meta http-equiv="x-dns-prefetch-control" content="off">

3.2 Серверная часть и эксплуатация и техническое обслуживание:CDNа такжеHTTPDNS

На самом деле, есть три оптимизации, которые можно выполнить для серверной части, эксплуатации и обслуживания:

  • CDN
  • HTTPDNS
  • DNSБалансировка нагрузки

Однако для немного более крупных веб-сайтов от решения по балансировке нагрузки DNS в основном отказываются, и у него слишком много недостатков. Желающие могут поискать сами.

1. CDNа такжеDNSцикл

CDN, полное имяContent Delivery Network, сеть распространения контента. Его цель - пройти существующуюInternetдобавить новый слойCACHEУровень (кэш) публикует содержимое веб-сайта на узле, ближайшем к «краю» сети пользователя, чтобы пользователь мог получить требуемый контент поблизости и повысить скорость отклика пользователя, посещающего веб-сайт.

DNSЦикл: Когда властьDNSОбнаружено, что доменное имя сопоставляется с несколькимиIP, буду использоватьIPголосованиеIPравномерно распределить на несколькоDNSзапрос, чтобы добиться эффекта балансировки нагрузки.

зачем нужноCDN?

  • из-заDNSРаспределение равномерно распределено в течение цикла, и распределение не может быть оптимизировано в соответствии с нагрузкой на разные серверы, даже если один сервер выйдет из строя,DNSне может вовремя узнать ситуацию и поставить серверIPЕсли он будет выделен, это вызовет недоступность.
  • Поэтому в авторитетеDNSи сервер добавляетCDNслой необходим.
  • CDNОсновываясь на возможности планировать и распределять серверы, он может синхронизировать условия работы серверов, а затем своевременно корректировать политику планирования в зависимости от ситуации, тем самым значительно улучшая способность балансировки нагрузки.

CDNвыгода:

  • Решить проблему «первой мили» на стороне сервера.
  • Смягчить или даже устранить влияние узких мест во взаимосвязи между различными операторами.
  • Смягчить давление на экспортную пропускную способность провинций.
  • Снизить нагрузку на магистральную сеть.
  • Оптимизировано распространение горячего онлайн-контента.

CDNШаги доступа:

(1) не развертывается перед применением CDN:

Путь сетевого запроса:

  • Запрос: локальная сеть (локальная сеть) — «сеть оператора —» серверная комната приложений
  • Ответ: серверная комната приложений - "сеть оператора -" локальная сеть (локальная сеть)

Не рассматривая сложную сеть, от запроса к ответу нужно пройти3узлы,6шаги для завершения операции доступа пользователя.

(2) После развертывания приложения CDN:

сетевой путь:

  • Запрос: локальная сеть (локальная сеть) - "сеть оператора

  • Ответ: Операторская сеть — «Собственная сеть (LAN)

Не рассматривая сложную сеть, от запроса к ответу нужно пройти2узлы,2шаги для завершения операции доступа пользователя.

с развертыванием и безCDNпо сравнению с сервисом1узлы,4доступ шаг за шагом. Значительно улучшить скорость отклика системы.

Ниже приведены шаги в сочетании с конкретной работой и обслуживанием сети:

step1:用户向localDNS发起请求查询输入域名对应的IP地址(若有缓存直接返回,否则去rootDNS查询);

step2:localDNS迭代向rootDNS查询,逐级迭代,rootDNS=>顶级DNS=>权限DNS;

step3:获得权限DNS后,localDNS向权限DNS发起域名解析请求;

step4:权限DNS通常会将域名CNAME
【如果有有CNAME则解析CNAME对应的CDN服务,否则的话默认为普通请求,直接返回解析到的IP】到另一个域名,这个域名最终会被指向CDN网络中的智能DNS负载均衡系统;

step5:DNS负载均衡系统通过一些智能算法,将最合适的CDN节点IP地址返回给localDNS;

step6:localDNS将获得的IP地址返回给用户;

step7:用户得到节点的IP地址后,向该节点发起访问请求;

step8:CDN节点返回请求文件,如果该节点中请求的文件不存在,就会再回到源站获取这个文件,然后返回给用户。

2. HTTPDNS:решитьDNSУгон:

От: Также поговорим о HTTPS - HTTPDNS + HTTPS

По обычному впечатлению, много раз я чувствовал, что сайт законченHTTPSсоглашениеVANS. вообще-то нет:

  • несмотря на использованиеHTTPSтехнологии, часть гнусных операторов, до сих пор используютDNSТехнология загрязнения, заставляющая доменные имена указывать на их собственные серверы.
  • И эти серверы не развернутыSSLСлужба (даже если развернута, вызоветSSLСертификатCommon nameНесогласованный сигнал тревоги), что приводит к прямому отклонению порта 443.

Операторы действуют недобросовестно, чтобы заработать на рекламе и сэкономить межсетевой расчет. Их общий метод угона черезISPкоторый предоставилDNSПоддельные доменные имена. Есть ли способ решить этоDNSЧто насчет угона?

В отрасли есть набор решений для таких сценариев, а именноHTTPDNS:

HTTPDNSиспользоватьHTTPпротокол разрешения доменных имен, заменяющий существующийUDPпротокол DNS, запросы на разрешение доменного имени отправляются непосредственно наHTTPDNSсервера, тем самым минуя оператораLocal DNS, можно избежатьLocal DNSВ результате возникает проблема захвата доменного имени и неточного планирования.

HTTPDNSПринцип прост, т.DNSЭтот легко перехватываемый протокол преобразуется для использованияHTTPЗапрос протоколаDomain <-> IPкарта. быть правымIPПозже,ClientСобери самHTTPсоглашение, чтобы избежатьISPфальсифицированные данные.

Tencent первой предоставилаHttpDNSУ поставщика облачных услуг сервиса есть две статьи, опубликованные с разницей в четыре года, в которых подробно описаны технические детали:

Продолжение следует...

Следующий разговор о содержанииHTTP 优化Два генеральных направления ::

  • Уменьшите количество запросов.
  • Сократите время, затрачиваемое на один запрос.

Соответствующее содержание:

  • оптимизация одновременных запросов, разрешенных браузером,nginxКонвергенция расхождений в конфигурации/доменах.
  • Сжатие и слияние ресурсов,webpack/GzipСвязанный.
  • И другие интересные материалы...

Сборник статей автора Nuggets

Если вам нужно перепечатать его в публичный аккаунт, просто позвоните мне и добавьте его в белый список.

Нет публики