0

を、メッセージを検証します。 オブジェクトが変更されると、複数のアクションが発生します(DB、監査、ログなど)。カフカは、私は、複数のユーザーが共有<strong></strong>オブジェクトの状態を変更するためにRESTオペレーションを送ることができるアプリケーションを持っているステートフル処理に

ないすべての操作は、それが削除された後、あなたがオブジェクトを変更することはできません例えば有効です。カフカを使用して

私は、次のアーキテクチャを考えていた:

  1. 残りの操作は、カフカのトピックにキューイングされています。
  2. 同じオブジェクトへの操作は、同じパーティションしようとしています。だから、すべてのオブジェクトの操作は順番になると
  3. 消費者はパーティションを聞いている消費者によって処理され、操作は有効で、その後「有効に送信された場合は、インメモリ・データベース
  4. を使用して操作を検証します操作トピック」otherwaysに送信され、 『私はポイント番号3については非常に確認していない有効な操作のトピック『

  • その他の消費者(DB、ログ、監査が)を聞いている』無効な操作トピック。 私はすべての私のオブジェクトの状態を維持する考えが嫌いです。しかし

    私はその状態を検証するために保存するために必要なものを、私はオブジェクトの十億を持っており、オブジェクトのサイズが10メガバイトのものとすることができる場合でも、わずか数キロバイト...である)、これは一般的なパターンですか?それ以外の場合は、特定の操作の妥当性をどのように確認できますか?また

    あなたは、インメモリデータベースとして使用しているものをしますか?確かに、高可用性で、フォールトトレラントで、トランザクションをサポートしなければなりません(読み書き)。

  • +0

    私はこれを使うつもりでした:https://samza.apache.org/learn/documentation/0.7.0/container/state-management.html ... –

    答えて

    4

    私は、これは非常に有効なパターンであると信じ、そして基本的にイベントソースのCQRSパターンにバリエーションです。例えば

    Lagom implements their CQRS persistence in a very similar fashion(完全に異なるツールセットに基づいている)

    いくつかのポイント:

    • あなたは連番の操作の必要性について正しい:すべてのあなたの状態変異がオンに基づきする必要があるため前の突然変異の結果、その実行に強い秩序がなければならない。これは非常に頻繁に起こります。そのため、これらの操作を可能な限り水平にスケーリングして、各シーケンス操作が他の多くのシーケンスと並行して行われるようにしたいと考えています。あなたのケースでは、共有オブジェクトごとにこのようなシーケンスが1つあります。キーでカフカのパーティションに頼っ
    • は(デフォルト値1よりも高いmax.in.flight.requests.per.connectionを設定しないと仮定して)それを達成するための良い方法です。ここでも、Lagomは永続エンティティを分散しシングルスレッド化することで同様のアプローチをとっています。私はラゴムが良いと言っているわけではありません、私はちょうどアプローチが他の人によって使用されている事実であなたを慰めています:)

    • あなたのパターンの重要な側面は、専門用語は状態に影響を及ぼす要求と見なされ、さまざまな理由で拒否される可能性があります。イベントとは、過去に起こった状態の更新の説明であり、受け取った人の観点からは反駁できません。イベントは常に真実を伝えます。あなたが記述しているプロセスは、2つの境界にあるコントローラです。コマンドをイベントに変換する役割を担います。

    • この意味で、あなたが言及する「有効な操作トピック」は、プロセスの状態更新のイベントソースの記述になります。すべてがカフカに裏打ちされているので、それは任意に分裂可能でスケーラブルで素晴らしいです:)
    • あなたのオブジェクトのすべての状態のサイズを心配しないで、何とかどこかに座る必要があります。このコントローラはコマンドをイベントに変換するので、そのオブジェクトに関連する真実の主なソースになります。このコントローラはイベントのプライマリストレージを処理します。それ。 Kafka Streams's Key value storeを使用することができます:それらはそれぞれの処理インスタンスに対してローカルですが、永続化すると、使用可能なRAMよりもはるかに大きなデータを処理することに問題はありません。あなたの状態ストアが複製され、必要に応じて他のマシン上で透過的に再作成されるように、RocksDBのおかげでシーンの背後にあるデータはカフェのトピックにすべてイベントソースされているため、シーンの裏にディスクにデータが書き込まれます

    私はこれがあなたのデザインを完成させるのを助けてくれることを願っています:)

    関連する問題

     関連する問題