Я отправил вопрос на номер github repo, чтобы отслеживать его там!Node.js cluster + collect
Я запускаю кластерное приложение, которое может быть на машине с N ядрами. Скажем, я запускаю 2 экземпляра приложения локально для тестирования, действительно подражая 2-мя различным коробкам. Таким образом, N ядер на машинах N с использованием модуля cluster
(на самом деле машины N статичны, например, всего 2 за балансировкой нагрузки AWS).
- Как правильно настроить collective.js вариант «all_hosts» для этого? Я бы использовал
process.id
как-то вместе с IP?
Запуск фрагменты кода будет что-то вдоль линий 2 Баш терминалов:
терминала 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