Skip to content

Automate deployment and simplify infrastructure #913

Description

@lucassz

Per a discussion with @hdoupe, I plan to work on the automation of the deployment that's currently done manually for both the webapp and backend worker nodes. Here are the changes on which I am planning, in order of least to most different from the current setup:

  1. Automate the deployment of Heroku and AWS instances through Terraform, a tool for declaratively describing infrastructure through code and orchestrating its deployment. This deployment, which is currently done manually by Hank, would thus be described in an open-source way, possibly in a separate repo.

  2. Move the backend worker containers from being self-managed Docker containers on EC2 instances to Amazon Elastic Container Service (ECS) + AWS Fargate, allowing for containers to be directly managed by AWS.

  3. (This one is a bit farther off.) Use an Amazon Elastic Load Balancer (ELB) of the Application Load Balancer variety in order to distribute compute jobs to different worker nodes.

    • This would potentially replace much of the functionality in compute.py, as the webapp would no longer have to keep track of a list of worker nodes and distribute the load among them. Instead, it would query a single address that would remain constant, and receive a cookie allowing it to ping the worker assigned to each job, without having to worry about which worker it is.
    • This would make it easier to eventually expose the backend as an API accessible to end-users, as the load balancer can do things like rate-limiting.

I look forward to hearing feedback regarding these proposed changes, and am greatly open to suggestions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions