4 ポイント 投稿者 GN⁺ 2023-07-28 | 2件のコメント | WhatsAppで共有
  • Amazon S3は2006年3月14日にリリースされたHTTP REST APIベースのオブジェクトストレージとして始まり、数百のマイクロサービスと複数の専任チームが連携して運用する大規模サービスへと成長した
  • S3の規模はコードだけでは説明できず、ハードディスク・ファームウェア・データセンター・運用組織・顧客ワークロードが継続的にかみ合いながら変化するシステムである
  • HDDは容量とコスト効率が大幅に向上した一方で、ランダムアクセス性能は機械的な限界に縛られており、S3は数百万台のディスクにおけるI/Oヒート管理とデータ配置を中核課題として扱う
  • レプリケーションとReed-Solomonベースのイレイジャーコーディングは耐久性を高めるだけでなく、過負荷のディスクを避けてリクエストを迂回させることで、性能とtail latencyの管理にも貢献する
  • S3の運用は、durability review、RustベースのShardStore、軽量な形式検証、チーム単位の**オーナーシップ(ownership)**によって、高速な開発と高い耐久性基準を両立するよう設計されている

S3を1つの巨大なサービスシステムとして見る

  • S3はオブジェクトストレージサービスであり、HTTP REST API、フロントエンドフリート、ネームスペースサービス、ハードディスクベースのストレージフリート、バックグラウンドジョブフリートで構成される
  • 大きな構成要素ごとにS3組織内の別領域やリーダー、複数のチームが存在し、さらに内側の構成要素も独自のフリートとチームを持つ形で運用されている
  • 現在のS3は数百のマイクロサービスで構成され、チーム間の相互作用はAPIレベルの契約に近い
  • モジュール性の設計を誤るとチーム間のやり取りも非効率で不自然になり、それを修正すること自体がソフトウェアとチームを一体で設計する過程に含まれる

ソフトウェアではなくサービス全体がシステムである

  • S3の顧客が購入しているのはパッケージ化されたソフトウェアではなくサービス体験であり、継続的で予測可能な品質を期待している
  • S3のシステム境界はコードだけにとどまらない
    • ディスクの近くで動作するコード
    • データセンターに新しいストレージラックを設置する技術者
    • 性能をチューニングする顧客アプリケーション
    • ハードウェア、財務、エンジニアリング組織
  • S3はソフトウェア、ハードウェア、人が共に成長し変化し続ける生きたシステムに近い
  • 単純なホワイトボード上のアーキテクチャ図は、各ボックス内部にある拡張されたサービスとその規模を隠してしまい、実際のシステムを過小評価させる

HDDの物理的限界がS3設計に与える影響

  • S3は数百万台のハードディスクを使う非常に大きなシステムであり、HDDの特性は設計上の中心的な制約の1つである
  • 1956年のIBM 350 disk storage unit以降、HDDは大きく進化してきた
    • 現在言及されている最大のHDDはWestern Digital Ultrastar DC HC670 26TBである
    • RAMAC以降、容量は720万倍に向上した
    • 物理サイズは5,000分の1になった
    • インフレ調整後のバイト単価は60億分の1まで低下した
  • しかしseek timeの改善は150倍にとどまり、ランダム読み書き性能は秒間約120操作の水準にとどまっている
  • この性能値はS3がリリースされた2006年時点でもほぼ同様で、それより10年前と比べても大差はなかった
  • HDDは機械装置であるため、アームの移動とプラッタの回転を待つ必要があり、容量の増加ペースほどランダムアクセス性能は向上しない
  • 業界ロードマップは今後10年以内に200TB HDDへ至る道筋を示しており、この規模では全データに均等なランダムアクセスを行うと仮定した場合、ディスクデータ2TBあたり毎秒1 I/Oしか許されない計算になる
  • S3はまだ200TBドライブを使っていないが、そのドライブとそこへ至るまでのあらゆる容量のドライブを使うことになると見込まれている

