12章協調的バッチ処理

11章では、複雑なバッチ処理を実現するためキュー同士を分割したり連結したりするいくつかのパターンを説明しました。いろいろな種類の出力を複製したり生成したりするのはバッチ処理の重要な部分ではありますが、複数の出力を元にして統合された出力を生成するのも同じくらい重要です。そのようなパターンの一般的な構成を図示したのが図12-1です。

並列処理分散と結果の統合バッチシステムの一般的な構成

図12-1 並列処理分散と結果の統合バッチシステムの一般的な構成

最も標準的と思われる統合の例が、MapReduceパターンのReduce部分です。Mapステップがワークキューのシャーディングの例であり、Reduceステップは多数の出力を最終的に1つの統合されたレスポンスに減らすという連携処理の例であるのは分かりやすいでしょう。しかし、バッチ処理にはさまざまな統合パターンがあります。この章ではそれらのパターンと、実用的なアプリケーションを取り上げます。

12.1 結合(またはバリア同期)

これまでの章では、処理を分割し、複数のノードに並列に分散するパターンを見てきました。中でも、シャーディングされたワークキューにおいて、別々のワークキューに並列に処理を分散する方法を取り上げました。しかし、ワークフロー内で次のステージに移行する前に、完全なデータセットが準備されている必要がある場合もあるでしょう。

このような場合、11章で取り上げた複数のキューをマージする方法を利用できます。しかし、マージは単に2つのワークキューの出力を1つのワークキューにまとめて別の処理を行うだけです。これで十分な時もある一方で、マージパターンでは処理の前に完全なデータセットが揃っているとは限りません。つまり、処理が行われる際の完全性に保証がなく、処理された全要素に対する統計情報を計算する機会もない可能性があるのです。 ...

Get 分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.