SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム
by Betsy Beyer, Chris Jones, Jennifer Petoff, Niall Richard Murphy, 澤田 武男, 関根 達夫, 細川 一茂, 矢吹 大輔, Sky株式会社 玉川 竜司
24章cronによる分散定期スケジューリング
執筆:Štěpán Davidovič†1
編集:Kavita Guliani
本章では、分散cronサービスのGoogleにおける実装について述べます。これは、演算ジョブの定期的なスケジューリングを必要とするGoogle内部のチームの大部分が利用しているものです。cronは一見基本的なものに見えますが、私たちはcronを扱ったこれまでの経験を通じて、このサービスの設計や実装について多くの教訓を学びました。ここでは分散cronが直面する問題と、その解決方法の選択肢の概要を述べます。
cronは広く使われているUnixのユーティリティであり、ユーザーが指定した時刻や間隔に従って、定期的に任意のジョブを起動するように設計されています。本章ではまず、cronの基本原理とその最も一般的な実装を分析し、cronのようなアプリケーションを大規模な分散環境で動作させることによって単一のマシンの障害に対する信頼性を向上させる方法を見ていきます。本章で説明するのは少数のマシン群にデプロイされる分散cronシステムですが、Borgのようなデータセンター用のスケジューリングシステムと組み合わせることで、データセンター全体にわたってcronジョブを起動できます[Ver15]。
24.1 cron
それでは、まず通常cronが単一のマシンでどのように使われているのかを見ていき、続いてデータセンター間にまたがるサービスとしてのcronの実行の様子に踏み込んでいきましょう。
24.1.1 イントロダクション
cronは、システムの管理者や一般的なユーザーが、実行するコマンドとその実行のタイミングを指定できるように設計されています。cronは、ガベージコレクションや定期的なデータ分析を含むさまざまな種類のジョブを実行します。最も一般的な時間指定のフォーマットは“crontab ...