Skip to content
Kristoffer Walker edited this page Dec 27, 2012 · 6 revisions

Component List

Webapps (application packages)

Purpose

  • The actual user facing web applications running on Platform.X
  • Run the application code and business logic.
  • Interface with database systems over TCP.
  • Provide static resources like CSS and JavaScript.

Installation

  • All application and config files are pushed via rsync from the application repository on local workstations.
  • The AppController (aka Meastro) will restart the app after the rsync update when it is contacted by the workstation that deployed the app.

Notes

Enginemill version is set in configs, and a copy of Enginemill is installed on the webserver alongside the webapp. This local 'app specific' install of Enginemill is used by the AppRunner. See the Webserver docs for more.

Maestro starts or restarts each Webapp by invoking a restart script (called an AppRunner) for each one, passing it the port number it should be running on.

Dependencies

  • AppRunner script.
  • Enginemill Server
  • Enginemill SDK for development and deployment

AppController AKA "Maestro" (service)

Purpose

  • Start and restart Webapps (AppRunner processes)
  • Proxy HTTP requests to Webapps
  • Log requests, and events from Webapps
  • Send heartbeats from WebApps to AppMonitor

Implementation

  • Listens to stdout and stderr of Webapps
  • Logs locally to disk
  • Sends heartbeats to AppMonitor over TCP (Dnode)
  • Receives commands from AppMonitor over TCP (Dnode)
  • Queries AppMonitor for Webapps that should be running

Notes

See the Webserver docs for more.

Installation

  • Provided by npm from a tarball hosted on GitHub
  • Deployed by Cloudmill

Dependencies

  • AppMonitor
  • GitHub (hosts AppController npm tarball)
  • Cloudmill

AppMonitor AKA "Beacon" (service)

TODO: Unimplemented.

Purpose

  • Listen for application updates and notify AppController
  • Listen for events from AppController and notify sys admins
  • Listen for Webapp change notifications from the AppRepository
  • Notify AppController of Webapp changes

Implementation

  • Listens on HTTP port for application updates
  • Uses HTTP to answer queries for Webapp configs
  • Uses TCP (telegram) to send events to AppController
  • Uses TCP (telegram) to listen to events from AppController
  • Cloudmill runs it as a service (upstart?)

Notes

See the SAK Server docs for more.

Installation

  • Provided by npm from public npmjs.org repo
  • Cloudmill

Dependencies

  • AppRepository
  • GitHub (hosts AppMonitor npm tarball)
  • Cloudmill

AppRepository

TODO: Unimplemented.

Purpose

  • Endpoint for Webapp uploads from Enginemill
  • Storage of Webapp files
  • Notifies AppMonitor of Webapp changes
  • Stores configs for Webapps
  • Answers queries for running Webapp configs
  • Serves Webapp files from storage

Implementation

  • Backed by Amazon S3
  • Webapps are uploaded and retrieved via HTTP
  • Notifies AppMonitor via TCP (Dnode)

Notes

See the SAK Server docs for more.

Installation

  • Provided by npm from a tarball hosted on GitHub
  • Cloudmill

Dependencies

  • GitHub (hosts AppRepository npm tarball)
  • Cloudmill

Enginemill SDK (development kit)

Purpose

  • Run local dev server for Webapps
  • Create Webapp harness instances for a running server
  • Deploy Webapps to hosted PaaS

Implementation

  • Deploys applications with HTTP to AppRepository

Installation

  • Provided by npm from npmjs.org public repo
  • Installed globally on local systems

Dependencies

  • AppRepository