実現したいこと
Cloudfrontの仕組みを知りたいです
前提
こちらにAWSで利用されているIPアドレス一覧があります。
この一覧は公式情報です。
常に最新の情報が提供されています。
https://ip-ranges.amazonaws.com/ip-ranges.json
service
にCLOUDFRONT
が付いているIPアドレス範囲がCloudfrontで利用されているIPアドレス範囲です。
とても多くのIPアドレスがCloudfront用として利用されているようです。
質問
何故多くのIPアドレスが必要なのでしょうか?
調べたこと
IPアドレスを多く利用しない方法としてIP Anycastという方法があるようです。
BGP経路情報をもとに最適な経路で通信がされるので、経路的に最適なサーバーが自動で選択されてIPアドレスも多く必要ないのでいい事ばかりのような気がします。
(おそらく多くのIPアドレスを持つ事は維持コストもかかると思うので)
こちらのような方式を利用すればCloudfrontでも1つのIPアドレスだけで良いのではないでしょうか?
なぜCloudfrontは多くのIPアドレスが必要なのでしょうか?
また、IPアドレスはregion
がGLOBAL
になっており、全世界でIPアドレスがバラバラに利用されているようです。
IPアドレス範囲AはAWS東京
リージョンだけで利用されて、
IPアドレス範囲BはAWS大阪
リージョンだけで利用されて、
・・・
という事ではないようです。
GLOBALで利用されてIPアドレスが世界中のサーバーに振り分けられている状況でどのように最適なサーバーが選択されているのでしょうか?
仮にIPリストからラウンドロビンのようにランダムなサーバーが選ばれている場合、Cloudfrontのメリットである「高速伝送」「低遅延」と言えるでしょうか?日本から閲覧する場合は日本サーバーが近いので日本サーバー(東京または大阪)が選択されるべきという気がします。海外サーバーが選択されてしまうと遅くなるはずです。
それを回避するために何らかの処理をCloudfront内部的に行っているとすると多くのIPアドレスが必要なCloudfrontの今の仕組みはIP Anycastと比べるととても複雑な仕組みになっているように思います。
また、多くのIPアドレスがあるということは多くのサーバーがあるということなのでCloudfrontのキャッシュヒット率も相当低くなるのではないでしょうか。
CloudfrontのIPアドレスは追加され続けているようです。今後もIPアドレスが追加され続けると更にキャッシュヒット率が低くなり続けると思います。
IP AnycastであればBGP情報をもとに常に最適なサーバーが自動で選択されるのでサーバーが増えたとしてもキャッシュ率は高いのではないでしょうか。
日本から閲覧する場合はAWS東京かAWS大阪が選択されるはずです。
現在のCloudfrontのようにアクセスするたびにランダムにIPアドレスが変化する事はないはずです。
※以下コマンドの結果は変化し続けます。
数秒単位では変化しませんが応答されるIPアドレスは変わり続けます。
$ dig a xxxxx.cloudfront.net ;; ANSWER SECTION: xxxx.cloudfront.net. 60 IN A 13.225.165.4 xxxx.cloudfront.net. 60 IN A 13.225.165.29 xxxx.cloudfront.net. 60 IN A 13.225.165.115 xxxx.cloudfront.net. 60 IN A 13.225.165.52
仮に以下のような構成だとIPアドレスは少なくて良いですが(リージョンごとに1個で良いはず)
ロードバランサ自体がネットワーク帯域が多すぎて耐えられないのでダメという事でしょうか?
※インスタンス自体にはプライベートIPアドレスを付与して、グローバルIPアドレスは付与しない
参考
こちらの資料に目を通しましたがIPアドレスが多く必要な理由はわかりませんでした。
https://pages.awscloud.com/rs/112-TZM-766/images/AWS-29_AWS_Summit_Online_2020_NET02.pdf