BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Jagadish Venkatraman氏、LinkedInのSamza 1.0開発を語る

Jagadish Venkatraman氏、LinkedInのSamza 1.0開発を語る

原文(投稿日:2019/09/14)へのリンク

先日のApacheCon North AmericaJagadish Venkatraman氏は、LinkedInが大規模なストリーム処理を行うためにApache Samza 1.0を開発した経緯について講演した。その中で氏は、兆単位のイベントと数ペタバイトのデータを抱えるLinkedInのユースケースについて説明し、ステートフル処理、高レベルAPI、柔軟な展開モデルといった、1.0リリースで追加された機能を強調した。

LinkedInのスタッフ・ソフトウェア・エンジニアでSamzaのコミッタ、PMCメンバでもあるVenkatraman氏の講演は、5兆以上のメッセージとして1.5ペタバイト以上を毎日取得するという、LinkedInのメッセージ処理に関する統計情報の紹介から始まった。メッセージはLinkedInのさまざまなバックエンドサービスとデータベースによって生成され、KafkaおよびBrooklinイベントバスシステムを介して転送される。LinkedInでは、Samzaを使用して、これらのストリームをほぼリアルタイムで処理し、DDOS検出、サイトヘルスモニタリング、検索インデックスの更新、アクティビティトラッキング、ビジネスメトリックなど、いくつかのシナリオを実行している。

Samzaは、基本的には分散ストリーム処理フレームワークである。ストリームは順序付けられた着信メッセージの連続で、個々のメッセージは、キーと値のペアとしてモデル化されている。Samzaでは、ストリームを複数のパーティションに分割することによって、水平方向のスケーリングを実現している。各パーティションには、個別のハードウェアで実行可能な専用のワーカプロセスがある。Samzaのアーキテクチャは、LinkedIn、Slack、Intuit、およびその他の巨大企業での使用を通じて、"大規模運用のために強化"されてきたものだ。

Samzaタスクは、ソースストリームからの着信メッセージを変換し、結果のメッセージをシンク(sink)ストリームに書き込む。最も単純な変換はステートレスである。すなわち、ひとつのメッセージからのデータのみが必要で、メモリを使用しない。例えば、メッセージを単に受け入れるか、拒否するだけのフィルタなどだ。しかし、例えば特定の時点において、サイトでアクティブな一意ユーザ数をカウントする場合のように、興味深い処理をするアプリケーションの多くは状態を必要とする。その他のステートフルなアプリケーションには、外部データベース内での結合や検索が必要な場合などがある。

LinkedInでは、ローカル状態とリモート状態のサポートを実装している。ローカル状態の場合、Samzaタスクは、ローカルディスク上にキーと値のストアをストアする。リモート状態と比較した場合、ローカル状態は、桁違いに優れたスループットとレイテンシを持つ。しかしながら、強い一貫性やトランザクションが必要な状況や、状態データをパーティション分割できず、各タスクにローカルにコピーするには大きすぎるような状況、あるいは複雑なビジネスロジックのために他のサービスを呼び出す必要がある状況においては、リモート状態が必要になる場合がある。

SamzaはプログラミングAPIが低レベルであったため、LinkedInにおいて幅広いユーザーベースによって採用される上での障壁となっていた。そのためチームは、一般的なユースケースのセットを特定し、それに基づいて高レベルのStreams APIを開発した。さらに、宣言的なSamza SQL APIと、Apache Beamパイプラインのサポートも実装している。Streams APIは、容易な再パーティション化、ストリーム-ストリームとストリーム-テーブルの結合、ウィンドウニング操作をサポートする。Beamを使用すれば、Javaに代えてPythonによるパイプラインの開発が可能になる。LinkedInでは、開発者がSamza SQLを使用して"数分でアプリケーションを開発し、デプロイ"可能なマネージドサービスを提供している。

Samzaは、"スタンドアロン"の組み込みモデルとマルチテナントのクラスタモデルの、2つのデプロイモデルをサポートしている。スタンドアロンモデルでのSamzaは、ユーザのカスタムアプリケーションのコードにライブラリとして含まれる。コードを複数のインスタンスで使用する場合は、Apache Zookeeperを使用して、ジョブの監視とスケジューリングを行う必要がある。クラスタモデルのSamzaはApache YARNと統合されて、自動スケーリング、エラー診断、および障害回復をサポートする。

LinkedInには、2011年の、後にApache Kafkaとなったコアメッセージバスフレームワークのリリースから始まる、ストリーム処理アーキテクチャのオープンソースコンポーネントに関する長い歴史がある。今年の初め、同社は、変更データキャプチャシステムのBrooklinをオープンソースとして公開した。Samza 1.0は2018年末にリリースされ、今年6月にはバージョン1.2がリリースされている。
 

この記事に星をつける

おすすめ度
スタイル

BT