Skip to content

Latest commit

 

History

History
39 lines (22 loc) · 3.8 KB

ARCHITECTURE.md

File metadata and controls

39 lines (22 loc) · 3.8 KB

Rt 106 Architecture

Rt 106 has a Docker-based service oriented architecture. Rt 106 is designed to scale across a variety of deployments, ranging from cloud deployments support many users and algorithms down to laptop deployments for simple use cases and demos.

Server

The hub of a Rt 106 installation is the rt106-server. The rt106-server is a Node.js application that provides REST endpoints for all Rt 106 services. The rt106-server is the main component of the Rt 106 architecture to which applications will interface. The rt106-server provides access to data, algorithms, and algorithm execution history and status.

The rt106-server can be scaled to support user demand by placing several instances of the rt106-server behind a load balancer.

Datastore

The Rt 106 Datastore provides REST endpoints for listing, reading, and writing bulk data. Rt 106 provides a Datastore that can manage data on a local filesystem. Future Datastores will also be able to manage data on AWS S3. Two data models are currently supported in Rt 106. The first is clinically oriented to manage patients, images, waveforms, and clinical records. See rt106-rad-seed for an example application using the clinical data model. The second is pathology research oriented to manage slides, regions, and channels. See rt106-path-seed for an example application using the pathology research data model.

The rt106-datastore can be scaled to support user demand by placing several instances of a Datastore behind a load balancer.

Algorithms

Algorithms are managed in Rt 106 as separate Docker containers. Each algorithm provides a small REST interface which allows Rt 106 to query the algorithm for a description of its inputs, parameters, outputs, and display. Rt 106 provides an Algorithm SDK for adding algorithms to Rt 106. The SDK provides a base Docker image with the necessary tooling for connecting to Rt 106, access an algorithm job queue, and download data and uploading results. Algorithms can be authored in any language. Adding an algorithm to Rt 106 requires creating a JSON description of the algorithm, creating a script to run the algorithm, and creating a Docker image.

Algorithms can be scaled to support user demand by instantiating multiple instances of an algorithm. No load balancer is needed to scale algorithms as algorithms will pull work from a job queue. An algorithm instance will only execute one algorithm request at a time.

Applications

Applications interface to the rt106-server to access data and request algorithm executions. Rt 106 provides a Javascript library rt106-app to make it simple to create Rt 106 applications. rt106-app is based on AngjularJS. rt106-app can be pulled into an application's codebase using Bower. (Future versions of Rt 106 will move to using Yarn or Webpack.)

Multiple applications can access a single rt106-server and rt106-datastore. Or, each application could have its own rt106-server and rt106-datastore.

Queues

Each algorithm in Rt 106 has a job queue (currently based on RabbitMQ). Multiple instances of the same algorithm share a single job queue.

Service Discovery

Rt 106 uses Service Discovery to manage a dynamic catalog of algorithms. Service Discovery allows for algorithms to be added, removed, and versioned in a Rt 106 deployment without system administration of rt106-server. Rt 106 uses Consul and Registrator to support Service Discovery.