問題タブ [node-worker-threads]

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.

0 投票する
1 に答える
97 参照

node.js - ノードインスタンスがいくつかある場合、worker_threads の終了を適切に処理するにはどうすればよいですか? (docker-swarm や Kubernetes クラスターなど)

ノードで worker_threads を作成しており、それらをカスタム WorkerPool に収集しています。すべてのワーカーは固有の worker.threadId を持っているため、固有です。私のアプリには特定のワーカーを終了する機能があります - WorkerPool に terminateById() メソッドがあります。

したがって、node.js インスタンスが 1 つあれば、すべて問題ありません。しかし、docker-swarm または Kubernetes を使用しようとしている場合、n 個の異なる WorkerPool インスタンスが存在することになります。したがって、たとえば、1 つのノード インスタンスでいくつかのワーカーを作成し、現在 1 つを終了しようとしています。これは、threadId (またはワーカーを識別するための他の一意のデータ) を使用したリクエストがあることを意味します。たとえば、ロード バランサーがこのリクエストに別のノード インスタンスを使用することを選択した場合、このインスタンスにはワーカーがありません。

最初は、ワーカーの一意のインデックスを userId+ThreadId のようなものに変更して、たとえば redis に保存できると思いました。しかし、Worker.findByThreadID() のような情報は見つかりませんでした。複数のノードインスタンスがある場合、状況で何ができますか?

更新: ロード バランサーのスティッキー セッションに関する情報を見つけました。つまり、Cookie を使用して特定のユーザーを特定のノード インスタンスに貼り付けることができますが、私の場合、ワーカーが終了するまでこの貼り付けをアクティブにする必要があります。それは何日も続くことができます