ykumar6
Joined 15 years ago
Joined 15 years ago
Scaling out an api server is not resilient enough, and there needs to be a queue-based system fronting your web hooks so they aren't dropped
Runnable let's you have end-to-end (full-stack) environments with every branch. The minute a branch comes up, you have an environment. This includes a clone of your database
We don't have access to the same APIs with just a personal accout
One of our key lessons is being able to dispose and rebuild your infrastructure on a daily or weekly basis so leaks don't destroy your environment.
We recycle customer environments in Runnable, on a regular basis and its completely transparent to users
1) You don't have to re-configure your environment variables and 3rd party APIs for each branch on Runnable. Every branch runs in the same sandboxed environment with the same env variables and 3rd party services. With the help of an HTTP proxy and a dynamic DNS server, we can route traffic to the right set of containers for the branch you want to test.
2) Runnable is built on Docker, which means all your configuration files and the way your containers are run is non-proprietary
3) You can connect arbitrary branches with each other for testing. So if you have a feature branch on a web server, and a feature branch on an api server - both can be connected easily through our web interface. This allows for cross-branch testing. Underneath the hood, we swap the IP address to connect the right containers together.
4) Our environments spin up much quicker than Heroku's. We build and run on the same machines so there are no network transfers and we can utilize build cache better.
5) Databases clone instantaneously with Runable, versus waiting minutes (depending on size). This because our build system applies Copy-on-Write to database containers
6) You can run end-to-end integration tests as your code is being pushed to a branch. Heroku only creates an environment when you're done coding and a pull request is open
So it becomes very easy to test schema changes and migrations with this approach