ヒート管理: データ配置と性能

  • S3におけるheatとは、ある時点で1台のディスクに入ってくるリクエスト数を意味する
  • ヒート管理を誤ると特定のディスクにリクエストが集中してhotspotが生じ、そのディスクに依存するリクエスト全体の性能が悪化する
  • hotspotはシステムを即座に停止させるよりも、まずリクエストキューを生み、顧客体験を悪化させる
    • 忙しいディスクを待つリクエストが遅延する
    • 遅延はメタデータ参照やイレイジャーコーディングなど依存するI/Oを通じてストレージスタック上位層へ増幅される
    • 一部リクエストで高遅延、すなわちstragglerが発生する
    • 個々のHDDのhotspotはtail latencyにつながり、放置すれば全体のリクエスト遅延にも影響する
  • S3ではデータの書き込み時点で将来いつどのようにアクセスされるか分からないため、書き込み時のデータ配置決定は難しい
  • 小規模ではI/O heatの予測と管理は非常に難しいが、S3の規模とマルチテナンシーでは別の性質が現れる
  • 個別ワークロードは多くの時間でアイドル状態にありつつ突然ピークを見せることが多いが、数百万のワークロードを合算すると全体需要は平坦で予測可能になる
  • 一定規模を超えると、単一の個別ワークロードが全体ピークに影響を与えることは難しい、あるいは不可能になる

レプリケーションとイレイジャーコーディングが耐久性と性能を同時に扱う

  • ストレージシステムの冗長化方式は、ハードウェア障害からデータを保護するだけでなく、ヒート分散にも役立つ
  • レプリケーションは複数のディスクにコピーを置くことでディスク障害に耐え、読み取りリクエストを複数コピーのどこからでも処理できるようにする
  • レプリケーションは容量面ではコストが高いが、読み取りI/Oの観点では効率的である
  • S3はすべてのデータにレプリケーションのオーバーヘッドを払わないよう、イレイジャーコーディングも使用している
  • 例としてはReed-Solomonのようなアルゴリズムを使う
    • オブジェクトをk個のidentity shardに分割する
    • m個のparity shardを追加生成する
    • 合計k+m個のshardのうちk個が利用可能ならオブジェクトを読み出せる
  • このアプローチは同数の障害に耐えつつ、容量オーバーヘッドを削減する

データ配置戦略と顧客ワークロードの分離

  • 冗長化方式は、必要な読み取り回数より多い断片にデータを分割し、それによって過負荷のディスクを避けてリクエストを送れるようにする
  • S3は新しいオブジェクトをディスクフリート全体へ広く配置し、ヒートをさらに下げる
  • 個々のオブジェクトは数十台のドライブにまたがって符号化され、異なるオブジェクトは異なるドライブ集合に配置される
  • 各バケット内のオブジェクトを多数のディスクへ分散すると、2つの利点がある
    • 顧客データが1台のディスク上で占める比率が極めて小さくなり、個別ワークロードが特定ディスクにhotspotを作りにくくなる
    • 個別ワークロードが、独立システムとして構築するには難しく高価なレベルのディスク規模までburstできる
  • ゲノム解析の顧客が数千のLambda関数で並列解析を実行するburstは、100万台を超える個別ディスクで処理できる
  • 現在のS3には、数百万台のドライブにまたがって分散したバケットを持つ顧客が数万人いる
  • S3の差別化要因は、ストレージシステム自体の規模だけでなく、顧客とワークロードが集約される規模がシステムの性質そのものを変え得る点にある

