成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CDN 原理入門,你學會了嗎?

開發(fā) 前端
CDN 的 基本原理為反向代理,反向代理(Reverse Proxy)方式是指以代理服務器來接受 Internet 上的連接請求,然后將請求轉發(fā)給內部網(wǎng)絡上的服務器, 并將從服務器上得到的結果返回給 Internet 上請求連接的客戶端,此時代理服務器對外就表現(xiàn)為一個節(jié)點服務器。通過部署更多的反向代理服務器,來實現(xiàn) 多節(jié)點 CDN 架構。

概述

CDN? 的全稱是 Content Delivery Network,即內容分發(fā)網(wǎng)絡,基本思路是: 盡可能避開互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié), 使內容傳輸?shù)酶旄€(wěn)定。

圖片

圖片來源: https://www.researchgate.net/figure/Content-Delivery-Network_fig1_221632001

CDN 技術原理

CDN? 的 基本原理為反向代理,反向代理(Reverse Proxy)方式是指以代理服務器來接受 Internet? 上的連接請求,然后將請求轉發(fā)給內部網(wǎng)絡上的服務器, 并將從服務器上得到的結果返回給 Internet? 上請求連接的客戶端,此時代理服務器對外就表現(xiàn)為一個節(jié)點服務器。通過部署更多的反向代理服務器,來實現(xiàn) 多節(jié)點 CDN 架構。

CDN? 主要使用了 負載均衡、動態(tài)路由? 和 內容壓縮 來提高其性能和可靠性:

? 分布式存儲: 采用可擴展的系統(tǒng)架構,利用多節(jié)點、多位置、多種方式存儲數(shù)據(jù)

? 負載均衡: 可以將流量均勻地分配到多個節(jié)點服務器上,從而避免某些服務器過度負載而導致響應時間延遲

? 動態(tài)路由: 可以根據(jù)網(wǎng)絡流量和服務器負載情況來選擇最優(yōu)的路徑和服務器來響應用戶請求

? 內容壓縮: 可以將內容文件壓縮到更小的體積,以減少網(wǎng)絡傳輸?shù)臅r間和成本

簡單地理解,CDN 就是客戶端和真實服務器之間的一層高效的緩存。

傳統(tǒng)網(wǎng)站訪問過程

在說明 CDN? 的技術優(yōu)勢之前,我們先來看看傳統(tǒng)網(wǎng)站的 HTTP 請求 訪問過程。大部分開發(fā)者應該都熟悉 HTTP 協(xié)議基礎流程,下面以請求一個圖片文件來舉例說明。

1.客戶端瀏覽器輸入網(wǎng)址,如 https://www.example.com/logo.png

2.瀏覽器請求 DNS? 服務器,查詢 https://www.example.com/logo.png? 對應的源服務器 IP 地址

3. DNS 服務器返回對應的 IP 地址

4. 瀏覽器向服務器發(fā)起 TCP 連接

5. 瀏覽器通過建立的 TCP? 連接發(fā)送 HTTP 請求圖片文件

6. 服務器向瀏覽器發(fā)送圖片文件

7. 瀏覽器將接收到的圖片文件渲染,完成本次請求

圖片

傳統(tǒng)網(wǎng)站訪問過程

如果我們要加入 CDN 的話,是加到哪個步驟呢?

根據(jù)上面描述的步驟不難發(fā)現(xiàn),從第 3 步開始,客戶端瀏覽器就和真實的服務器開始建立連接了,連接建立完成后,客戶端瀏覽器就直接從服務器獲取數(shù)據(jù), 這顯然不是我們需要的,因為這樣所有的客戶端都會直接連接服務器,會嚴重增加服務器的負載。

我們再來看第 2 步,瀏覽器在訪問真實的服務器之前,會先通過 DNS? 查詢域名對應源服務器的 IP? 地址,如果 DNS? 返回的是 CDN? 服務器的 IP? 地址, 那么后面的流程就會變?yōu)? 客戶端瀏覽器就直接從 CDN? 服務器獲取數(shù)據(jù),接下來的工作就會全部轉交給 CDN 了,如何完成這項工作呢?

將域名 www.example.com 的 CNAME 記錄解析到 CDN 服務商即可,CDN 服務商的 DNS 服務器也稱為權威服務器 (細節(jié)請看上篇文章: DNS 原理)。

