Story #13497

Updated by Tom Clegg almost 2 years ago

h2. Background

This is the first an early step toward retiring the Rails API server (#9053). It unblocks:
* implementing new APIs in Go (without increasing the discovery/routing burden in every client/SDK)
* porting individual APIs to Go (without having to update all clients/SDKs each time, or proxy requests through Rails)
* federation routing (#13493)

Related goal:
* refactor existing Go services as packages so they can be used in unit tests

h2. Objective

This initial version changes the way requests are routed inside an API server node.
* Before: client → Nginx → arvados-api-server
* After: client → Nginx → arvados-controller arvados-router → arvados-api-server

This version does *not* add or change any new API endpoints, port any existing API endpoints to Go, or implement load balancing or service discovery. For example:
* Request and response headers are passed through blindly
* All requests are proxied to one single arvados-api-server (Rails) service at the configured address and port (typically localhost:8000)

h2. Requirements

Load configuration from the cluster configuration document from #12260. There will be no arvados-controller arvados-router config file.

Back