2

私はいくつかのマイクロサービスを持っています (Ruby で実装されていますが、それが私の質問にとって重要であるとは思えません)。それらの 1 つはアイテムを提供し、もう 1 つはそれらを処理し、(DELETE 呼び出しを介して) 処理済みとしてマークします。

プロバイダーには/items、ID で識別される多数の項目を JSON 形式でリストするエンドポイントがあります。またDELETE /items/id、リストから 1 つの項目を削除するエンドポイントもあります (おそらく処理されるため)。

「プロセッサ」のコード (非常に簡略化) は次のようになります。

items = <GET provider/items>
items.each do |item|
  process item
  <DELETE provider/items/#{item.id}>
end

これにはいくつかの問題がありますが、私が解決したいのは、スレッドセーフではないため、並列で実行できないことです。2 人のワーカーがアイテムの処理を同時に開始すると、「互いのつま先に足を踏み入れる」ことになります。つまり、同じアイテムのリストを取得し、各アイテムを 2 回処理して削除しようとします。

このセットアップを変更して並列処理を可能にする最も簡単な方法は何ですか?

ルビーが利用可能であると想定できます。私は変更を最小限に抑えることを好み、可能であれば他の gem をインストールしたくありません。Sidekiqは、コンシューマのキューイング システムとして利用できます。

4

3 に答える 3