Skip to content

V2 #68

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Sep 1, 2016
Merged

V2 #68

merged 18 commits into from
Sep 1, 2016

Conversation

asilvas
Copy link
Collaborator

@asilvas asilvas commented Apr 12, 2015

_Status_: v2.0.0-alpha2 published

So far...

Features:

  • Proxy support with dynamic app versioning
    • Central proxy config file, promotions persisted to disk to survive service restarts
    • Isolated worker processes per version
    • On demand versioning via x-version header
    • Version promotion brings up worker count for desired version and brings down worker count of old version
  • Worker process downgrade from root via workerGid & workerUid
  • Backward compatibility with v1.x! Who does that with a major release?!

Enhancements:

  • Refactored communication between processes
  • Worker processes may now trigger commands (same) and wait for response (new). The new message bus enables RPC and other flows like this between processes

TODO:

  • I'd still like to get argument scoping in place to avoid cluster-service arguments not playing nice with the apps arguments. Example: --cs.workerCount 1 instead of --workerCount 1. But if no cs arguments are detected, it'll fall back to legacy mode to avoid breaking existing apps
  • Tests needed to cover all new proxy features
  • All tests working again, but more needed

Example Proxy Usage:

cservice:  cluster-service v2.0.0-alpha2 starting...
cservice:  LOCAL ONLY MODE. Run with 'accessKey' option to enable communication channel.
cservice:  CLI is now available. Enter 'help [enter]' for instructions.
cservice:  No workers running. Try 'start server.js'.
cservice> proxy start ./examples/proxy/proxy.json
cservice:  Worker proxy-worker.js(4940) start, reason: Unknown
cservice:  Worker proxy-worker.js(5604) start, reason: Unknown
cservice:  Proxy running on ports 1000,1001
cservice:  Starting workers... timeout: 60000
cservice:  Worker worker.js(2336) start, reason: start
cservice:  Worker worker.js(8380) start, reason: start
cservice:  Worker worker.js(7520) start, reason: start
cservice:  Worker worker.js(8428) start, reason: start
cservice:  Worker worker.js(9592) start, reason: start
cservice:  Worker worker.js(8372) start, reason: start
cservice:  Worker worker.js(10112) start, reason: start
cservice:  Worker worker.js(8652) start, reason: start
cservice> proxy info
cservice:
{ versionPath: 'C:\\_save\\Google Drive\\_save\\dev\\node-cluster-service\\examples\\proxy',
  workerFilename: 'worker.js',
  portRange: { min: 11000, max: 12000 },
  options:
   { defaultVersion: 'v1',
     bindings:
      [ { port: 1000, workerCount: 2 },
        { port: 1001,
          workerCount: 2,
          tlsOptions:
           { key: './examples/certs/test1-key.pem',
             cert: './examples/certs/test1-cert.pem' } } ],
     nonDefaultWorkerCount: 1,
     nonDefaultWorkerIdleTime: 3600 },
  proxyWorkers: [ { port: 1000, ssl: false }, { port: 1001, ssl: true } ],
  versionWorkers:
   [ { worker: 'C:\\_save\\Google Drive\\_save\\dev\\node-cluster-service\\examples\\proxy\\v1\\worker.js',
       version: 'v1' },
     { worker: 'C:\\_save\\Google Drive\\_save\\dev\\node-cluster-service\\examples\\proxy\\v1\\worker.js',
       version: 'v1' },
     { worker: 'C:\\_save\\Google Drive\\_save\\dev\\node-cluster-service\\examples\\proxy\\v1\\worker.js',
       version: 'v1' },
     { worker: 'C:\\_save\\Google Drive\\_save\\dev\\node-cluster-service\\examples\\proxy\\v1\\worker.js',
       version: 'v1' },
     { worker: 'C:\\_save\\Google Drive\\_save\\dev\\node-cluster-service\\examples\\proxy\\v1\\worker.js',
       version: 'v1' },
     { worker: 'C:\\_save\\Google Drive\\_save\\dev\\node-cluster-service\\examples\\proxy\\v1\\worker.js',
       version: 'v1' },
     { worker: 'C:\\_save\\Google Drive\\_save\\dev\\node-cluster-service\\examples\\proxy\\v1\\worker.js',
       version: 'v1' },
     { worker: 'C:\\_save\\Google Drive\\_save\\dev\\node-cluster-service\\examples\\proxy\\v1\\worker.js',
       version: 'v1' } ] }
