8章Periodic Job(定期ジョブ)
Periodic Job(定期ジョブ)パターンは、時間の概念を取り入れ、一時的なイベントによって仕事の1単位の処理を開始できるようにすることで、Batch Jobパターンを拡張したものです。
8.1 問題
分散システムとマイクロサービスの世界では、アプリケーション間の通信には、HTTPと軽量メッセージングを使ったリアルタイムでイベント駆動な仕組みを使うという明らかな傾向が見られます。しかし、ソフトウェア開発の最新のトレンドとは関係なく、ジョブスケジューリングには長い歴史があり、今も有効な手段です。定期ジョブはシステムメンテナンスや管理タスクの自動化に広く使われています。また、特定のタスクを定期的に実行するビジネスアプリケーションにも使われています。代表的な例としては、ファイル転送を通じたビジネス間の連結、データベースポーリングを通じたアプリケーションの統合、ニュースレターEメールの送信、古いファイルの整理とアーカイブなどがあります。
システムメンテナンスの目的での定期ジョブを扱う伝統的な方法としては、専門のスケジューリングソフトウェアかcronを使ってきました。しかし、専門ソフトウェアは単純なユースケースには高価すぎ、単一のサーバ上で動くcronジョブはメンテナンスが難しい上に単一障害点になってしまいます。これが、スケジューリングと実行されるべきビジネスロジックの両方を扱える方法を開発者がよく実装してしまいがちな理由です。例えばJavaの世界では、一時的なタスクを実行するのにQuartz、Spring Batch、ScheduledThreadPoolExecutorクラスを使ったカスタム実装などの方法があります。しかしcronと同じくこの方法の主な難しい点は、スケジューリングの機能に回復力を持たせ可用性を高めるためリソース使用量が増えてしまうことです。またこの方法だと、時刻ベースのスケジューラはアプリケーションの一部なので、このスケジューラの可用性を高めるにはアプリケーション全体の可用性を高める必要があります。これを実現するには通常、複数のアプリケーションインスタンスを動かしつつ、ある時点ではそのうちの1つのインスタンスだけがアクティブであるというジョブをスケジュールする仕組みを使うことになり、リーダ選出などの分散システムにおける課題が関連してきます。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access