anchor.diff:    no need to set up harnesses that simulate or provide the other end of a switch.
   
   
  -## Funcatron Pieces and Packaging
  +== Funcatron Pieces and Packaging
   
   In Funcatron, user code is referred to as Funcs. Funcs are bundled together
   along with routing descriptors in a single file that's called a _Func Bundle_.
  
positive.code:   message_queue <-- Tron: Route Table
    openresty <-- message_queue: Route Table
  ----
  
negative.code: ====
  JavaScript support is scheduled for Funcatron 0.3.0
  ====
  * CLR (Common Language Runtime). Run .Net assemblies in Mono (scheduled for Funcatron 0.4.0)
  
  
  == Network 
  
  Funcatron has a series of discrete components, all of which are packaged as https://docker.com[Docker]
  components:
  
  * Frontend -- the code the recieves the incoming request.
  * Message Queue -- the medium of communication among the system components.
  * Tron -- the control system that knows what
  * Runner -- The code that dequeues requests and runs the function associated with the request.
  
  The components communicate via network as follows:
  
  [plantuml]
  ----
  skinparam handwritten true
  
  
  () "Upload/Enable" as Operator
  
  () "HTTPS Proxy" as Proxy
  
  node "Message Queue" as MQ
  
  package "Public Facing" {
      [Frontend]
  }
  
  node {
      [Tron]
      [Runner]
  }
  
  
  Proxy -> [Frontend] : "HTTP port 80"
  
  [Frontend] <--> MQ : Stomp
  
  [Tron] <--> MQ : AMQP
  
  Note left of [Frontend]: Multiple instances
  
  [Frontend] -> [Runner] : "HTTP port 4000"
  
  [Runner] -> [Tron] : "HTTP port 3000"
  
  Note left of [Runner] : Multiple instances\nAuto-scaled
  
  Note left of [Tron] : One instance
  
  Note left of MQ : Cluster
  
  Note left of Operator : Access to control\nFuncatron cluster
  
  
  [Runner] <--> MQ : AMQP
  
  Operator -> [Tron] : "HTTP port 3000"
  ----
  
  In the current implementation, here is the actual technology used:
  
  * Frontend -- http://openresty.org/en/[OpenResty] with Lua scripts that enqueue the requests
    and dequeue the response
  * Message Queue -- http://www.rabbitmq.com/[RabbitMQ]
  * Tron -- JVM code (Clojure and Java)
  * Runner -- JVM code that uses https://en.wikipedia.org/wiki/Java_Classloader[classloaders] to
              load JVM Func Bundles. For other languages, a new process will be kicked off for each
              Func Bundle
  
  ### Request Sequence Diagram
  
  Incoming HTTP requests are handled as follows:
  
  
  [plantuml]
  ----
  skinparam handwritten true
  
    browser  -> "Front End": HTTP Reqest
    "Front End" -> "Front End": Consult Route Table
  