BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ アーティクル Netflixで2億3800万人の会員を管理するということ

Netflixで2億3800万人の会員を管理するということ

キーポイント

  • Netflixの価格設定アーキテクチャに関する経験は、将来のニーズを予測し、コストのかかる移行を回避するためにテクノロジー選択を適応させることの重要性を浮き彫りにしている。

  • 会員履歴アーキテクチャにおけるNetflixの成功は、アーキテクチャの改善に大胆に投資することで大きな配当が得られることを示しており、計算されたリスクを取ることの重要性を強調している。

  • Netflixのサブスクリプション・エコシステムの進化は、技術的な課題の継続的な性質を強調し、スケーラビリティとフォールトトレランスの問題に対処するための継続的な革新と適応の必要性を強調している。

  • 技術の進歩にもかかわらず、スケーラビリティと一貫性は依然として根強く、トレードオフを管理しながらパフォーマンスを維持するために、EVCacheを使ったキャッシングのようなソリューションを模索する必要がある。

  • Netflixにおけるメンバーシップを管理する過程は、コンピュータサイエンスの原則の知恵を反映し、キャッシュの無効化などの永遠の課題と、継続的なシステム設計と運用改善の重要性を思い出させてくれる。

原文リンク(2024-03-25)

Netflixのシニア・ソフトウェア・エンジニアであるSurabhi Diwan氏は、QCon San Francisco 2023で"Managing 238M Memberships at Netflix"と題して講演した。同氏の講演では、Netflixのメンバーシップ・チームがどのように分散システムを構築しているのか、つまり、Netflixの増え続ける会員ベースのニーズに応えるためのアーキテクチャ・ベット、テクノロジーの選択、オペレーショナル・セマンティクスについて紹介された。

同氏はまず、Netflixがおそらく10年前に行った価格設定とテクノロジーの選択について説明した。そして、会員履歴のユースケース・スタディに移った。会員履歴は、会員登録に加えられたあらゆる変更のマイクロ秒単位での粒度に関する質問に答えるのに役立つ、2番目の永続的なストアである。

"Netflixの会員の方はほとんどいらっしゃるかと思います。もしそうでないなら、登録方法を具体的に紹介しましょう。最後に、質問に答えようと思います。サブスクリプション・エコシステムの進化とはどのようなものでしょうか?2億3800万人の加入者がいます。本当に、どのような道筋になるのでしょうか?さらに500万人の加入者を増やさなければならないとしたら、それはどのようなものになるのでしょうか?あと100人増やさなければならないとしたら、それはどのようなものでしょうか?"

メンバーシップ・エンジニアリング

メンバーシップ・エンジニアリングチームは、Netflixにおけるサインアップとストリーミングの重要な経路にフォーカスしている。メンバーシップ領域では、合計12もの様々なマイクロサービスを管理している。フォーナインの可用性を約束する同社の中層サービスは、中断のないユーザーアクセスを保証し、サインアッププロセスとストリーミング体験に直接影響を与える。

これらのサービスは、サブスクリプションや価格設定などの特定のユースケースに応じて、毎秒数百万リクエストまでスケールアップし、かなりのトラフィックを処理する。チームは、スケーラビリティと信頼性を達成するために既製の技術を活用し、技術的な決定について議論している。同チームは、グローバルな会員数の権威あるソースとして、Netflix内外のダウンストリーム分析を促進している。要するに、彼らは複雑な分散型の課題に正確にスケールで取り組んでいるのだ。

さらに、Netflixのプランと料金のカタログを監督している。ベーシック、スタンダード、プレミアムというシンプルさにもかかわらず、ユーザー体験において重要な役割を果たしている。サービス品質と会員の満足度を維持するため、プランの選択、請求国、支払い状況を正しく確認し、加入の詳細を正確に把握することを優先している。

メンバーシップのライフサイクル全体を管理し、サインアップ、パートナーチャネルとの統合、プラン変更、更新、アカウント閉鎖を促進する。また、アカウントの保留やキャンセルなど、支払いに関する問題への対応や、"メンバーシップ・ジャーニー"全体を通じて顧客データを適切に管理し、データ・プライバシー規制へのコンプライアンスを確保することも含まれる。

会員はどのようなときに我々のフローを利用するのか?

私のチームが行っていることを大まかに説明したつもりです。エンドユーザーであれば、今すぐNetflixのアプリにアクセスすれば気になると思います。こういうところもあります。

このフローは、Netflixメンバーシップ・エンジニアリングチームが管理するバックエンドプロセスのトリガーとなる、メンバーシップ開始ボタンや再生ボタンなど、重要なユーザーインタラクションをハイライトしている。フローチャートは、ユーザーがストリーミングを開始する前に、シームレスなメンバーシップ体験を保証する様々なサービスを示している。再生ボタンはメンバーシップ・システムと直接やりとりし、ユーザーのプランに基づいてサービス品質を決定する。このインタラクションは、毎日何十億ものストリームが開始されるため、最大のトラフィック量を発生させる。さらに、プランの変更や追加メンバーの管理など、アカウントページでのユーザーのアクションは、メンバーシップサービスによって促進される。Xfinityのアクティベーションに代表されるパートナーのサインアップも、チームのバックエンド・サービスによって組織化されている。

