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

SourceHut will blacklist the Go module mirror

https://SourceHut.org/blog/2023-01-09-gomodulemirror/



SourceHut to shun Google's Go Module Mirror over greed • The Register

https://www.theregister.com/2023/01/10/googles_go_SourceHut/

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ものトラフィックが発生することもあるそうです。

SourceHutによると、Go Module Mirrorをブロックすることは最終手段であり、可能であれば避けたいと考えていたそうで、2021年2月24日にGoの開発チームに過剰トラフィックの問題を報告。SourceHutとGo開発チームは過剰なトラフィックを生成せずに要件を満たす方法について話し合ったものの、結局有効な解決策は出ず、Go Module Mirrorが過剰なトラフィックを発生させ続ける状態が続いたとのこと。

SourceHutのドリュー・デュヴォーCEOは、「2022年5月25日に一般に向けて解決策を募りましたが、結局有効な解決策は見つかりませんでした。そのため、今回Go Module Mirrorのブロックに踏み切りました。このトラフィックを負担するコストは、もはや私たちにとって許容できるものではなく、Goチームはこの問題を修正しようとはしていません。Goユーザーに不便をかけることは避けたいのですが、この機能のサポートを正当化し続けるには、負荷とコストが高すぎるのです」と述べています。

他のGoモジュールのメンテナーもGo Module Mirrorによってトラフィックが増大していると報告しています。開発者のベン・ラダー氏はGoのGitHubページのイシューで「Go Module Mirrorが私のサーバーから4GBのデータをダウンロードし、1つのGoモジュールを500回以上要求しました。私の知る限り、このGoモジュールを使っているのは世界で私1人です。キャッシュか、少なくともレート制限をお願いしたいです」と、サーバーログを提示しながら述べました。

proxy.golang.org: Unusual traffic to git hosting service from Go · Issue #44577 · golang/go · GitHub

https://github.com/golang/go/issues/44577#issuecomment-851079949



GoogleのGo プログラミング言語技術責任者であるラス・コックス氏は、ソーシャルニュースサイトのHackerNewsにおいて、Goチームがこの問題の対処に努めていると述べています。コックス氏によれば、Go 1.19では-reuseフラグを使用してモジュールをダウンロードする方法が用意されており、変更のないデータを回避することでリフレッシュ操作をより少ない帯域幅で行うことができるとのこと。proxy.golang.orgのサービスはまだこの修正をサポートしていないそうですが、2023年中に反映作業が行われる予定だそうです。

コックス氏は、デュヴォーCEOが「Googleがこの問題を修正しなければならない」と主張している点や、SourceHutが特別扱いを受けるべきではないと主張している点にも言及し、「SourceHutは、この問題が彼らにとって大きな問題だと主張していますが、一方でSourceHutにおいてのみGoモジュールのバックグラウンド更新を無効にするような特別扱いをしてほしくないとも言っています。より完全な修正を展開できるまでバックグラウンド更新を無効にするという提案は、SourceHutにとっても、現在の負荷に悩まされている他のすべての人にとっても、依然として有効です」と述べています。