接入 CDN 網(wǎng)站訪問過程

1. 客戶端瀏覽器輸入網(wǎng)址,如 https://www.example.com/logo.png

2. 瀏覽器請求 DNS? 服務器,查詢 https://www.example.com/logo.png? 對應的服務器 IP 地址

3. 由于域名的 CNAME? 記錄解析到了 CDN? 服務商,所以這里 DNS? 服務器會返回 CDN? 服務商提供的 CDN 節(jié)點服務器的地址

4. 瀏覽器向 CDN? 節(jié)點服務器發(fā)起 TCP 連接

5. 瀏覽器通過建立的 TCP? 連接發(fā)送 HTTP 請求圖片文件

6. CDN? 節(jié)點服務器使用內部專用 DNS? 解析出域名對應的源服務器 IP 地址

7. CDN 節(jié)點服務器向源服務器發(fā)起TCP連接

8. CDN? 節(jié)點服務器通過建立的 TCP? 連接發(fā)送 HTTP 請求圖片文件

9. CDN 服節(jié)點務器接收到圖片文件后,在本地保存一份,作為緩存使用,減少源服務器的回源流量

10. CDN 節(jié)點服務器向瀏覽器發(fā)送圖片文件

11. 瀏覽器將接收到的圖片文件渲染,完成本次請求

圖片

接入 CDN 網(wǎng)站訪問過程

中央節(jié)點如何選擇提供服務的 CDN 節(jié)點

一般會綜合考慮以下幾個方面:

  • ? 網(wǎng)絡成本
  • ? 流量分布
  • ? 源站負載
  • ? 地理位置

這里以 地理位置 舉例說明:

  1. 1. 用戶訪問 CDN? 服務商的權威 DNS 服務器
  2. 2. DNS? 服務器獲取用戶的 IP 地址
  3. 3. 根據(jù)用戶 IP 地址查詢用戶所在地
  4. 4. 返回離用戶最近的 CDN? 節(jié)點的 IP? 地址,比如用戶離北京近,就返回北京的 CDN? 節(jié)點的 IP 地址

圖片

按照地理位置訪問 CDN 節(jié)點過程

如何提高 CDN 緩存命中率

  • ? 在流量高峰來臨前,將熱門資源提前預熱到 CDN 節(jié)點
  • ? 合理配置文件緩存過期時間,如將靜態(tài)文件緩存過期時間設置為 1 個月甚至更久
  • ? 消除 URL 中文件名稱后面的參數(shù),如 https://www.example.com/logo.png? 和 https://www.example.com/logo.png?versinotallow=123 應該被視作同一個文件處理
  • ? 超大文件設置分片回源策略,如 視頻文件?, APP 安裝包 等

不適合使用 CDN 的場景

  • ? 請求客戶端和服務器物理距離很近,比如同機房、同機架的內網(wǎng)服務
  • ? 用戶分布在同一地理區(qū)域,如同城服務、本地門戶網(wǎng)站
  • ? 動態(tài)文件或接口,比如更新很頻繁的文件,使用 CDN 反而會增加響應耗時

數(shù)據(jù)如何回源

還是以剛才的 https://www.example.com/logo.png? 為例,CDN 節(jié)點服務器會先把這張圖片緩存起來,下次有相同的請求到達時,直接返回緩存的圖片,從而減少回源流量。

這里提到的 緩存? 是一個很復雜的功能,下面是阿里的 HTTP 緩存服務器,名字叫 Swift。

圖片

阿里 - CDN 節(jié)點

圖中是一個 CDN? 節(jié)點,用戶的請求從 LVS?(LVS是一個四層的負載均衡組件)的入口來,先由 LVS? 做一次 4 層的負載均衡, 然后轉到一臺 Tengine?(阿里在 Nginx? 的基礎上開發(fā)的服務器)上,Tengine? 做一致性哈希,選擇一臺 Swift 服務器去做緩存數(shù)據(jù)回源。

圖片

阿里 - Swift 架構

首先可以看到,Swift? 是一個多線程的程序,每個線程啟動一個 epoll? 來充分發(fā)揮多核的處理能力,并且盡量減少線程間的上下文切換,一個請求盡量在一個線程處理。除此之外,還能看到 內存緩存,SSD 緩存,SATA 緩存。Swift? 有熱點淘汰和提升機制,將熱文件放在內存里,次熱文件放在 SSD 上,最后才是 SATA 盤。叔度 (阿里 CDN 負責人) 指出,Tengine? 和 Swift? 是通過 Spdy 協(xié)議 來通信的,從而優(yōu)化 HTTP 的傳輸效率。

小結

CDN 的原理是: 基于分布式架構,通過將源服務器上的內容分發(fā)到多個節(jié)點服務器上,使用戶能夠從最近的服務器中獲取所需內容。這些節(jié)點服務器被稱為 邊緣服務器,它們通常位于不同的地理位置,并通過高速互聯(lián)網(wǎng)連接互相交換數(shù)據(jù)。用戶通過接入離他們最近的 邊緣服務器 來獲取所需的內容,從而降低了響應時間和延遲,提高了網(wǎng)站的訪問速度。

Reference

  • ? 如何自建低成本 CDN ?[1]
  • ? 阿里云 - DCDN[2]
  • ? 阿里云 - 提高CDN緩存命中率[3]
  • ? 騰訊云 - CDN[4]
  • ? 騰訊云 - SCDN[5]
  • ? 百度百科 - CDN[6]
  • ? CDN的原理以及其中的一些技術[7]

引用鏈接

[1]? 如何自建低成本 CDN ?: ??https://www.v2ex.com/t/877718??

[2]? 阿里云 - DCDN: ??https://www.aliyun.com/product/dcdn?spm=5176.7933777.J_3207526240.59.329a496e4a1hku??

[3]? 阿里云 - 提高CDN緩存命中率: ??https://help.aliyun.com/document_detail/123330.html??

[4]? 騰訊云 - CDN: ??https://cloud.tencent.com/product/cdn??

[5]? 騰訊云 - SCDN: ??https://cloud.tencent.com/product/scdn??

[6]? 百度百科 - CDN: ??https://baike.baidu.com/item/內容分發(fā)網(wǎng)絡/4034265??

[7]? CDN的原理以及其中的一些技術: https://colobu.com/2016/09/23/CDN-introduction/

責任編輯:武曉燕 來源: 洋芋編程
相關推薦

2023-03-30 08:26:31

DNSTCPUDP

2023-10-06 14:49:21

SentinelHystrixtimeout

2023-05-05 06:54:07

MySQL數(shù)據(jù)查詢

2022-11-02 07:37:07

WebAssembl瀏覽器服務器

2022-10-24 09:55:32

ESLintJavaScript

2024-03-12 08:37:32

asyncawaitJavaScript

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發(fā)編程

2023-04-14 09:04:07

測試TDBF單元測試

2024-03-01 08:13:45

Shell編程解釋器

2023-03-10 22:08:20

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2022-08-09 08:25:44

Stream創(chuàng)建流流計算

2024-03-06 08:28:16

設計模式Java

2022-06-16 07:50:35

數(shù)據(jù)結構鏈表

2022-12-06 07:53:33

MySQL索引B+樹

2023-01-31 08:02:18

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干天天操天天爽 | 美女视频久久 | 午夜视频网站 | 国产精品一区久久久 | 我要看黄色录像一级片 | 欧美一区二区三区在线 | 99久久99久久精品国产片果冰 | 四虎成人免费视频 | 美日韩一区二区 | 精区3d动漫一品二品精区 | 精品国产一区一区二区三亚瑟 | 欧美在线a | 日韩欧美国产成人一区二区 | 日韩av免费在线电影 | 欧美一级在线观看 | 色爱综合网 | 久久久久国产一区二区三区 | 精品综合久久久 | 日韩精品一二三 | 成年人网站免费 | 免费观看av网站 | 国产精品一区二区三区在线 | 成人免费看黄网站在线观看 | 国产成人综合一区二区三区 | 欧美久久久网站 | 日韩欧美精品在线 | 精品国产精品一区二区夜夜嗨 | 国产精品一区二区不卡 | 一区二区在线免费观看 | 韩国成人在线视频 | 日韩手机在线视频 | 亚洲一区 中文字幕 | 欧美九九九| 国产欧美精品一区二区色综合朱莉 | 日韩伦理一区二区 | 97热在线 | 一区二区三区高清在线观看 | 亚洲成人在线网 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 成人在线视频网址 | 国产精品美女久久久久aⅴ国产馆 |