From Monolith on Heroku to Microservices on Kubernetes
Presentation at Container Days EU 2017 about Teleport's journey from running single monolithic application on Heroku to transforming into microservices based setup on Google Container Engine.
joined via Teleport acquisition. Previous experience before Teleport include spending over 9 years building and running distributed systems and platforms at Skype. MOVE Guides helps HR teams move their employees around the world, to any place, for any reason and for any period of time.
and active development started in May 2014. We launched MVP of Cost and Quality of Life Search Engine for San Francisco Bay Area already in September of the same year. Cost and Quality of Life coverage for hundreds of San Francisco Bay Area ZIP codes. Python application with separate “data pipeline”.
started with. Deployment can be as easy as git push heroku master but you should already think about CI. Adam Wiggins, Heroku’s co-founder, published the 12-factor app methodology listing the best practices for building modern cloud applications. Keep these in mind, adapt for your company and you are more likely to develop maintainable software.
set our course to build a global search engine for nomadic tech workers. We launched our mobile application in March 2015, mere six months after our Bay Area search product. Not built on top of the monolith; some of original functionality extracted to microservices. Heroku getting costly.
provide startups with the resources they need to get started on AWS. ECS was not available yet; Elastic Beanstalk not stable enough. ‘Dockerize’ everything but how to orchestrate? Enter Tutum.
the mobile application to the web. Teleport Cities launched in September 2015. Teleport experiences backed by 10+ different services and providing data to continuously increasing number of cities around the world. By early 2016 we applied for GCP for Startups program. Rolling out data pipeline on GKE using Jobs.
updates for Pods and ReplicaSets allowing to define the desired state. As Kubernetes 1.2 rolled out to GKE in the end of March 2016 we started migrating our applications over.
have standardized some of our core functionalities on Make. CI pipeline and Kubernets driven from within the service repository. Templating in Kubernetes definition files using envsubst; Evaluated files stored in separate deployment repository. Docker images built with pattern of <service- name>:<git-hash>-<build-number> Branch based service deployments via Ingress.
many of our services where we have “read-only” state. For example our public geographical API makes heavy use of PostGIS sidecart container which gets built by the CI pipeline. This allows us to scale app server 1:1 with database and not worry about database scaling. Another use case in use at Teleport is having sidecart container provide up-to- date OAuth credentials with behind the scenes refresh capability. Solving some of the SEO problems by mapping multiple separate frontend applications to the same domain using Ingress.
applications and around 40 services on Kubernetes; Ranging from data-pipeline components to tiny microservices to “monolith in a box” type of applications. Running on multiple clusters on GKE but making use of many AWS services as well. Teleport Cities supports over 260 cities all over the world. Providing free public API’s with information on Cities, Countries, Urban Areas, Timezones