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:




