SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

イベントレポート

Spring Framework最新情報やAIへの取り組み、Netflix事例が披露された「SpringOne 2024」レポート

  • X ポスト
  • このエントリーをはてなブックマークに追加

Delving Into Spring Boot Netflix: Netflix's Application Framework

 本セッションでは、NetflixにおけるSpringBootフレームワークの活用について、依存関係の取り扱いやプロパティ管理、セキュリティ等の観点から紹介されました。

 Netflixではストリーミングやサブスクリプション、支払い処理などのすべてがSpring Bootベースのアプリケーションで運用されています。これらのアプリケーションではSpring Bootに独自のカスタマイズを加えた「Spring Boot Netflix(SBN)」というフレームワークを使用しているそうです。

Netflixのサービスのアーキテクチャ。緑色の四角形は全てSpring Bootベースのマイクロサービス
Netflixのサービスのアーキテクチャ。緑色の四角形は全てSpring Bootベースのマイクロサービス

 Netflixでは、ストリーミングやサブスクリプション、支払い処理、スタジオアプリケーション、エンタープライズアプリケーションなど、多様なユースケースに対応しており、これらすべてがSpring Bootベースのアプリケーションで運用されています。

 また、Netflixのプラットフォームには、Eureka、Fast Properties、Insight Logsなどさまざまなサービスと統合されているという説明がありました。このうちFast Propertiesについては、後述するプロパティ管理の説明でも取り上げられていました。

依存関係の取り扱い

 Netflixでは、Netflix固有の依存関係に特化した「Starters」を作成して利用していると説明がありました。例えば「spring-boot-netflix-starter-rest-server」を依存関係に追加すると、Springの依存関係に加えて可観測性、耐障害性、セキュリティなどの依存関係も同時に追加されます。

 また、Netflixがオープンソースとして提供している「Dependency Recommender」というプラグインを適用することで、このプラグインがビルドファイルをスキャン+欠けている依存関係の検出+推奨バージョン適用を自動で実施されます。

 ビルドフェーズにおけるアプリケーションの依存関係管理については、「SBN Gradleプラグイン」を使用していると説明されました。これは依存関係だけでなく、Dockerファイルの生成なども行うため、アプリケーションはNetflixのEC2インスタンスに直接デプロイすることも、Dockerを使用してデプロイすることも可能です。

プロパティ管理

 次にプロパティ管理について紹介されました。Netflixでは、本番/開発環境など、環境ごとにプロパティ値を分離するためにSpringのProfilesを利用しているとのことでした。Profileがアクティブ化されると、Springが正しいプロパティファイルをロードし、それらをまとめてくれるため、各Profileごとのセクションをロードすることで環境ごとのプロパティを読み込むことができます。

 この際、外部システムである「Fast Properties」を利用し、アプリケーションの起動時に外部サービスを呼び出し、特定のインスタンスに関連するすべてのプロパティを取得しているとの説明がありました。

 また、プロパティに含まれる機密情報の管理には、「Metatron」という証明書ベースの認証管理ツールを利用しているとのことでした。

セキュリティ

 NetflixはSpring Securityを活用し、「Secure By Default(デフォルトで安全)」を標準としています。デフォルトで安全とは、すべてのアプリケーションエンドポイントが認証されなければならない、という意味であると解説されました。

 また、アプリケーションリソースをセキュリティ領域(Security Realms)にグループ化し、下記のように各領域で異なる認証・認可ルールを適用していると述べられました。

  • アプリケーション領域:ほとんどのAPIエンドポイントを保護し、少なくとも一人の認証されたユーザを必要とする
  • 管理領域:主にアクチュエータエンドポイントなどの管理エンドポイントを含む
  • 匿名領域:無認証でアクセス可能な特定のエンドポイントを追加できる。デフォルトでは空。

 その他、柔軟なアクセスコントロールを可能にするためのリクエストチェーン内のアイデンティティの伝播についても説明がありました。

RequestChain
RequestChain

 これらのセキュリティ構成により、Netflixでは安全かつ柔軟なアクセスコントロールが実現されているという説明がありました。

サービス間通信

 次に、サービス間通信(IPC:Inter-Process Communication)について説明がありました。Netflixでは、REST、Web Client、GraphQL、gRPCといった技術が利用されており、本講演ではとくにIPCクライアント側のgRPCに焦点を当てて説明されました。

NetflixのIPC Clientの共通構成
NetflixのIPC Clientの共通構成

 NetflixのIPC Clientは上図に示す要素からなる共通的な構成となっており、これらの要素が組み合わさって、REST、Web Client、GraphQL、gRPCのいずれのIPCクライアントでも使用可能な基盤が構築されています。

 また、Netflixでは、gRPCサーバに対する呼び出しを簡単にするために、以下の機能を持つプリコンフィグされたgRPCクライアントを提供しています。

  • 可観測性:アクセスログやメトリクス、トレースなど
  • 耐障害性:リトライ、同時実行数制限、フォールバックなど

 ユーザーは@GrpcSpringClientアノテーションを使用し、名前を提供するだけで、この名前がプロパティと関連付けられ、すべてが自動的にロードおよび構成することができます。

 @GrpcSpringClientアノテーションの実装には、以下のSpringのビルディングブロックを使用していると説明がありました。

  • BeanDefinitionRegistryPostProcessor:プログラム的にBean定義を登録
  • ReflectionUtils、AnnotationUtils:クラスを検査しアノテーションを検出
  • FactoryBean:クライアント名とともにBeam定義を作成、特定のクライアントプロパティをロード

 以上、NetflixにおけるSpring Bootフレームワークの活用についての紹介でした。

おわりに

 以上、SpringOne 2024のハイライトでした。ライブストリーミングされたセッションは8月29日の時点でYouTubeに公開され、誰でも視聴できるようになっています。本稿で興味を持ったセッションがあれば動画もチェックしてみてください。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
イベントレポート連載記事一覧

もっと読む

この記事の著者

SpringOne 2024 参加チーム(SpringOne 2024 サンカチーム)

 【NTT ソフトウェアイノベーションセンタ】小泉 雄太、山口 央理、岩塚 卓弥 【NTTデータグループ】小峰 規行、高橋 寛恒、猪木 宏真 【NTTコムウェア】田村 祐揮

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20376 2024/11/01 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング