blog

GOのシンプルな分散タスクスケジューラー。

時が経つのは早いもので、また数ヶ月が経ってしまいました。 この問題は些細なものでした。...

Aug 15, 2020 · 2 min. read
シェア

x00

時間はあっという間に過ぎ去り、また月日が流れます。

大した問題じゃないですよ。

x01

雑魚先生に倣って、etcdベースのタスクスケジューリングシステムcrontab [3]を実装しました。

今回はなぜかredisです。

アーキテクチャ

マスターとワーカーに分割

  • master

1、タスクの追加、削除、チェック、変更、および対応するイベントのredisへの公開

2、ログインターフェース

  • worker

1. サブはredisの対応するチャネルを購読し、マスターからのイベントメッセージを受信し、スケジューラでタスクを追加または削除します。

2、タスクタスクの実行は、redis分散ロックとリースの更新の使用は、同じタスクの実行で同じ時間だけワーカーで同じタスクを確保するために

3.mongodbを使ってタスクとタスクログを保存します。

4.ワーカーは起動するたびに、データベース内のタスクをスケジューラに追加する必要があるかどうかを判断します。

長所と短所

  • アーキテクチャは比較的シンプルで、実装はそれほど複雑ではなく、高可用性を実現するために複数のマスターと複数のワーカーをサポートします。
  • スケジューラとエクゼキュータがWorkerの中に一緒に配置されることで、良い点と悪い点があります。 複数のWorkerは、スケジューラが1つしかないことによる一点集中の問題を心配する必要はありませんが、複数のWorkerが一緒にスケジューリングされることになり、問題解決に分散ロックが使われるとはいえ、リソースの無駄遣いになります。
  • 分散タスク・スケジューリングには多くの実装オプションがあり、これは主要な方向性に過ぎませんが、さらに最適化したり、ピットをもっと踏み込んだりすることもできます

関連コンポーネント/

  • cron[4] - 時間指定スケジューラ
  • echo[5] - web
  • mongo-go-driver[6] - mongo
  • go-redis[7] - redis
  • msgpack[8] - redis メッセージングのシリアライズ

x02 References

  • [1] clock:
  • [2] BruceDone/clock:
  • [3] crontab:
  • [4] cron:
  • [5] echo:
  • [6] mongo-go-driver:
  • [7] go-redis:
  • [8] msgpack:
Read next

Spring Boot 2.X 実践編 - アクチュエータ監視ツール

開発の効率を向上させるためのフレームワークとしてSpring Bootは、そのようなSpring Bootアクチュエータ監視ツールなど、多くの追加機能と統合され、本番環境を監視し、管理するためのツールとして使用することができます。これは、開発者がHTTPまたはJMXの方法を使用することができ、監査、本番環境の実行状況やその他の指標を収集します。 アクチュエータエンド...

Aug 15, 2020 · 4 min read