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:
-
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.
-
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.
-
(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.
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:
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.
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.
(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.
I look forward to hearing feedback regarding these proposed changes, and am greatly open to suggestions.