/note/tech

Goモジュールのキャッシュプロキシ「Go module mirror」をSourceHutがブロックへ

コードホスティングサービスであるSourceHutが、Gitサーバーからコードを取得しキャッシュするプロキシの「Go Module Mirror」がネットワーク帯域を使いすぎているという理由で2023年2月24日からブロックする予定であることを発表しました。

Googleが開発したプログラミング言語のGoはGitリポジトリからモジュールを取得しますが、これらのリクエストはそれぞれ「proxy.golang.org」にあるキャッシュプロキシ「Go Module Mirror」を通してルーティングされます。Go module mirrorがキャッシュを取得することでGoモジュールのダウンロードは高速化しますが、このGo Module Mirrorが定期的にオリジンのソースリポジトリからGoパッケージを取得してアップデートをチェックすることで、膨大なトラフィックが発生してしまう問題が報告されています。

Go Module Mirrorによるトラフィックは、SourceHutのホスティングサーバーであるgit.sr.htからの送信ネットワークトラフィックの約70%を占めており、1つのモジュールでGoogleから1日に4GiBものトラフィックが発生することもあるそうです。

GoのimportでリポジトリのURLを指定すれば自動的にライブラリを取得してくる仕様、こういう事態が起きないか不安だったけど、ついに現実化したか。

PyPIやnpmみたいに中央集権的なパッケージリポジトリであれば、基本的にはその言語のユーザーだけの問題であり、その運用やリソースにコストを集中すれば済む。

一方、GoのようにリポジトリのURLを直接指定できてしまうと、リポジトリをホスティングしているサイト側にコストを押し付ける形になってしまう。

特に昨今は当たり前のようにCI/CDを行う関係上、開発時はpushの度にライブラリのダウンロードが行われるので、以前と比較にならないほど大量のリクエストが発生する。

GitHubのように巨大資本がバックについているサービスならともかく、そこまで規模の大きくないホスティングサービスでは負担が大きいだろう。

Goのimportの仕様はGo言語ユーザーやコミュニティ以外のリソースにフリーライドする傲慢で邪悪な仕組みだと思う。