tl;dr 版本:目前先用 PPPoE 發出來的 DNS resolver 設定,如果要自己設定的話,用 168.95.192.1
(主) + 168.95.1.1
(次) 然後關掉 round-robin 模式。
剛剛看 SmokePing 時發現的奇怪現象,同樣都是在 HiNet 下面的機器與 DNS resolver,但 CloudFront 會給出不同的機房提供服務。
講的更仔細的是,168.95.192.1
這組會給出 tpe 系列的機房,所以 latency 會比較低,但如果你用的是 168.95.1.1
的話,就會到處丟,包括日本的 nrt
系列,與香港的 hkg
系列。
這邊拿 d36cz9buwru1tt.cloudfront.net
這組網域觀察,這是 AWS 官網用的資源,從官網的 html 原始碼裡面可以看到。
以第四台網路上面的機器上面來看 (北都,我分配到的線路是走台灣智慧光網的線路),可以看到這邊 latency 會飄:「d36cz9buwru1tt.cloudfront.net (CloudFront)」。
看了一下 DNS 設定,第四台的 ISP 給了兩組 DNS resolver 設定給分享器,分別是 168.95.1.1
與 8.8.8.8
,然後分享器的 DNS resolver 是 round-robin,所以有時候會在台灣,有時候就連出國...
不過這組不能直接說是 AWS 的問題,因為 ISP 自己不架 DNS server,還跑去用 HiNet 的,有 sub-optimal 的問題也是很正常...
另外就是確認放在 HiNet 線路上的機器,這邊 ISP 透過 PPPoE 給了 168.95.192.1
與 168.95.1.1
,但因為是直接進到 /etc/resolv.conf
,所以只有在第一組爛掉的時候才會導去第二組 (預設值),所以看起來就很穩:「d36cz9buwru1tt.cloudfront.net (CloudFront)」。
實際分析從 HiNet 去 168.95.1.1
與 168.95.192.1
查時,也可以看到類似的情況,像是用這樣的 command 去看 168.95.1.1
的情況:
( repeat 1000 host d36cz9buwru1tt.cloudfront.net 168.95.1.1 ) | grep 'has address' | awk '{print $NF}' | awk -F. '{print $1 "." $2 "." $3}' | sort -u | awk '{print $1 "." 1}' | xargs -n1 host | awk '{print $NF}'
可以看到給出來的點都是日本 (nrt 與 kix):
server-13-225-178-1.nrt57.r.cloudfront.net. server-143-204-74-1.nrt12.r.cloudfront.net. server-18-65-171-1.nrt57.r.cloudfront.net. server-18-65-99-1.kix50.r.cloudfront.net. server-54-192-254-1.nrt51.r.cloudfront.net. server-54-230-123-1.kix56.r.cloudfront.net. server-99-84-55-1.nrt20.r.cloudfront.net.
如果改掃 168.95.192.1
的話:
( repeat 1000 host d36cz9buwru1tt.cloudfront.net 168.95.192.1 ) | grep 'has address' | awk '{print $NF}' | awk -F. '{print $1 "." $2 "." $3}' | sort -u | awk '{print $1 "." 1}' | xargs -n1 host | awk '{print $NF}'
就會完全在台灣機房:
server-13-35-163-1.tpe50.r.cloudfront.net. server-13-35-36-1.tpe51.r.cloudfront.net.
用先前提到的「用 Akamai 提供的 akahelp 分析 DNS Resolver 的資訊」看起來 ECS 相關資訊都被拔掉了,但不確定關聯性是怎麼樣,但可以確定的是如果你設到 168.95.1.1
的話會是 sub-optimal experience...
有人吃飯工具用 CloudFront 的 (像是公司的服務),而且手上有 bussiness support 或是 enterprise support 的,可以自己測過確認後去開 ticket 跟 AWS 看看怎麼弄,我這邊沒這些管道 XD