1719884624
2024-07-01 10:22:36
私は週末をこのニュースレターのコンテンツの調査、学習、作成に費やしています。
ほんの数秒でもお時間を割いて Clumio をチェックしていただければ、私にとって大変ありがたいです。
少なくとも、なぜ彼らが 7,500 万ドルを調達できたのかがわかります。Atlassian でさえ、Jira にこれを使用しています。
そうすることで私の仕事がサポートされます。それではショーを続けましょう。

Amazon S3 ストレージのコストが上昇し、データ損失によってビジネスに壊滅的な影響が出る可能性があるため、不要な支出を削減し、リスクを防ぐための総合的なアプローチが必要です。多数のネットワーク認定資格を持つ多国籍企業のコンサルタントである Lawrence Miller 氏は、S3 データ レイクのバックアップとコンプライアンスの管理を成功に導く道筋を示す簡潔な書籍を執筆しました。
昔は音楽を見つけるのがいかに大変だったか覚えていますか?
昔はレコードプレーヤーが使われていました。その後カセットプレーヤーが使われ、その後 MP3 プレーヤーが使われました。
人々はNapsterやLimeWireを通じて音楽を海賊版で入手しました。
外出先で音楽を聴くためには、別のデバイスを持ち歩く必要がありました。
そしてすべてが変わりました。
この革新的な製品は、今日の SoundCloud のような企業への道を開きました。
エンジニアとして、私たちは過去 20 年間の SoundCloud のアーキテクチャの進化を分析することで、多くの貴重な教訓を学ぶことができます。
スケーリングは贅沢な問題
エンジニアリング チームは最初から機会を最適化しました。
彼らは、何百万ものユーザーをサポートできるアーキテクチャを設計する代わりに、Ruby on Rails アプリケーション (Mothership と呼ばれる)、Apache Web サーバー、および MySQL データベースというシンプルなセットアップから始めました。
SoundCloudの初期アーキテクチャ
SoundCloud は 2008 年に開始されました。高可用性はありませんでした。実際、アーキテクチャは非同期でさえありませんでした。
トラックに新しいコメントが投稿された場合、すべてのフォロワーに通知されるまで通信がブロックされました。
その理由は何でしょうか?
答えは、機会を最適化することに戻ります。彼らは、チームが熟知しているシンプルな技術スタックを活用し、ユーザーに価値を提供することに重点を置きました。
その結果、SoundCloud は迅速に行動し、強力な製品市場適合性を備えた「粘着性のある」プラットフォームを構築することができました。
SoundCloud と統合するサードパーティ アプリケーションは、エンジニアリング チームの内部アプリケーションで使用されるものとまったく同じ API を使用します。
その後すぐに、Apacheは エンギンクス (増分変更)。
SoundCloud が Web サーバーを変更
Nginx は、より優れた接続プールを提供し、異なる環境間のルーティング構成を簡素化しました。
食料品店と郵便局
SoundCloud が成長するにつれて、トラフィックも増加しました。
そしてトラフィックが増加するにつれて、問題も大きくなりました。一部のワークロードは他のワークロードよりも大幅に時間がかかるようになったのです (数百ミリ秒)。
これは当時のNginxの問題でした。具体的には HTTP/1。
コンピュータネットワークには、 ヘッドオブライン(HoL)ブロッキングこれは、遅いリクエストが接続を詰まらせ、他のリクエストが処理を待機しているときに発生します。
食料品店でレジに並んで待っているところを想像してください。最初の客がカートに商品をいっぱい詰め込んでいるため、列の残りの客のレジが遅れます。
食料品店の HoL ブロッキングの例
ここで疑問が生じます。現在のアーキテクチャではどのようにしてリクエストを同時に処理できるのでしょうか?
SoundCloud のアーキテクチャが最初に開発されたとき (2008 年)、Rails での同時リクエスト処理はまだ未熟であると考えられていました。
エンジニアリング チームは、依存関係の監査にさらに時間を費やす代わりに、既存のモデルを維持することにしました。
-
アプリケーション サーバー プロセスごとに単一の同時実行性。
-
ホストごとに複数のプロセス。
ホストごとに複数のプロセスがあるにもかかわらず、SoundCloud ではすでにトラフィックが急増していました。長時間実行されるリクエストが複数あると、HoL ブロッキングの問題が簡単に再現される可能性があります。
たとえば、プロセスが 1 つではなく 5 つある場合、システムは理論上、平均 5 倍の遅いリクエストを処理できるようになります。
もう一度、郵便局にいる自分を想像してください。荷物の配達を手伝ってくれる職員を列に並んで待っています。人が多いほど、遅延の可能性が高くなります (複数の荷物を持っている人など)。