どのように実現するか?

「自分たちの為すべきことを確立する」これが"パズル"の本質だと思います。少し難しい話ですが。

このチームは、会員プランと価格カタログを管理し、プランをグローバルに保管・管理している。このサービスでは、地域ごとのプランに基づくルール管理も行っている。2つのCockroachDBデータベースを利用し、プランの価格設定とコードの利用(特にギフトのピークシーズン)をサポートしている。メンバー・プライシング・サービスは、プラン変更や追加メンバーの追加など、メンバーのアクションを容易にする。

パートナーとのやり取りは、バンドルアクティベーションとサインアップを処理している専用のマイクロサービスによって管理されている。例えば、サブスクリプションサインアップを目的とした、Apple社のApp Storeのようなプラットフォームとの統合が挙げられる。会員データはCassandraデータベースに保存され、2億3,800万人以上のアクティブな会員に対するサブスクリプション・サービスと履歴追跡をサポートしている。

チームの焦点は、現在の会員だけでなく、元会員や再入会の経験にも及んでいる。CasspactorやApache Sparkのようなビッグデータ処理用のツールを使って、スムーズな運用とデータベース間の整合性を確保しながら、メンバーステートやメンバーホールドのようなサービスでステートを管理している。メッセージングや分析などのこのデータは、サインアップや収益予測に関する洞察を導き出すために、下流の消費者にとって極めて重要である。

"サインアップ・ジャーニー"

Netflixを利用し始めると、毎秒数百万のリクエストを処理する会員制システムによって、プランの選択オプションが表示される。通貨、価格、利用可能なプランが地域によって異なるため、このページを正しくレンダリングすることは非常に重要である。チームはこれらのルールを管理しており、緑色のボックスはメンバーシップ・サービスの責任、白色のボックスは姉妹チームとの連携を表している。

プロセスは、グロース・エンジニアリング・アプリによるプランの選択から始まる。選択されたプランは、CockroachDBによってプラン価格の詳細がバックアップされた会員制プラン・価格サービスから照会される。確認後、「メンバーシップの開始」を押すと、メンバーシップの状態と履歴サービスのアクションがトリガーされ、プラン、価格帯、国などの関連情報で永続レコードが更新される。メンバーシップの有効化を知らせるイベントが発行され、ウェルカムメールのメッセージング・パイプラインがトリガーされ、分析のために下流のチームに通知される。簡単に説明したが、このプロセスは分散システム内で大規模に実行されるため、強固なエラー処理と照合が必要となる。

メンバーシップ・チームの技術フットプリント

Netflixは、1秒あたりの読み取り要求数(RPS)が多くなるように最適化された分散システムアーキテクチャで運用されている。12以上のマイクロサービスがあり、HTTPレイヤーでの通信にgRPCを利用している。主なコーディング言語はJavaで、アプリの書き換えにはKotlinに移行しており、これらはすべてSpring bootでまとめられている。Kafkaは、メッセージングやダウンストリーム分析など、メッセージの受け渡しや他のチームとのインターフェイスで重要な役割を果たしている。さらに、Netflixはビッグデータのオフライン照合作業にSparkとFlinkを採用している。

運用と監視に向けたテクノロジーの選択

Netflixのメンバーシップ・エンジニアリングチームは、コーディングと本番環境へのデプロイだけでなく、オンコールで責任を負い、重大な障害に迅速に対処する。彼らは軽量のトランザクションを採用し、Cassandraのようなツールを活用することで、オンラインシステムにおけるデータの一貫性を確保しようとしている。SparkとKafkaを利用した照合ジョブは、購読や会員履歴データベースなど、メンバーシップ内の記録システム間の整合性を保証する。この精度は外部システムにも及び、エコシステム全体で一貫した状態を維持する。データ・アラートと修復ジョブは、不一致を監視して修正し、すべてのレコードが最新の情報を反映する。

オブザーバビリティでは、広範なロギング、ダッシュボード、および分散トレースが、Netflixの広大なマイクロサービス環境で重要な、迅速なエラー検出と解決を促進する。プロダクションアラートは運用指標を追跡し、最適なサービスレベルを保証する。また、運用データは、異常検知と問題解決の自動化を強化するための機械学習モデルの原動力となり、Netflixの会員に中断のないストリーミング体験を提供している。

ユースケース・スタディ

ここまでで、Netflixメンバーシップ・エンジニアリングチームの位置づけ、アーキテクチャ、中核となる運用フローを確立した。潜在的な改善点と将来の準備について深く掘り下げることが重要だ。システム設計をチェスに例えると、チェスを極めるにはルールと戦略を理解し、過去の打ち手を分析して改善する必要がある。

