Понять принцип CDN за секунду

задняя часть
Понять принцип CDN за секунду

Сбой в сети: зарубежный визит, картинка на странице пуста! !

на днях онлайноттенки серогоЯ получил работу и получил несколько бизнес-отчетов во второй половине дня国外Картинка не может отображаться при доступе пользователя, но внутренний доступ работает нормально, поэтому есть подозрение, что это вызвано проблемой внешней CDN.

Сначала объясните текущую ситуацию:

  1. Картинки сохраняются в Ali OSS
  2. Alibaba Cloud CDN используется в Китае
  3. Иностранное использование Akamai (глобальный поставщик CDN)

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

Принцип CDN

Полное название CDN — Content Delivery Network, то есть сеть распространения контента, также известная как сеть доставки контента. CDN — это интеллектуальная виртуальная сеть, построенная на базе существующей сети, опирающаяся на пограничные серверы, развернутые в разных местах,使用户就近获取所需内容, уменьшите перегрузку сети, улучшите скорость отклика пользователя на доступ и количество попаданий.

cdn.jpg

Как показано на рисунке выше, логика CDN в основном делится на два этапа:DNS解析а также请求边缘节点.

Используйте dig, чтобы увидеть результаты разрешения DNS:

$ dig juejin.cn

; <<>> DiG 9.10.6 <<>> juejin.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63296
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;juejin.cn.			IN	A

;; ANSWER SECTION:
juejin.cn.		412	IN	CNAME	juejin.cn.w.cdngslb.com.
juejin.cn.w.cdngslb.com. 60	IN	A	112.85.251.229
juejin.cn.w.cdngslb.com. 60	IN	A	112.85.251.227
juejin.cn.w.cdngslb.com. 60	IN	A	112.85.251.231
juejin.cn.w.cdngslb.com. 60	IN	A	112.85.251.224
juejin.cn.w.cdngslb.com. 60	IN	A	112.85.251.225
juejin.cn.w.cdngslb.com. 60	IN	A	112.85.251.230
juejin.cn.w.cdngslb.com. 60	IN	A	112.85.251.226
juejin.cn.w.cdngslb.com. 60	IN	A	112.85.251.228

;; Query time: 9 msec
;; SERVER: 192.168.3.1#53(192.168.3.1)
;; WHEN: Sat May 15 14:26:26 CST 2021
;; MSG SIZE  rcvd: 203

Его можно увидеть в списке РАЗДЕЛ ОТВЕТОВ

  1. juejin.cn указывает на запись cnamejuejin.cn.w.cdngslb.com
  2. juejin.cn.w.cdngslb.com7. Записи A возвращаются, и 7. IP-информация江苏 徐州 联通, мое местоположение上海,联通, видно, что возвращено就近节点. На самом деле CDN имеет множество пограничных узлов.

Используйте tcpdump для мониторинга пакетов DNS UDP.

  1. Введите в окнеsudo tcpdump -n -s 1500 udp and port 53
  2. введите в другом окнеping juejin.cn

Ниже перечислены отслеживаемые UDP-пакеты:

21:49:13.960212 IP 192.168.3.201.52647 > 192.168.3.1.53: 37581+ A? juejin.cn. (27)
21:49:13.975290 IP 192.168.3.1.53 > 192.168.3.201.52647: 37581 9/0/0 CNAME juejin.cn.w.cdngslb.com., A 112.85.251.229, A 112.85.251.230, A 112.85.251.226, A 112.85.251.228, A 112.85.251.224, A 112.85.251.231, A 112.85.251.225, A 112.85.251.227 (192)

Среди них 192.168.3.1 — это IP-адрес маршрутизатора. То есть машина запрашивает у маршрутизатора разрешение DNS, и, если маршрутизатор закэшировал его, он возвращает напрямую.

Воспроизведите проблему

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

Если проблема не может быть воспроизведена в среде компании, необходимо найти最接近Я протестировал его в среде заказчика, поэтому я попытался получить тестовую машину гонконгской оконной системы и подошел, чтобы увидеть ее удаленно, и действительно возникла проблема.

Картинка не отображается в интерфейсе, но直接在浏览器访问Это нормально, появляется при доступе к картинкам в режиме разработчика跨域错误.

Заголовок HTTP, возвращаемый обычно отображаемым запросом изображения, выглядит следующим образом:

Response Headers:
    accept-ranges: bytes
    access-control-allow-origin: *
    etag: "A31F477F3232DA431D3B77543C3EBF92"
    last-modified: Thu, 25 Jul 2019 01:37:03 GMT
    ...省略

1. access-control-allow-origin

Подстановочный знак * разрешен для использования любым веб-сайтом. Если вы хотите, чтобы к ресурсу обращались только по указанному доменному имени, просто измените * на доменное имя следующим образом:

access-control-allow-origin: `https://juejin.cn`

2. etag

etag — это атрибут в логике кэширования протокола HTTP. Цель CDN — уменьшить доступ к сети, потому что кэширование — необходимая функция.

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

Response Headers:
    accept-ranges: bytes
    etag: "A31F477F3232DA431D3B77543C3EBF92"
    last-modified: Thu, 25 Jul 2019 01:37:03 GMT
    ...省略

Без access-control-allow-origin страница не может быть загружена.

браузеркраевой узелзапросить изображениеНажми кеш, верни картинкуВ заголовке ответа нет атрибута CORSВозникает исключение CORS, и изображение не отображается.браузеркраевой узел

Решение очень простое, просто настройте и верните информацию о доступе-контроле-разрешении-происхождения в фоновом режиме CDN.