3. Back in 2011 we started simple
We quickly found out that supporting monoliths is hard:
• Hard to maintain the codebase
• Hard to build new features
• Hard to scale the dev teams
Failure to deliver business value
Frontend Backend
MySQL
6. At present we have
• Microservices ecosystem (99.9% written in Go)
• Designed specifically for the cloud – different building blocks and
components will constantly be in flux, broken or unavailable
• 200+ services in production
14. So we decided to give every developer an environment
ENV ENV
ENV
15. Environment Service
SIE MIE
Infrastructure
Core Platform
Single server on
AWS
Hundreds of servers
/ single AWS region
CloudFormation
Orchestration layer
On demand environments
Single Instance Environment Multi instance environment
16. Environment Service
SIE MIE
Infrastructure
Core Platform
Single server on
AWS
Hundreds of servers
/ single AWS region
Release Service
ANY ENV
(PROD)
Services
Config
*Data
clone
ETA: ~12 min ETA: ~40 min
CloudFormation
Orchestration layer
On demand environments
Single Instance Environment Multi instance environment
34. Introducing label based routing
• A routing abstraction that allows you
to “group” services and isolate the
traffic between them
• Completely transparent for the
service itself
• Only traffic that is specifically tagged
for this group will ever hit a service
belonging to the group
• All traffic is contained within the
group if there is a recipient service
available there
35. service.foo
service.foo
Introducing label based routing
• Labels are forwarded with the request
context
• Even if a service needs to call
another service outside the group,
any further requests on the same call
chain will still “stick” to existing group
members
37. What is this ?
• A way to flexibly curate traffic and test complex workflows in production
• A way to let developers deploy services simultaneously and still achieve
isolation
• A/B testing on steroids
• A very powerful tool when you get something wrong
• Many more use cases (multitenant platforms…)
38. What this is NOT…
• A tool that lets you tightly couple services (a.k.a. “distributed monoliths”)
and get away with it)
• A tool for releasing backwards incompatible changes
• A replacement for feature flags*