このチームでは、主にNetflixの価格設定、テクノロジーの選択、システム変更のカタログ化の重要性に焦点を当て、過去のアーキテクチャ上の決定を検証した。さらに、初期の要件から継続的な進化と改善まで、スケーリングにおける同社の道のりを探る。

過去から学ぶ - Netflixの価格設定技術の選択

10年前、Netflixのプライシング・アーキテクチャはシンプルで、少数のプランと基本的な機能のみを管理していた。当初は、軽量のインメモリライブラリがこれらのニーズに効率的に対応していた。しかし、Netflixがグローバルに拡大し、提供するサービスが多様化するにつれて、このライブラリは範囲と複雑さを増し、複数のアプリケーションにわたって不可欠なものとなった。やがて、その規模と依存関係から運用上の課題が浮上し、より堅牢なアーキテクチャへの移行が必要となった。

新しいプラン価格アーキテクチャは、永続化にCockroachDBを利用し、トラフィック管理にgRPCサービスを利用している。設計が簡素化されたにもかかわらず、レガシー・ライブラリからの移行は、多数のエンジニアリング・チームとアプリケーションを巻き込んだ数年にわたる取り組みとなった。これは、コストのかかる問題を回避するために、将来を見据えてアーキテクチャを決定し、技術的負債に迅速に対処することの重要性を浮き彫りにしている。

新アーキテクチャが主要なソリューションである一方で、旧ライブラリの名残はまだ残っており、継続的な移行作業が必要である。このことは、長期的な影響を考慮し、技術移行時にレガシーシステムに積極的に対処する必要性を強調している。

会員履歴

会員履歴に関する調査は、その進化とNetflixのアーキテクチャーにおける極めて重要な役割について深く掘り下げている。当初、会員履歴はアプリケーションレベルのイベントを通じて追跡されていたが、きめ細かなデータへのニーズは根強かった。Netflixがグローバルに拡大するにつれ、会員データの複雑さと重要性が増し、より堅牢なソリューションが必要となった。

新アーキテクチャでは、変更データ取得パターンを採用し、運用データソースの直接的な差分変更を記録している。Cassandraデータベースに支えられたこの追記型ログシステムは、会員イベントの包括的な追跡を提供する。会員履歴ストリームを通じてイベント排出を一元化することで、Netflixは可観測性を向上させ、システム間でデータを照合する能力を得た。

このアーキテクチャの利点は多岐にわたる。詳細なデバッグ、イベントの再生、データ破損時のシームレスな照合が可能になる。さらに、会員履歴は顧客サービス分析を充実させ、下流の分析、メッセージング、会員データシステムに反映される。

このアーキテクチャを導入するのに数年を要したにもかかわらず、その効果は大きく、長期的な成功のためにアーキテクチャ革新に投資することの重要性が浮き彫りになった。

未来への準備 - 会員によるサブスクリプション・エコシステムの進化

最後の仕上げとして、サブスクリプション・エコシステムの進化を掘り下げてみよう。当初、我々は基本的なアーキテクチャを選択し、スケーラビリティのためにgRPCサービスやCassandraデータベースのような既製のコンポーネントに頼っていた。しかし、ユーザー数が増えるにつれ、データの照合やフォールトトレランスの確保に課題が生じた。

これらの問題に対処するため、バックアップを管理し、Hiveテーブルのデータを照合するSpark Casspactorを実装し、より良い監査と自己修復を可能にした。これにより、デバッグ性が向上し、単一障害点が取り除かれた一方で、スケーラビリティが懸念事項として残った。これを軽減するために、一貫性というトレードオフがあるものの、EVCacheを使ったキャッシュを検討している。

ここでの重要な教訓は、どんなシステムも無限に拡張できるわけではないということであり、システムの限界に先んじ、予期せぬ機能停止を避けるためには、イノベーションとアーキテクチャの進化に継続的に投資することが極めて重要だということだ。

結論

Netflixの価格決定から得られた重要な教訓は、将来を見据えてテクノロジーを選択し、必要に応じて積極的に適応や転換を図ることの重要性である。同様に、この会員履歴のケースは、大胆なアーキテクチャ投資の潜在的な見返りを強調している。重要な革新を追求する勇気を持つことが不可欠である。

会員加入の進化は、明確な終着点のない継続的なプロセスである。Diwan氏はこの継続的な挑戦を通して、コンピューターサイエンスの有名な言葉を想起する。

コンピュータ・サイエンスには難しいことが2つしかない。キャッシュの無効化とネーミングだ。

Diwan氏はキャッシングに集中する一方で、卓越性を追求する魅惑的な物語として『クイーンズ・ギャンビット(原題: "The Queen's Gambit")』を見ることを勧めている。

作者について

この記事に星をつける

おすすめ度
スタイル

BT