durability reviewとガードレール

  • Amazonは、エンジニアとチームが速く、かつ安全に失敗できるようにすることを重視している
  • S3は高い耐久性を持つストレージを提供しながら素早く動くために、durability reviewのプロセスを用いている
  • durability reviewは統計的な11 9sモデルに含まれるメカニズムではないが、S3の運用では重要なものとして扱われている
  • エンジニアリング変更が耐久性の状態に影響し得る場合、durability reviewを実施する
  • このプロセスはセキュリティ研究のthreat modelの考え方を借りている
    • 変更の要約を書く
    • 包括的な脅威リストを作る
    • 変更がそれらの脅威にどう耐えるかを整理する
  • durability reviewには2つの役割がある
    • 作成者とレビュアーに、守るべきリスクを批判的に考えさせる
    • リスクと対策を分離し、それぞれを別個に議論できるようにする
  • 対策を見つける際には、個別の詳細リスクごとに個別緩和策を付けるよりも、広いリスク群を防ぐ単純で強力なguardrailが好まれる

ShardStore、Rust、軽量な形式検証

  • S3は数年前、ストレージスタック最下層、すなわち個々のディスク上のデータを管理する部分をゼロから書き直すプロジェクトを開始した
  • 新しいストレージ層の名前はShardStoreである
  • ShardStoreを再構築する際に採用したガードレールの1つが軽量な形式検証だった
  • チームはバグをより早期に見つけるため、実装言語をRustへ移行した
    • 型安全性を活用した
    • 構造化された言語サポートを活用した
    • オンディスク構造にも型安全性を拡張するライブラリを作成した
  • 検証面では、ShardStoreロジックの単純化モデルをRustで書き、実際の本番ShardStore実装と同じリポジトリに置いた
  • このモデルは、実際のオンディスクストレージ層とHDDの複雑さを取り除いた実行可能な仕様として機能する
  • モデルのサイズは実システムの約1%だったが、120 IOPSのハードドライブ相手では非現実的なレベルのテストを可能にした
  • この取り組みはSOSP論文 Using lightweight formal methods to validate a key-value storage node in Amazon S3 としても公開されている
  • その後、ツールやproperty-based testingのような既存手法を用いて、実装の振る舞いが仕様と一致するかを検証した
  • 重要なのは、形式検証の研究手法を一般のエンジニアが保守できるコードと毎コミット適用されるツールへと産業化した点である
  • 検証のガードレールはチームに、より速く開発できるという自信を与え、新しいエンジニアが加わった後も維持されている

オーナーシップでチームと個人のスケーリング問題に対処する

  • Amazonにおけるownershipとは、特定の仕事やサービスが成功するまで責任を持つ単一の個人またはチームを明確にする概念である
  • S3で素早く動きながら高い品質基準を維持するには、チームがオーナーでなければならない
    • 他システムとのAPI契約を所有する
    • 耐久性、性能、可用性に責任を負う
    • 想定外のバグが可用性に影響したら午前3時でも修正する
    • バグ修正後には同じことが繰り返されないようシステムを改善する
  • ownershipには大きな責任とともに信頼も必要である
  • 個人やチームがサービスを所有するには、どう提供するかを自ら決められる余地が必要になる
  • 大学院の研究プロジェクト経験でも、学生がそれを自分のアイデアだと感じ、自ら発展させられるときのほうが深くコミットする
  • 非常にシニアなエンジニアの役割では、解決策を自ら配布するように提示するよりも、問題を明確に定義し、チームが解法を所有できるよう支援するほうが効果的である
  • 複数の解法があり得る問題では、適切な解法を選ばせることが、誰かに解決策のオーナーシップを与える方法になる

S3から得られる結論

  • S3の技術的スケールは、小規模システムを単に大きくしただけではなく、ワークロード・構造・運用方法そのものが根本的に異なる
  • 「システム」にはソフトウェアだけでなく、サービス運用、運用組織、そのサービスと共に動作する顧客コードまで含まれる
  • 組織もシステムの一部であるため、それ自体にスケーリング課題とイノベーションの機会がある
  • 個人の役割で成功するには、解決策よりも問題を明確に表現し、強いエンジニアリングチームが解決策を実際に所有できるよう支援する必要がある

