3

ステートレスで、水平スケーリングのために多くのマシンにデプロイされることを意図したプレイ フレームワーク ベースのサービスがあります。

このサービスは HTTP JSON リクエストとレスポンスを処理しており、最大のスケーラビリティのために CouchDB をデータ ストアとして再び使用しています。

クラスター全体で X 秒ごとに実行する必要がある少数のバックグラウンド ジョブがあります。ジョブが各マシンで同時に実行されないようにすることが重要です。

アクターと Akka スケジューラを使用しているジョブを実行するには (Scala を使用しているため):

Akka.system().scheduler.schedule(
    Duration.create(0, TimeUnit.MILLISECONDS),
        Duration.create(10, TimeUnit.SECONDS),
        Akka.system().actorOf(LoggingJob.props),
        "tick")

(等)

object LoggingJob {
    def props = Props[LoggingJob]
}

class LoggingJob extends UntypedActor {
    override def onReceive(message: Any) {
        Logger.info("Job executed! " + message.toString())
    }
}

ある:

  • 私が見逃した Akka/Actors/Play に組み込まれているトリッキーは、私のためにこれを行いますか?
  • または、これを行うために Couchbase (分散型ミューテックス?) の上に置くことができる認識されたアルゴリズム?

展開と管理を非常に簡単にする必要があるため、インスタンスを「特別」にしたくありません。

4

1 に答える 1

2

Akka のCluster Singleton Patternを確認してください。

ユースケースによっては、クラスター内のどこかで実行されている特定のタイプのアクターを 1 つだけ確保することが便利であり、場合によっては必須でもあります。

いくつかの例:

  • 特定のクラスタ全体で一貫した決定、またはクラスタ システム全体でのアクションの調整に対する単一の責任
  • 外部システムへの単一のエントリ ポイント
  • シングルマスター、多くのワーカー
  • 集中型ネーム サービス、またはルーティング ロジック

シングルトンを使用することは、最初の設計選択ではありません。単一ポイントのボトルネックなど、いくつかの欠点があります。単一障害点も関連する問題ですが、場合によっては、別のシングルトン インスタンスが最終的に確実に開始されるようにすることで、この機能が問題を解決します。

于 2013-09-04T23:54:22.560 に答える