1. 程式人生 > 其它 >我是如何讓我網站的素材/資源載入的如此之快的

我是如何讓我網站的素材/資源載入的如此之快的

如想獲得最佳閱讀體驗,請訪問:https://blog.projectoms.com/pages/140.html

*本文是本人第一次寫技術文章,如有不足請指正,謝謝!

讓DNS很快

眾所周知,想讓人成功就要從娃娃抓起。所以想讓一個素材系統變得超快則要從DNS解析做起。

可以看到,我的DNS表面上看起來是自建的,實際上我採用了一種自欺欺人的重路由的方法加快了DNS速度。

(裡面還有阿里雲DNS記錄的原因和影響我們下文會說)

有人就要問了,馬老師啊這個發生甚麼事了阿里雲VIP預設DNS提供的路由不香嗎?幹嘛還要費盡心思自路由呢?

這你就不知道了,在我測試過後,發現阿里雲個人版DNS之所以比貴4倍的企業版速度慢,是因為企業版DNS有地域解析,會根據國內外返回不同節點(阿里雲雖然有Anycast的節點,但其他都不是),這樣如果國內使用者輪詢到一個美國節點肯定速度將大打折扣。

如圖,國內查詢會一股腦把所有地址丟出來,包括海外節點,所以速度令人擔憂

而企業版在國內查詢時返回的均為國內節點,所以速度表面上看起來比個人版快了一大截

可以看到,企業版在香港機器上返回的均為海外節點,所以看到這裡你也知道自路由的重要性了吧

下面我來說一下我是如何實現自路由的。

首先,我們要得到所有節點IP,其實直接Dig就行,但我為了保險起見,還是全球PING了一下,確認和Dig一次的節點數是一致的。

接下來,就是利用阿里雲自帶的分割槽解析功能,將IP分為預設和海外兩組,當然IPv6只有國內所以預設就好。

這裡要注意,阿里雲有一個IP是Anycast的,且國內外都有節點,所以我們把這個IP(140.205.1.1)既加入預設,又加入國外即可.

這裡還有一個問題,我們要用域名projectoms.com解析projectoms.com,為了避免遞迴,需要為NS伺服器新增膠水記錄(Glue Records),相關原理自行谷歌。

膠水記錄需到域名註冊商處新增,我的是阿里雲。

阿里雲管膠水記錄叫自定義DNS Host,按照說明新增IP即可,完成後我們需等待24-48小時讓這些資訊快取到.com DNS伺服器中,實際上我等了約10小時就可以了。

接下來就是把DNS改成我們自己的DNS了,大功告成!

這裡注意,雖然Dig查詢到的NS記錄仍有阿里雲的,不過一般DNS解析器都以註冊局列出的DNS伺服器為準,所以我們的自路由是有效的。

讓建立連線很快

眾所周知,建立HTTPS需要TCP握個手然後SSL再握個手,其中由於RSA長度問題SSL握手往往要花費數百毫秒,為了減少使用者白屏等待時間,ECC橢圓曲線演算法被採用了。

目前因為這個演算法太新了,舊裝置(XP)不支援,所以相容性較差,但是我網站訪問者一般都使用Win 10,Chrome. 幾乎沒有用IE訪問的。所以我個人覺得ECC裸奔其實是沒問題的(由於Android 4以下不支援,所以相容性還是比較差的),至少我的使用者中沒有XP使用者,且CDN多不支援雙證書。所以2021年4月起你可以看見我的網站(國內)僅有ECC證書。

目前RSA證書沒到期先勉強用著,等4月我們會換成ECC證書。

2021 年 3 月 21 日,正式啟用全新 ECC 證書。

RSA
ECC

如圖,握手時間在Server和Client配置相同時速度有明顯提升。

讓CDN回源很快

眾所周知,由於中國的特殊網路環境,海外內容都非常的慢,而且由於我們將素材資源儲存在GitHub上,而GitHub僅在美國本土有資料中心,所以讓CDN回源很快非常重要。

(注意!本方法已暫時失效,且短期不會恢復!)最開始,我們採用的是Vercel。Vercel是一個無伺服器函式平臺,但是同時Vercel也提供基於AGA的強大內容分發網路,Amazon的中國網路質量也不用我多說,大家也是能體驗出來的。所以我們採用了Vercel作為源站。

Vercel管理層有中國人,所以理論上對大陸相對來說比較友好,但是近期由於知道和白嫖Vercel的人越來越多,導致了AGA網路抽風。最近Vercel決定將大陸IP統一路由到美國的節點,導致速度直線下降,根本無法忍受(海外速度均正常),我們便決定採用新的方法處理大陸CDN回源。

現在我們使用的解決方案是:一開始,我們想利用在北京的一臺阿里雲VM將GitHub的內容存到本地,但由於阿里雲到海外是電信的163民用網,速度也沒有太大好轉,最終我們採用在香港的一臺GCP從GitHub上下載內容,再利用同步技術從北京的阿里雲機子主動拉取香港GCP上從GitHub下載的資源素材檔案,同步速度可以接受。

由於CDN回源設定的機子在國內,所以現在回源速度直接起飛。在我家的本地頻寬已經可以跑滿北京阿里雲伺服器帶寬了(捂臉笑...)

最後一公里:讓CDN邊緣節點很快

國內

這個...其實沒有什麼好說的,鵝廠的CDN邊緣節點質量還是不錯的。並且在和鵝廠工作人員一番 切 磋 之後,我有了IPV6節點的使用權(雖然現在所有人都有了嗚嗚嗚)目前的唯一比較遺憾的是我的加速型別不支援TLS 1.3,這個相信鵝廠很快就能解決。

海外

Vercel把AGA調的非常好,這個其實也沒有什麼遺憾、缺點之類的,要非要找個缺點出來,那就是AGA不支援IPV6,這個Amazon估計會....解決吧。

最 終 成 果

PING
速度測試
本地頻寬實測:未擊中快取
本地頻寬實測:擊中快取

如果你想用這個資源站,歡迎與我聯絡:[email protected]!如果覺得我的文章有用,歡迎點贊轉發讚賞!您的支援就是我創作的動力,非常感謝!!!