問題タブ [akka-persistence]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - 監査証跡機能の構築
以下は、ワークフロー システムでのユース ケースです。
作業指示書がシステムに入力されます。作業指示には、作業指示を完了する前にさまざまなワークフロー状態を通過するターゲットがあります。
ターゲット車両の作業指示書がシステムに入ったとします-この作業指示書のワークフローには2つのタスクが含まれます
a) 洗車
b)車両を検査する
車両の洗浄ワークフロー タスクによって、車両の属性が「未洗浄」から「洗浄済み」に変更されたとします。そして、「車両を検査する」というワークフロー タスクは、車両の属性を「未検査」から「検査済み」に変更します。
ユーザーが作業指示書データをプルしている場合、ユーザーには常に最新の車両データが表示されます (この例では、両方のワークフロー タスクが完了していると仮定すると、ユーザーには「洗浄済み」と「検査完了」という値が表示されます。ただし、ユーザーがワークフロー タスク洗浄車両データのみをプルすると、ユーザー -> ユーザー"washed" と表示されます - 2 番目のタスクは完了していますが、ワークフロー タスク 1 はそれが変更されたことのみを認識します。ワークフロー タスク 2 のデータを取得すると、"washed" と "inspection done" の両方が表示されます。
これには、データのミルストーン (監査証跡) が含まれます。1 つのアプローチは、下の画像に示すとおりです。ワークフロー タスクがデータを変更すると、バージョン番号 modified_ts が更新され、そのバージョン番号が独自のデータ行に保持されます (以下に示すように、JOIN テーブルを介して)。基本的に、これはワークフロー タスク データの履歴レコードへの参照を維持することに他なりません。したがって、ワークフロー タスク データをプルするときに、どの履歴レコードをプルバックするかを認識します。parent_id
その他の注意事項、下図のノイズは無視してください。この質問には関係ありません。
イベントソーシングも別の代替設計になると考えていますが、イベントソーシング(または他の同様のソリューション)を販売ソリューション全体として適用したくはありませんが、この特定のユースケースにのみ適用します(監査証跡がある3つほどのテーブルのみに影響します)重要)。CQRS/イベント ソーシングが部分的な解決策として適しているかどうかを評価しようとしています (ここでも、履歴/監査証跡データを保存する必要がある 3 ~ 4 個のテーブルに限定されます)、または ES/CQRS は過剰になりますか? 他の考えはありますか?
PSこれはScalaとは関係ありませんが、Scalaは私たちが使用しているプラットフォームであるため、タグ付けして、役立つ言語固有のソリューションがあるかどうかを確認します. Akka の永続性を介した ES/CQRS がオプションであるかどうかを調べるために、Akka にタグを付けます。Postgresql は db です - DB トリガーは私が探しているソリューションではありません。
cassandra - haproxy経由でcassandraコンテナに接続できません
mesos クラスターで dockerized を実行している Cassandra に外部アプリを接続しようとしています。
これらは私がmesosで実行しているアプリです:
peekというアプリは、提案をテストするために使用されています。URL: http://192.168.56.101:10001で問題なくアクセスできます。
2 つの cassandra インスタンスはシードであり、もう 1 つはスケールアップ用です。クラスターを形成しています。
marathon で cassandra アプリケーションをデプロイするための json の説明は次のとおりです。
/カサンドラの種
/カサンドラ
haproxy の構成は次のとおりです。
Cassandra に接続しようとしているアプリケーションは Play アプリケーションです。私は次のように設定しています:
アプリは正常に起動しますが、アクセスしようとすると、次のエラーが表示されます。
これを修正する方法を知っている人はいますか?私は何を間違っていますか?
前もって感謝します...
更新 =============================
興味深いことに、アプリケーションのキースペースが作成されました (akka、akka_snapshots):
更新 2 =============================
アプリを実行中のcassandraに直接接続することさえできないことに気付きました(haproxyを経由せずに)。したがって、portMapping を次のように変更しました。
そしてそれはうまくいきました。ただし、 servicePort宣言のため、1台のマシンしか起動できません。
問題はポート マッピングにあります。どんな手掛かり?
akka - メッセージのステータスをredisに保存するよりも、akkaの永続性の方が優れていますか?
現在、redis をクエリするだけでどのメッセージが処理されたかを監視できるため、akka で redis を使用するのが好きです。Redis はディスクにも保持されます。
akka の永続性は、単に redis を使用する場合と比べてどうですか?
docker - Cassandra クラスターには接続できませんが、単一ノードには接続できますか?
外部の Play アプリケーションを cassandra クラスター (mesos 上の docker コンテナーで実行されている) に接続しようとしているときに、ここで奇妙な状況に直面しています。
問題は:
Cassandra ノードが 1 つしかない場合でも、Play アプリケーションから適切に接続できます。しかし、それに 2 つ目のノードを追加すると、どのノードにも接続できなくなります。
次のようにノードを配置しています。
最初のノード (SEED)
この時点で、playy アプリを cassandra-seed に接続できます。
カサンドラノード2
このノードが起動した後、それに接続することも、cassandra-seed に接続することもできません。
nodetool ステータスの結果:
2 番目のノードが起動した後、cassandra はアドレスにバインドされていないように見え、ホストはそれを認識しなくなります。私は何をすべきか?
scala - Akka 2.4 Persistence Query を駆動する「ライブ」ストリームの実装
私は実験的な Akka Persistence Query モジュールを調査しており、アプリケーションにカスタムの読み取りジャーナルを実装することに非常に興味があります。CurrentPersistenceIdsQuery
ドキュメントでは、ジャーナルの現在の状態を返すクエリ (例: ) と、イベントがアプリケーションの書き込み側を介してジャーナルにコミットされるときにイベントを発行するサブスクライブ可能なストリームを返すクエリ (例: AllPersistenceIdsQuery
)の 2 つの主要なクエリについて説明しています。
私の不自然なアプリケーションでは、Postgres と Slick 3.1.1 を使用してこれらのクエリの根幹を動かしています。次のようなことを行うことで、データベース クエリの結果を正常にストリーミングできます。
ただし、基になる Slick DB アクションが完了するとすぐに、ストリームは完了したと通知されます。これは、新しいイベントを発行できる永続的にオープンなストリームの要件を満たしていないようです。
私の質問は次のとおりです。
- Akka Streams DSL を純粋に使用してそれを行う方法はありますか? つまり、クローズできないフローを送信できますか?
- LevelDB の読み取りジャーナルがどのように機能するかを調査しましたが、読み取りジャーナルを書き込みジャーナルにサブスクライブさせることで、新しいイベントを処理しているようです。これは理にかなっているように思えますが、質問する必要があります。一般的に、この要件に対処するための推奨されるアプローチはありますか?
- 私が考えたもう1つのアプローチはポーリングです(たとえば、定期的に読み取りジャーナルにDBを照会させ、新しいイベント/ IDをチェックします)。私よりも経験豊富な人がアドバイスを提供できますか?
ありがとう!
testing - 単体テストで akka 永続アクターを強制終了して再起動し、状態が保持されているかどうかを確認する方法
私の単体テストでは、永続的なアクターを強制終了して再起動し、状態を適切に保持できるかどうか (たとえば、イベントのシリアル化/逆シリアル化が正常に機能するかどうか) を確認する方法はありますか?