2件のコメント

 
GN⁺ 2023-07-28
Hacker News のコメント
  • AWS にいた頃に覚えている会話の一つに、10億分の1の事象でも S3 の規模では毎日起こる、というものがあった
    普通ならあまりに確率が低く、心配する価値はないとして流すようなことでも、必ず考慮して対処しなければならない
    ShardStore、特に形式検証やプロパティベーステストのようなアプローチを見るとうれしくなる。前世代のサービス群は、有機的成長の危険をよく示すほどバグが多かったが、少なくとも障害が「安全に」起きるよう設計されていてデータ損失は防いでおり、S3 のエンジニアたちはその点にこだわっていた

    • その通り。S3 は平均で毎秒1億件以上のリクエストを処理しているので、10億分の1は10秒に1回起きる
      S3 だけの話でもない。例えば Prime Day 2022 では、DynamoDB が Amazon のワークロードだけで毎秒1億500万件以上に達した: https://aws.amazon.com/blogs/aws/amazon-prime-day-2022-aws-f...
      記事で Andy は軽量な形式手法やチームの Rust 採用にも触れているが、極めて低確率の事象でさえ日常的になる規模では、正確性のために何層ものツールとプロセスへ投資する必要がある
    • AWS のシニアアーキテクト James Hamilton が2017年に同じ現象について書いている。規模が大きくなると、まれな事象はまれではなくなる: https://news.ycombinator.com/item?id=14038044
    • 新人 SDE たちで構成されたチームで新サービスを立ち上げていた SDM だったが、コードレビューで Sev2 を引き起こし得る問題を指摘したところ、SDE が「せいぜい100万分の1の確率」だと反論した
      目標だった 500k TPS まで上げれば、それは1分あたり30回だと説明し、「その週にオンコールに入りたいのか?」と聞いた。そのスタックでは「最高水準を守る」という言葉が、たいていの組織とはまったく違う意味になる
    • 毎日どころか。私が携わった S3 Index 支援コンポーネントは、10億分の1の問題に1分に何度も遭遇し得た
      幸いアルゴリズムは良く、最近のハードウェアもはるかに安定している
    • 個人的には、そういう環境で働いてみたい。その10億分の1の穴が今でも気にかかる
      初の大規模な暗号学的ハッシュ衝突が起きたときの余波を運良く見物できるなら、ポップコーン片手に眺める準備ができている、少し斜に構えた声も頭の中にある
  • ゲノミクスの仕事をしていて、この10年でペタバイト級のデータストアを数多く扱ってきた
    AWS S3、GCP GCS、そしてコロケーション環境のハードウェア向けストレージシステム(Ceph、Gluster、名前は記憶から消してしまった HP のシステム)を使ってみて、こうしたシステムの運用にかかる努力を大いに尊敬するようになった
    多数の他の顧客とディスク I/Oを共有する利点も過小評価しがたい。記事でいう「heat」という用語は初めて聞いたが、単一システムではこれを緩和するのは本当に難しい。私たちのコロケーションクラスターでは、大規模ジョブ間で I/O を適切に管理するために、バッチシステムを修正して I/O を RAM や CPU のように割り当て可能なリソースとして扱う必要があった。S3 と GCP は非常に高価だが、性能がその価格に見合うことがある
    こういう記事こそ HN の最良の面だと思う

    • クラウドストレージのコストモデルもある程度説明がつく
      クラウドストレージの観点で最高の顧客は、データを非常に大量に保存するが、ほとんど読み出さない顧客だ。ハードディスクを借りるのに似ているが、各ディスクの一部だけを「コールド」データで埋めれば、同じディスクの I/O 容量全体をホットな処理に引き続き使える
      どのドライブにどのデータを置くかを非常に慎重にバランスさせれば、データの大半が使われていなくても、すべてのドライブを使い続けられる。だから保存は比較的安く、読み出しは比較的高い傾向にある
    • 残念ながら、ゲノミクス、さらに広く言えばバイオテックの多くのツールは、まだローカルファイルシステムに依存している
      S3 をサポートしていても、性能は出せるはずの水準よりはるかに遅いことが多い
    • この分野にいる者としては、ユーザーの EiB データをローカルのように感じられるようにしたい
      難しいし、読み取り可用性が99.95%程度しかない点は申し訳ない
    • 本当に HN の良い面だ。似たように良いと思う HN の記事リンクがあれば見てみたい
  • S3 が読み書きアクセスの委任のための単純な OAuth2 ベースのプロトコルを明示していたら、作れたものは多かったはず
    アプリがユーザーに代わってデータへアクセスできる HTTP ベースのプロトコルが世の中には必要。Google Drive がこれに最も近いが、提供者が1社だけで、ほかにも問題がある[0]。remoteStorage が定着しなかったのは残念。Solid がうまくいくことを願っているが、自分には複雑すぎるように感じる。この問題に対する自分のアプローチは https://gemdrive.io/ だが、今はセルフホスティングスタックの別の部分に集中しているため、ほぼ止まっている
    [0]: https://gdrivemusic.com/help

    • 完全に同意。人々のデータをそれぞれの S3 バケットに保存し、費用もそれぞれのアカウントに請求されるアプリを作れたら本当にいい
      今きちんとやろうとすると非常に難しい。「この特定のバケットだけにアクセスできる AWS 認証情報を発行する」という問題を解くために CLI アプリを丸ごと1つ作ったが、ユーザーにこれをインストールして実行するよう案内したくはない: https://s3-credentials.readthedocs.io/en/stable/
    • しかし、ほとんどのアプリは POSIX に近いデータアクセスを前提としている
      実際には、ユーザーの S3 バケットであるローカルディレクトリをマウントしてくれる、クライアント側の依存関係が最小限のライブラリがあるとよい
    • そういうシステムはすごいものになるはず。S3 の上に UI を載せた製品を売る企業同士を、本当に激しく競争させられる
      競合がいつでも 敵対的相互運用性で攻め込んでこられるから
      ユーザーデータ主権を作ろうとしていた、あるいは作っているプロジェクトがすべて妙な暗号資産方面に流れていったのは本当に残念
    • Cognito Identity Pool を使えばかなり近いところまで行ける。ユーザーのキーを、代わりに読み書きするリソースへのアクセス権を持つ IAM ロールに紐づいた AWS 認証情報と交換する方式で、かなり標準的なパターン
      https://docs.aws.amazon.com/cognito/latest/developerguide/co...
      追記: コメントを読み違えていたようだ。アプリがユーザーデータをクライアントに委任しようとしているのだと理解したが、実際にはユーザーが自分のデータをアプリに委任したいということらしい。別々のユースケース
    • これを https://puter.com で作っている
  • IBM RAMAC の仕様に 保存容量 3.75MBテラバイトあたり約9,200ドルとあるが、正しいはずがない
    コストに保存容量を掛けると、ドライブ価格が3セントになってしまう
    このサイト[1]では「平方インチあたり約2,000ビットを保存し、購入価格はメガバイトあたり約10,000ドル」だったとしている
    だからおそらく仕様はメガバイトあたり9,200ドルであるべきだろう。そうするとドライブ価格は34,500ドルになり、よりもっともらしい
    [1]: https://www.historyofinformation.com/detail.php?entryid=952

    • 小数点を打ち間違えたか、そういうことだと思う。自分もいつもそういうミスをする。いつも細かいディテールを間違える
    • https://en.m.wikipedia.org/wiki/IBM_305_RAMAC に、誤りの原因になりそうな内容がある
      3,000万ビットで、パリティを除いて6個のデータビットだけを使った数字だった。ただ、月額3,000ドルでリースされていたため、物理ドライブを一括で買うのと同じような固定費はなかった。その意味では S3 モデルともかなり似ている
  • ほとんどの人が気づいていないのは、魔法はシステム自体を処理することではなく、認可がコストなしであるかのように見せることにある
    分散システムにおける認可は非常に難しい。AWS の規模では、事実上魔法に近い。AWS には豊富な権限モデルがあり、権限変更はおそらく数兆件のリクエストを処理しながらも、インフラ全体にサブミリ秒の速度で伝播する
    この部分と、課金用のロギング/精算が、AWS について文章で読んでみたい2つの魔法のような要素
    S3 はほかのサービスとは異なる方法でアクセス制御を扱っており、権限がリソースに付いている。速度のためなのだと思う

    • S3 が IAM より数年早く登場したことを覚えておく必要がある
      バケット/キーのアクセス方式が特別である理由の1つは、IAM が登場した時点ですでにそのモデルが定着していたから
      その後も維持されたのは、既存モデルを取り除くと多くの顧客設定を壊しかねず、難しい作業だからである可能性が高い
  • 「会社で本当にシニアなエンジニアとして、当然ながら強い意見も技術的なアジェンダもある。だが、エンジニアたちとやり取りするときに、ただアイデアを配ろうとするだけでは、全員が成功するのは難しい。自分が所有していないアイデアに没入するのはずっと難しい。だからチームと働くときは、私の最高のアイデアが、私ではなく他の人たちから出たアイデアになるようにする、という戦略を取ってきた。解決策を売り込むよりも、問題を発展させ、それをとても上手に表現することに、意識的にはるかに多くの時間を使っている。問題の解き方はたいてい複数あり、正しい方法を選ぶということは、誰かにその解決策を所有させるということだ。」
    「自分の役割で本当に成功するには、解決策ではなく問題を明確に表現することに集中し、強いエンジニアリングチームがその解決策を本当に所有できるよう支援する方法を見つける必要があるのだと学んだ。」
    この部分が本当に良かった。ある程度 Ikea効果を思い起こさせる。誰かに自分のやっていることへ情熱を持ってもらうには、所有感を促す必要があり、良い方法はそれを「その人のアイデア」にすることだ。

    • 皮肉を言うつもりではないが、問題を説明すること自体も、人々を望む解決策の方向へ向かわせる道具だという点は認める必要がある。
      結局、人々はそもそも「問題」が何なのかをしばしば違うように見ている。
      幸い、すべての問題がそうというわけではない。だが、たとえばPythonの「パッケージング問題」の議論を見ると、実際には6つほどの異なる問題を人々が非常に違う形で説明していて、この現象がかなり悪い形で表れている。
    • その部分は私にも本当に目立って見えた。
      Andy Warfieldが読んでいるなら、おそらく読んでいると思うが、質問がある。問題を発展させるとき、考えられる解決策をスケッチすることにはどれほど価値があるのか? 問題を明確に表現すれば、いくつかの可能な解決策は自然に浮かぶはずだが、潜在的な所有者の思考を走り出させるために、それらの解決策を共有する価値はあるのか? それとも問題だけに集中し、解決空間は完全に開いたままにしておくほうがよいのか?
      さらに、このような非常にシニアな個人貢献者の運営の仕方について、もっと読むべき資料はあるだろうか?
    • 「問題だけ持ってくるな、解決策を持ってこい」という言葉をよく聞くし、誰もが一度は聞いたことがあるだろうが、本当にひどい言葉だ。
      私には「この平民め! お前の問題に構っている時間はない。問題だけ持ってこられても、お前の仕事で私が昇進できないではないか」と言っているように聞こえる。
      問題を解けるようになるには、まずその問題を理解し、存在を認められなければならない。
    • この見方には強く同意するが、すでに確立された専門性の序列があり、「その発言をする権威があるか」よりも「何を言っているか」に注目できる環境ではない、日常生活でも機能するテクニックとして一般化できるとよいと思う。
      事前に認められた権威や専門性がない状況、つまり日常の問題の大半が現れる文脈では、長く、詳しく、慎重に整理した問題説明で双方向の会話チャネルを一人で占有すると、口だけ出して仕事はしない人のように見えたり、他の人たちと一緒に解決策を探したくない人のように見えたりしやすい。
    • これはチームが賢く有能な人たちで構成されている場合にだけ機能する。
  • Amazonの社員たちがS3の内部動作を公に話せるようになったのを見るのはうれしい。
    Glacierがどう動いているのかも、もっと聞きたい。私の知る限り、基盤となる記憶媒体が何なのかは一度も公開されたことがなく、テープなのか、オフラインHDDなのか、カスタムHDDなのか、さまざまな憶測が出ていた。

    • 中核はBlu-rayディスクだという推測がある: https://storagemojo.com/2014/04/25/amazons-glacier-secret-bd...
      ただし、同意しない人たちもいる。依然として未知数だ。
    • Glacierは本当に「口をつぐむ」度合いが強い領域だ。
      AWSがそれに関するすべてと、その全体の道のりを話してくれたらよいのに。本当に興味深い対象だ。
    • 正直、これまで漏れていないのは非常に印象的だ。
      エンジニアが一人、酔ってぺらぺらしゃべるだけで済む話なのに。はるかに重大な分野では、マサチューセッツ州のある兵士がゲーマー仲間に格好よく見られようとしてDiscordに国家安全保障情報を流し、長い懲役刑を目前にしている。Glacierの詳細はもう出ていると思っていた。
  • 「ハードディスクのヘッドを、747が時速75マイルで芝生の上を飛んでいる姿として想像してみてほしい。飛行機の底と芝の先端の間の空気の隙間は紙2枚分の厚さだ。ディスクのビットを芝の葉で測ると、トラック幅は芝4.6枚分の幅で、ビット長は芝1枚分だ。飛行機が芝の上を飛びながら芝の葉を数えると、地球を2万5千周するごとに芝の葉を1枚だけ見逃す。」

    • アメリカ人は変な測定単位が好きだというジョークがあるが、これはあまりに奇怪なたとえなので賞を与えるべきレベルだ。
  • 負荷分散の部分を見て、S3 KeyMap 時代と、初期実装からそれへ移行しようとしていた頃を思い出した。
    学んだことは、最も熱いオブジェクト/パーティション/バケットを特定した後でも、単に移動して終わりにはできないということだった。すべてを整列させる必要があった。実際の解決策は、整列したうえでホストのパーティション負荷を四分位に分け、第2四分位のパーティションを最も負荷の低いホストへ移すことだった。
    最も熱いバケット、つまり第1四分位を移そうとすると、残ったメンバーにさらに負荷がかかり、失敗し続けた。
    もう一つの副作用として、エラー率が安定して約1%だった状態から、数日間エラーがない状態へ変わり、その結果、アラート基準をはるかに厳しく更新した。だいたい2009年頃のことだった。
    私もUMの学術的バックグラウンドがあったが、博士課程の代わりにS3に参加した。韻も踏んでいる。

  • S3はストレージ以上のものであり、標準だ。
    いくつかの場所でS3互換ストレージを、たいていは少し注意点つきで使えるのが良い。標準がどれほどオープンなのか、「S3 compatible」と言うためにAmazonへお金を払う必要があるのかは知らないが、かなり格好いい。
    例として、iDriveのE2、Digital Ocean Object Storage、Cloudflare R2、Vultr Object Storage、Backblaze B2がある。

    • Google GCSもあるし、Microsoftは使ったことがないが、「S3互換」オプションがなければ変だと思う。
      追記: 調べてみたところ、Azureには本当にないようだ :-/
 