この HoL 問題はどのように解決できるでしょうか?
エンジニアリング チームは、あることに気づきました。彼らが求めていたのは、待ち行列がまったく発生しないシステム、または少なくとも待ち時間が最小限の待ち行列でした。
これを実現するには、各 Rails アプリケーション サーバーが一度に複数のリクエストを受信しないようにする必要がありました。
以下の変更が行われました。
-
サーバーがステートレスであることを確認しました。
-
追加した HAプロキシ インフラストラクチャに。
-
最大接続数を 1 にしてバックエンドを構成しました。
繰り返しますが、デザインの選択はシンプルです。
同期から非同期へ
これらの新しい変更により、HoL の問題は解決されたかもしれませんが、長時間実行されるリクエスト自体は依然として問題です。
一例として、ユーザー通知が挙げられます。
ユーザーが新しいトラックを SoundCloud にアップロードすると、そのユーザーのフォロワーに通知が届きます。フォロワーが少ないユーザーにとっては問題ないかもしれませんが、人気の高いユーザーの場合は大きな遅延が発生していました。
実際、 扇形に広がります 通知の所要時間は数十秒を超えることが頻繁にありました。これらの長時間実行されるリクエストは、代わりにジョブ (キュー) にする必要がありました。
このアーキテクチャではすべてがまだ同期されていたことを覚えていますか?
サウンドと画像用のストレージも急速に増加していたため、チームはAmazon S3に資産をオフロードすることにしました。ストレージは順調に拡張され、 トランスコーディング コンピューティングは Amazon EC2 に残りました。
「1 人のブローカーがすべてをキューに入れます。」
仕事は労働時間に基づいて主に 2 つのカテゴリに分類されます。
-
インタラクティブ – 作業時間は 250 ミリ秒未満
-
バッチ – その他すべて
スケールポイントの特定
この時点で、SoundCloud のユーザー数は数十万人に達していました。
アーキテクチャを継続的に進化させるためには、読み取りパスと書き込みパスを分離する必要があることをエンジニアリング チームは認識していました。
読み取りパスと書き込みパスを個別に最適化できます。
焦点を当てた領域の 1 つはウィジェットでした。
結局のところ、SoundCloud の最も大量のリクエストは、ウィジェットのデータを配信する単一のエンドポイントでした。
-
全ページ
-
DOMフラグメント
-
部分的にレンダリングされたテンプレート
-
読み取り専用APIレスポンス
これらのパフォーマンスの向上により、アプリケーション層の CPU の問題 (レンダリング エンジンとランタイム) が解決されました。
もう一つの重点領域は、ユーザーのアクティビティをパーソナライズして表示するダッシュボードでした。
ダッシュボードが更新を受け取ると、すべてのデバイスとサードパーティ アプリケーションを通じて適切なユーザーに通知されます。
読み取りパスは、時間範囲にわたってユーザーごとに順次アクセスできるように最適化する必要がありました。
1 つのイベントが数百万のユーザーのインデックス作成に影響を与える可能性があるランダム アクセスに対して、書き込みパスを最適化する必要がありました。
これらの最適化を考慮すると、 カサンドラ ストレージシステムとして選択され、 エラスティックサーチ 検索を強化するために選択されました。これらのソリューションは永続性と拡張性を提供しました。
最終的なモノリシック アーキテクチャは次のようになります。
SoundCloud のモノリシック アーキテクチャ
物語は続く
SoundCloud は、波形プレーヤー、トラックコメント、コラボレーションなどのユニークな機能を備え、「オーディオ版 YouTube」として知られていました。
エンジニアリング チームが初期の段階でアーキテクチャを決定したことで、会社は適応性と製品主導型になることができました。
SoundCloud の初期の成功から得られた重要な教訓は、次の 3 つの点に要約できます。
-
機会を最適化します。製品に焦点を当てます。
-
スケーリングは贅沢な問題です。時間の経過とともに成長するように設計します。
-
スケールポイントを特定します。有機的な成長のために統合ポイントを適切に定義します。
このシリーズの次のパートでは、SoundCloud のマイクロサービス アーキテクチャへの移行と、数億人のユーザーに拡張する際の課題について学びます。
ここまで読んでくださった方、ありがとうございます!楽しんでいただけたなら幸いです。
間違いがありましたらお知らせください。
リソース
#SoundCloud #のアーキテクチャの進化 #パート