私のプロジェクトでは、Blazegraph データベースで使用できるロック メカニズムがないため、コード内にクリティカル セクションを記述することで、複数の競合状態のシナリオに対処しています。アプリケーションは AWS Fargate(docker) にデプロイされます。
欠点は、コード内のブロックが同期されているため、複数のコンテナーでアプリケーションをスケーリングできないことです。
例:
- 複数のリビジョンを持つプロジェクトがあります。一度にコミットできるユーザーは 1 人だけです。コミットは、プロジェクト内の最新のリビジョン番号を読み取ることによって行われます。したがって、最新のリビジョン番号を取得して新しいリビジョンをコミットするコードは同期ブロックにあります。
- 保存リクエストごとに順次 ID を生成するために、オブジェクト カウンタがプロジェクトで維持されます。したがって、最新のオブジェクト カウンターをフェッチしてインクリメントするコードは、同期ブロックにあります。
可能なオプション:
- キューを維持する - すべてのリクエストをキュー経由でルーティングする必要があるため、コストがかかりすぎます
- 「uuid」を id として保持します - ビジネス上の理由。変えられない
どんな提案でも大歓迎です。よろしくお願いします。