GN⁺ 2023-07-28
Hacker Newsのコメント
  • エラー率が10^15リクエストあたり1回というのは、現実世界では実際によく起こることであり、S3では考慮すべき事項だ。

    • AWSで働いていたとき、S3の規模では10億分の1の事象が毎日発生しており、普段は心配する必要がないほど低確率の事象であっても考慮して対処しなければならないことを覚えている。
    • ShardStoreについて読めてうれしい。特に形式検証やプロパティベーステストなどが印象的だ。前世代のサービスはバグが多いことで有名だったが、少なくとも安全に失敗してデータ損失を防ぐことに執着していたS3エンジニアたちのおかげで、よく設計されていた。
  • ゲノミクス分野で働きながら、この10年間で多くのペタバイト級データストアを扱ってきた。

    • AWS S3、GCP GCS、Ceph、Gluster、HPのシステムなど、さまざまなストレージシステムを使ってきた経験から、こうしたシステムを運用するのに必要な努力を高く評価している。
    • 数多くの別の顧客とディスクIOPSを共有することの利点は非常に大きく、単一システムでこれを緩和するのはとても難しい。
    • コロケーションされたハードウェアクラスタでは、大規模ジョブでIOをRAMやCPUのような割り当て可能資源として扱うために、バッチシステムをカスタマイズする必要があった。
    • S3とGCPは高価だが、その性能にはそれだけの価値がある。
  • S3がOAuth2ベースのプロトコルを使って読み書きアクセスを委譲できたら、私たちが構築できるものは大きく広がる。

    • ユーザーの代わりにアプリがデータへアクセスできるHTTPベースのプロトコルが必要だ。
    • Google Driveがこれに最も近いが、単一プロバイダーの問題があり、remoteStorageが普及しなかったのは残念だ。
    • Solidには成功してほしいが、複雑に感じる。
    • この問題に対する自分なりの解決策はgemdrive.ioだが、今はセルフホストスタックの別の部分に集中している。
  • IBM RAMACハードドライブの1956年仕様についての説明。

    • ストレージ容量3.75 MB、コストがテラバイトあたり約$9,200という仕様は正確ではないかもしれない。
    • 別のサイトでは購入価格はメガバイトあたり約$10,000であり、仕様はメガバイトあたり$9,200であるべきだと示唆している。
  • 分散システムで認証を扱うのは非常に難しい。

    • AWS規模での認証は魔法のようなもので、AWSは豊富な権限モデルを持ち、認証変更がインフラ全体へサブミリ秒の速度で伝播する。
    • S3は他のサービスとは異なり、権限がリソース側にあるのは速度のためかもしれない。
  • 技術的なアジェンダを持つ非常に経験豊富なエンジニアとして、アイデアを出すことよりも、問題を掘り下げて明確に説明することにより多くの時間を費やしている。

    • 成功する役割を果たすには、問題を明確にし、解決策を支援することに集中しつつ、強力なエンジニアリングチームがその解決策をオーナーシップを持って進められるよう支援する方法を見つける。
  • Amazonの社員たちがS3の内部動作について公に話しているのを見るのはよいことだ。

    • Glacierがどう動いているのかもっと聞きたい。使われている記憶媒体についてはまだ公開されておらず、多くの憶測がある。
  • ハードドライブヘッドを747機にたとえて説明する部分。

    • 飛行機が地球を25,000周する間に、たった1回のミスで草の葉1本を外すような精密さだ。
  • S3 KeyMap時代にさかのぼると、最もホットなオブジェクト/パーティション/バケットを特定した後でも、単純に移動させるだけでは解決しないことを学んだ。

    • 実際の解決策は、ホストのパーティション負荷を四分位に分け、第2四分位のパーティションを最も負荷の低いホストへ移すことだった。
    • その結果、エラー率は安定的な約1%からエラーゼロの日が出る状態へと変わり、アラートをはるかに厳しく更新した。
  • S3は単なるストレージではなく、標準だ。

    • いくつかの場所でS3互換ストレージが提供されており、その標準がどれほどオープンなのか、また「S3互換」と言うためにAmazonへ支払いが必要なのかはわからないが、これはとてもクールなことだ。