SlideShare a Scribd company logo
>>> 5 must-have
Patterns for your web-scale
Microservices
@aliostad
Ali Kheyrollahi, ASOS
@aliostad
> stackoverflow
> £1.5 bln
global fashion
destination
> 35% every year
@aliostad
/// ASOS in numbers
2 0 1 6 T u r n O v e r → £15 bln
A c t i v e C u s t o m e r s → 12 M
N e w P r o d u c t s / w k → 4 k
U n i q u e V i s i t s / m o → 123 M
P a g e V i e w s / d a y → 95 M
P l a t f o r m T e a m s → 40
@aliostad
/// Microservices
Architecture
@aliostad
/// why microservices
> Scaling people not the solution
> Decentralising decision centres => Agility
> Frequent deployment => Agility
> Reduced complexity of each ms (Divide/Conquere) => Agility
> Overall solution complex but ...
@aliostad
/// anecdote
Often you can measure your success in
implementing Microservice Architecture not
be the number of services you build, but by
the number you decommission.
@aliostad
/// microservices vs soa
SOA Microservices
Main Goal Architectual Decoupling Agility
Audience Mainly Architecture Business (Everyone)
Set out to solve Architectural Coupling
Scaling People,
Frequent Deployment
Organisational
Structure Impact
Minimal Huge
Service Cardinality Usually up to a dozen >40 (Commonly >100)
When to do Always teams > ~5**
** Debateable. There are articles and discussions on this very topic
@aliostad
/// microservice challenges
> Very difficult to build a complete mental picture of solution
> When things go wrong, need to know where before why
> Potentially increased latency
> Performance outliers intractable to solve
> A complete mind-shift requiring a new operating model
@aliostad
/// probability distribution
Response Time
Probabilty
@aliostad
/// performance outliers
Microservice
A
Microservie
B
99th Percentile = 500ms 99th Percentile = 500ms
A B Total
<1s 99% 99% 98.01%
>500m 1% 99% 0.99%
>500m 99% 1% 0.99%
>1s 1% 1% 0.01%
@aliostad
/// ActivityId
Propagator
@aliostad
/// ActivityId
> Every customer request matters
> Every request is unique
> Every request creates a chain (or tree) of calls/events
> Activities are correlated
> You need an ActivityId (or CorrelationId) to link calls/events
@aliostad
/// ActivityId
Microservice
Id
IdId Thread Local Storage
Id
To Other APIs
Id
Event
@aliostad
/// ActivityId - HTTP
Request
GET /api/v2/foo HTTP/1.1
host: foo.com
activity-id: 96c5a1f106ce468ebcca8303ed7464bd
Response
200 OK
activity-id: 96c5a1f106ce468ebcca8303ed7464bd
@aliostad
/// Retry and
Timeout Policy
@aliostad
/// Failure
Microservice
A
1% chance of failure
X
Wait (back-off)
X
Wait (back-off longer)
Microservice
B
1% chance of failure
@aliostad
/// Preemptive Timeout
Microservice
A
X
retry
X
retry
Short timeout
Short timeout
Microservice
B
@aliostad
/// Timeout
C
B
A
A > B > C
A > B + C
@aliostad
/// Choosing a timeout?
Static => Based on Server SLO
Dynamic => 95th percentile
@aliostad
/// IO
Monitor
@aliostad
/// Blame Game
“If there is a single place where
you can play blame game,
instead of collective responsibility,
it is in
Microservices troubleshooting”
@aliostad
/// Did you say IO??
Microservice
DB
API
Cache
Measure...
every time your code
goes out of your process
@aliostad
/// Recording Methods
> Explicitly by calling record()
> Asking the library to record a closure
> Aspect-oriented
Java (spf4j)
private static final MeasurementRecorder recorder
= RecorderFactory.createScalableCountingRecorder(forWhat, unitOfMeasurement,
sampleTimeMillis);
…
recorder.record(measurement);
.NET (PerfIt)
var ins = new SimpleInstrumentor(new InstrumentationInfo()
{
Counters = CounterTypes.StandardCounters,
Description = "test",
InstanceName = "Test instance",
CategoryName = TestCategory
});
ins.Instrument(() => Thread.Sleep(100), "test...");
Java and .NET
@PerformanceMonitor(warnThresholdMillis=1, errorThresholdMillis=100, recorderSource =
RecorderSourceInstance.Rs5m.class)
[PerfItFilter(“PerfItTests", InstanceName = "Test")]
public string Get()
{
return Guid.NewGuid().ToString();
}
@aliostad
/// Publishing Methods
> Local file (various to logstash)
> TCP and HTTP (many, to zipkin, influxdb)
> UDP (statsd, collectd to graphite, logstash)
> Raising Kernel-level event (Windows ETW)
> Local communication (statsd)
@aliostad
/// Circuit-
Breaker
@aliostad
/// tri-state
> Closed traffic can flow normally
> Open traffic does not flow
> Half-open circuit breaker tests the waters again
Closed
Open
Half-open
Test
Failure
Wait timeout
@aliostad
/// Netflix Hysterix
RequestVolumeThreshold
ErrorThresholdPercentage
SleepWindowInMilliseconds
TimeInMilliseconds
NumBuckets
@aliostad
/// Fallback
> Custom: e.g. serve content from a local cache (status 206)
> Silent: return null/no-data/empty (status 200/204)
> Fail-fast: Customer experience is important (status 5xx)
@aliostad
/// Canary and
Health Endpoint
@aliostad
/// Health Endpoints
Ping returns a success code when invoked
Canary returns a connectivity status and
latency on the service and dependencies
“… none of them invoke any application code”
@aliostad
/// Ping
Request
GET /api/health HTTP/1.1
host: foo.com
Response
200 OK
Response
500 Server Error
@aliostad
/// Canary
Request
GET /api/canary HTTP/1.1
host: foo.com
Response
200 OK
{
[Nested Structure]
}
@aliostad
/// ChirpResult
{
"serviceName": "foo",
"latency": "00:00:00.0542172",
"statusCode": 200,
"isCritical": true
}
@aliostad
/// ChirpResult
@aliostad
/// ChirpResult - critical failure
API
NC
NC
C
200
200
500
500
@aliostad
/// ChirpResult - non-critical failure
API
NC
NC
C
500
200
200
200
@aliostad
/// AOP / Declarative (c#)
[AzureStorageCanary("Foo-AzureStorage-BarDatabaseServer", “config-key-for-cn“)]
[SqlCanary("SQL-BazActiveDatabase", null, typeof(SqlConnectionFactory))]
[CanaryEndpointCanary("Dependency-Api", “config-key-for-endpoint“)]
public class CanaryController : CanaryBaseController
{
… // some boilerplate code
}
@aliostad
/// Deep vs Shallow
API
API
“Deep”“Shallow”
/api/canary?deep=false
@aliostad
/// Wrap-up
> If you have more than ~5 teams, consider Microservices
> Logging/Monitoring/Alerting: single most important asset
> Use ActivityId Propagator to correlate (consider zipkin)
> Cloud is a jungleTM
. Without retry/timeout you won’t survive
> Monitor and measure all calls to external services (blame game)
> Protect your systems with circuit-breakers (and isolation)
> Canary helps you detect connectivity from customer view
@aliostad
Thomas Wood: Daisy Picture
Thomas Au: Thermometer Picture
Torbakhopper: Cables Picture
Dam Picture - Japan
Hsiung: Lights Picture
Health Endpoint in API Design

More Related Content

PDF
5 must-have patterns for your microservice - buildstuff
PDF
5 Anti-Patterns in Api Design - NDC London 2016
PDF
5 Anti-Patterns in API Design - DDD East Anglia 2015
PDF
Microservice Architecture at ASOS - DevSum 2017
PDF
Topic Modelling and APIs
PPT
Indoor Soil Gardening 101
PPTX
Updated nada alamaddine parental engagement research 2014
PPTX
Becoming a black swan - How to apply for a startup
5 must-have patterns for your microservice - buildstuff
5 Anti-Patterns in Api Design - NDC London 2016
5 Anti-Patterns in API Design - DDD East Anglia 2015
Microservice Architecture at ASOS - DevSum 2017
Topic Modelling and APIs
Indoor Soil Gardening 101
Updated nada alamaddine parental engagement research 2014
Becoming a black swan - How to apply for a startup

Similar to 5 must have patterns for your microservice (20)

PDF
5 must have patterns for your microservice - techorama
PPTX
Service Mesh CTO Forum (Draft 3)
PDF
Microservices - Hitchhiker's guide to cloud native applications
PDF
Intro to Microservices
PDF
Service Mesh Talk for CTO Forum
PDF
Microservices for Application Modernisation
PDF
[WSO2Con EU 2017] The Effects of Microservices on Corporate IT Strategy
PDF
Microservices architecture overview v3
PPTX
Azure architecture design patterns - proven solutions to common challenges
PDF
SACon 2019 - Surviving in a Microservices Environment
PPTX
Architecting Microservices in .Net
PDF
Microservices architecture: practical aspects
PDF
A Gentle introduction to microservices
PPTX
Cloud design principles
PDF
"Fintech inside of a SaaS powered by 2000+ Microservices", Volodymyr Malyk
PDF
The 36th Chamber of Shaolin - Improve Your Microservices Kung Fu in 36 Easy S...
PDF
Is Microservices SOA Done Right?
PDF
Surviving microservices
PPTX
Think Small To Go Big - Introduction To Microservices
PDF
Microservices for Architects - Atlanta 2018-03-28
5 must have patterns for your microservice - techorama
Service Mesh CTO Forum (Draft 3)
Microservices - Hitchhiker's guide to cloud native applications
Intro to Microservices
Service Mesh Talk for CTO Forum
Microservices for Application Modernisation
[WSO2Con EU 2017] The Effects of Microservices on Corporate IT Strategy
Microservices architecture overview v3
Azure architecture design patterns - proven solutions to common challenges
SACon 2019 - Surviving in a Microservices Environment
Architecting Microservices in .Net
Microservices architecture: practical aspects
A Gentle introduction to microservices
Cloud design principles
"Fintech inside of a SaaS powered by 2000+ Microservices", Volodymyr Malyk
The 36th Chamber of Shaolin - Improve Your Microservices Kung Fu in 36 Easy S...
Is Microservices SOA Done Right?
Surviving microservices
Think Small To Go Big - Introduction To Microservices
Microservices for Architects - Atlanta 2018-03-28
Ad

More from Ali Kheyrollahi (13)

PDF
Autonomous agents with deep reinforcement learning - Oredev 2018
PDF
Buildstuff - what do you need to know about RPC comeback
PDF
Deep learning for developers - oredev
PDF
Real time monitoring-alerting: storing 2Tb of logs a day in Elasticsearch
PDF
From Power Chord to the Power of Models - Oredev
PDF
From Hard Science to Baseless Opinions - Oredev
PDF
From hard science to baseless opinions
PDF
Microservice architecture at ASOS
PDF
Us Elections 2016 - Iran Elections 2005
PDF
From power chords to the power of models
PDF
5 Anti-Patterns in Api Design - buildstuff
PDF
5 Anti-Patterns in API Design
PDF
Http caching 101 and a bit of CacheCow
Autonomous agents with deep reinforcement learning - Oredev 2018
Buildstuff - what do you need to know about RPC comeback
Deep learning for developers - oredev
Real time monitoring-alerting: storing 2Tb of logs a day in Elasticsearch
From Power Chord to the Power of Models - Oredev
From Hard Science to Baseless Opinions - Oredev
From hard science to baseless opinions
Microservice architecture at ASOS
Us Elections 2016 - Iran Elections 2005
From power chords to the power of models
5 Anti-Patterns in Api Design - buildstuff
5 Anti-Patterns in API Design
Http caching 101 and a bit of CacheCow
Ad

Recently uploaded (20)

PPTX
Essential Infomation Tech presentation.pptx
PPTX
L1 - Introduction to python Backend.pptx
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
Nekopoi APK 2025 free lastest update
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
medical staffing services at VALiNTRY
PPTX
history of c programming in notes for students .pptx
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
Essential Infomation Tech presentation.pptx
L1 - Introduction to python Backend.pptx
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Nekopoi APK 2025 free lastest update
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Design an Analysis of Algorithms I-SECS-1021-03
Adobe Illustrator 28.6 Crack My Vision of Vector Design
medical staffing services at VALiNTRY
history of c programming in notes for students .pptx
Odoo POS Development Services by CandidRoot Solutions
Design an Analysis of Algorithms II-SECS-1021-03
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Operating system designcfffgfgggggggvggggggggg
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Navsoft: AI-Powered Business Solutions & Custom Software Development
2025 Textile ERP Trends: SAP, Odoo & Oracle
Which alternative to Crystal Reports is best for small or large businesses.pdf
How to Migrate SBCGlobal Email to Yahoo Easily

5 must have patterns for your microservice