そこで追跡できるように、問題をgithub repoに送信しました 。
N 個のコアを持つマシン上にある可能性のあるクラスター化されたアプリを実行しています。テスト用に 2 つのアプリ インスタンスをローカルで実行し、2 つの異なるボックスを実際にエミュレートしているとします。したがって、モジュールを使用する N 台のマシン上の N 個のコアcluster
(実際には、N 台のマシンは静的です。たとえば、AWS ロード バランサーのわずか 2 台の背後にあります)。
- これに対してcollective.jsの「all_hosts」オプションを適切に設定するにはどうすればよいですか?
process.id
どういうわけか IP と一緒に使用しますか?
コード スニペットを実行すると、2 つの bash ターミナルに沿ったものになります。
第1ターミナル:
coffee cluster1
第2ターミナル:
coffee cluster2
注: 以下のコードは機能しますが、構成がよくわからないため、実際には機能しません。データをログに記録するたびに、それはプロセスに固有のものです。
cluster1.coffee :
cluster = require 'cluster'
numCPUs = require('os').cpus().length
if cluster.isMaster
i = 0
cluster.setupMaster
exec: './server1'
console.log "App 1 clustering with: #{numCPUs} clusters"
while i < numCPUs
cluster.fork()
i++
cluster.on 'fork', (worker) ->
console.log 'Forked App 1 server worker ' + worker.process.pid
server1.coffee :
Collective = require 'collective'
all_hosts = [
host: 'localhost', port: 8124 # Wrong
]
collective = new Collective(
host: 'localhost'
port: 8124
, all_hosts, (collective) ->
)
collectiveUpsert = () ->
num = Math.floor((Math.random()*10000)+1)
data =
num: num
console.log process.pid + ' sees current num as: ' + JSON.stringify(collective.get('foo.bar'))
console.log process.pid + ' setting num to: ' + JSON.stringify(data)
collective.set 'foo.bar', data
setInterval (->
collectiveUpsert()
), 5 * 1000
cluster2.coffee :
cluster = require 'cluster'
numCPUs = require('os').cpus().length
if cluster.isMaster
i = 0
cluster.setupMaster
exec: './server2'
console.log "App 2 clustering with: #{numCPUs} clusters"
while i < numCPUs
cluster.fork()
i++
cluster.on 'fork', (worker) ->
console.log 'Forked App 2 server worker ' + worker.process.pid
server2.coffee :
Collective = require 'collective'
all_hosts = [
host: 'localhost', port: 8124 # Wrong
]
collective = new Collective(
host: 'localhost'
port: 8124
, all_hosts, (collective) ->
)
collectiveUpsert = () ->
num = Math.floor((Math.random()*10000)+1)
data =
num: num
console.log process.pid + ' sees current num as: ' + JSON.stringify(collective.get('foo.bar'))
console.log process.pid + ' setting num to: ' + JSON.stringify(data)
collective.set 'foo.bar', data
setInterval (->
collectiveUpsert()
), 5 * 1000