cservice> proxy promote v2
cservice:  Starting workers... timeout: 60000
cservice:  Worker worker.js(1892) start, reason: start
cservice:  Worker worker.js(4852) start, reason: start
cservice:  Worker worker.js(10172) start, reason: start
cservice:  Worker worker.js(10004) start, reason: start
cservice:  Worker worker.js(4896) start, reason: start
cservice:  Worker worker.js(7200) start, reason: start
cservice:  Worker worker.js(5464) start, reason: start
cservice:  Worker worker.js(5408) start, reason: start
cservice:  Proxy promoted version v2 successfully
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Worker worker.js(2336) exited, reason: proxy demote
cservice:  Worker worker.js(8380) exited, reason: proxy demote
cservice:  Worker worker.js(8428) exited, reason: proxy demote
cservice:  Worker worker.js(7520) exited, reason: proxy demote
cservice:  Worker worker.js(9592) exited, reason: proxy demote
cservice:  Worker worker.js(8372) exited, reason: proxy demote
cservice:  Proxy demoted old version v1 successfully
cservice:  Worker worker.js(10112) exited, reason: proxy demote
proxy promote v1
cservice:  Starting workers... timeout: 60000
cservice:  Worker worker.js(7948) start, reason: start
cservice:  Worker worker.js(8188) start, reason: start
cservice:  Worker worker.js(11176) start, reason: start
cservice:  Worker worker.js(5308) start, reason: start
cservice:  Worker worker.js(9096) start, reason: start
cservice:  Worker worker.js(10884) start, reason: start
cservice:  Worker worker.js(10732) start, reason: start
cservice:  Proxy promoted version v1 successfully
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Killing workers... timeout: 60000
cservice:  Worker worker.js(4852) exited, reason: proxy demote
cservice:  Worker worker.js(1892) exited, reason: proxy demote
cservice:  Worker worker.js(7200) exited, reason: proxy demote
cservice:  Worker worker.js(10004) exited, reason: proxy demote
cservice:  Worker worker.js(4896) exited, reason: proxy demote
cservice:  Worker worker.js(10172) exited, reason: proxy demote
cservice:  Proxy demoted old version v2 successfully
cservice:  Worker worker.js(5464) exited, reason: proxy demote
shutdown all
cservice:  Killing workers... timeout: 60000
cservice:  Worker worker.js(10732) exited, reason: shutdown
cservice:  Worker worker.js(8188) exited, reason: shutdown
cservice:  Worker proxy-worker.js(5604) exited, reason: shutdown
cservice:  Worker worker.js(10884) exited, reason: shutdown
cservice:  Worker worker.js(9096) exited, reason: shutdown
cservice:  Worker proxy-worker.js(4940) exited, reason: shutdown
cservice:  Worker worker.js(5308) exited, reason: shutdown
cservice:  Worker worker.js(7948) exited, reason: shutdown
cservice:  Worker worker.js(8652) exited, reason: shutdown
cservice:  Worker worker.js(5408) exited, reason: shutdown
cservice:  All workers shutdown. Exiting...
cservice:  'Shutting down...'

Math.floor(
tasks.length * cservice.options.restartConcurrencyRatio
);
async.parallelLimit(tasks, limit, function(err) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@scommisso
Copy link

LGTM 👍

@asilvas asilvas merged commit 9a44604 into master Sep 1, 2016
@asilvas asilvas deleted the v2 branch September 1, 2016 23:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants