Gitをオブジェクトストレージで動かすには、packfileを再発明する必要があった
You can run Git on object storage if you re-make packfiles
Tigris上でGitサーバーをオープンソース開発する著者が、packfileがローカルストレージ前提で設計されているためオブジェクトストレージでは性能が出ない問題に直面。インデックスからは圧縮後サイズが分からずHTTP Rangeリクエストも作れない。そこでカラムナストアを採用した独自のオブジェクトストレージネイティブなpackfile形式を発明し、本番規模のリポジトリで機能したと報告する。
ファイルシステムの読み取りはせいぜい10ナノ秒だが、ネットワークの往復は最低でも10ミリ秒かかる。現実の仕組み上、少なくとも100万倍遅いのだ。
HNでの議論
30- andrewaylett
`git update-server-info` が味方です。これが、クライアントが pack に対して range リクエストを行えるようにするために必要な補助ファイルを生成してくれます。
例えば: https://andrewaylett.github.io/rgitweb/ は、静的な git リポジトリに対して動作するリポジトリビューアです。pack をどこに保存しているかは気にせず、正しい range リクエストを行うためのデータがそこにあることだけを気にします。
- delf
まさにこれが GitSocial のやっていることです: https://gitsocial.org/。さらに、リポジトリ用の静的サイトを生成できるので、全部をバケットから配信できます。
- flowingfocus
最近、同じくオブジェクトストレージ上で git を扱う https://github.com/enroute-sh/enroute を見つけました。
既存の forge をプロキシするところから始めて、後からオブジェクトストレージのバックエンドを採用するという git-proxy のアイデアが面白いと思いました。
- 0bytes
3日間で4回目の投稿。これはマーケティングのスパムキャンペーンなのか?
- pierrebarre
あるいは https://github.com/Barre/ZeroFS を使うだけでもいいですよ。
git のワークロード、それも Linux サイズのツリーでもかなり素晴らしく動きます。