Top Banner
Building Fault Tolerant Micro Services Kristoffer Erlandsson [email protected] @kerlandsson
112

Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson [email protected] @kerlandsson. Building Fault Tolerant

Jun 16, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Building Fault Tolerant Micro Services

Kristoffer [email protected]

@kerlandsson

Page 2: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 3: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 4: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Building Fault Tolerant Micro ServicesWhy?

Failure modes

Stability patterns

Monitoring guidelines

Page 5: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Kristoffer Erlandsson

Page 6: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

250+ services

1000+ service instances (JVMs)

Largest actor on the Stockholm Stock Exchange

Page 7: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Acme Books

Page 8: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Database

WebApplication

Page 9: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Database

WebApplication

Page 10: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Database

WebApplication

Page 11: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

DatabaseWeb

Application

Page 12: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

DatabaseWeb

Application

Page 13: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

DatabaseWeb

Application

Page 14: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 15: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Products

Payments

WebApplication

Special Offers

Page 16: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 17: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Products

Payments

Special Offers

WebApplication

Page 18: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Products

Payments

Special Offers

WebApplication

Page 19: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Products

Payments

Special Offers

WebApplication

DatabasePurchaseHistory

Page 20: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Cascading Failure

Products

Payments

Special Offers

WebApplication

DatabasePurchaseHistory

Page 21: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

How about increasing availability?

Page 22: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

0.99999

5 minutes per year

Page 23: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

1000 service

instances?

Page 24: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

0.999991000

Page 25: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

0.999991000 ≈ 0.99

87 hours per year

Page 26: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Design for Failure

Page 27: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Page 28: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Thread pool

Page 29: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Thread pool

Page 30: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Thread pool

Page 31: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Special Offers

Products

Payments

Page 32: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Thread pool

Products

Payments

Page 33: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Thread pool

Products

Payments

Page 34: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

URL url = new URL("http://acme-books.com/special-offers");URLConnection connection = url.openConnection();connection.connect();InputStream inputStream = connection.getInputStream();// Read response from stream

Page 35: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Use

TimeoutsPrevents blocked threads

Page 36: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

URL url = new URL("http://acme-books.com/special-offers");URLConnection connection = url.openConnection();connection.setConnectTimeout(100);connection.setReadTimeout(500);connection.connect();InputStream inputStream = connection.getInputStream();// Read response from stream

Page 37: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Set Aggresive Timeouts

Page 38: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

DatabasePurchaseHistory

Timeouts here?

Page 39: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

DatabasePurchaseHistory

Here too!

Page 40: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 41: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Terrible response times

Awful throughput

Page 42: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Special Offers

Timeout

Page 43: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Special Offers

Manytimeouts

Page 44: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Special Offers

Throughput lower than number of

incoming requests

Manytimeouts

Page 45: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Special Offers

Throughput lower than number of

incoming requests

Manytimeouts

Page 46: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Special Offers

Throughput lower than number of

incoming requests

Growing queue!

Manytimeouts

Page 47: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Frequently called service

Timeouts are not enough

Page 48: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Circuit

BreakersCalls to broken services fail fast

Offloads broken services

Page 49: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 50: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Page 51: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Timeout

Web Application

Web Application

Special Offers

Page 52: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Error

Open state

Special Offers

Web Application

Page 53: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Single call

Half open state

Special Offers

Web Application

Error

Page 54: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Closed state

Special Offers

Web Application

Page 55: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Timeouts over threshold

Unhandled errors over threshold

Known irrecoverable error occurs

Page 56: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 57: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Handle service call errors

Page 58: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

try {return specialOffers.getOffers();

} catch (Exception e) {return Offers.emptyOffers();

}

Page 59: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 60: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Terrible response times

Awful throughput

Again?!?

Page 61: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Special Offers

Slowresponse

Page 62: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Special Offers

Slowresponses

Page 63: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Thread pool

Special Offers

Throughput lower than number of incoming

requests (again)

Slowresponses

Page 64: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Response time < timeout

Timeouts and circuit breakers are not enough

Page 65: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

BulkheadsIsolates components

Prevents cascading

Page 66: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Limit number of concurrent calls

Upper bound on numberof waiting threads

Page 67: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Thread pool

Bulkhead(size=2)

Page 68: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Thread pool

Bulkhead(size=2)

Page 69: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Thread pool

Error

Error

Bulkhead(size=2)

Page 70: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Special Offers

Web Application

Thread pool

Error

Error

Bulkhead(size=2)

- Fast page load- No special offers

- Slow page load- Including special

offers

Page 71: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Products

Payments

WebApplication

Special Offers

PurchaseHistory

One bulkhead per service

Page 72: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Upper bound on number ofwaiting threads

Protects very well againstcascading failure …

Page 73: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

… if bulkhead sizes are …

… significantly smaller thanrequest pool size

Page 74: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Peak load when healthy

40 requests per second (rps)

0.1 seconds response time

Page 75: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Suitable bulkhead size

40 rps x 0.1 seconds = 4

+ breathing room = 7

Page 76: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Bonus: protects services from overload

Page 77: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Semaphore bulkhead = new Semaphore(2);

Offers protectedGetOffers() {if (bulkhead.tryAcquire(0, TimeUnit.SECONDS)) {

try {return specialOffers.getOffers();

} finally {bulkhead.release();

}} else {

throw new RejectedByBulkheadException();}

}

Page 78: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 79: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Many threads are waiting

Few available threads - low throughput

All service calls are rejected!

Page 80: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Products

Payments

WebApplication

Special Offers

Page 81: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Products

Payments

WebApplication

Special Offers

Page 82: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Products

Payments

WebApplication

Special Offers

Where have ourtimeouts gone?!?

Page 83: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Broken Client Library

More protection required

Page 84: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Thread Pool HandoversCalling threads can always walk away

Generic timeouts

Page 85: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Requestthreadpool

Service threadpool

Service

Page 86: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Requestthreadpool

Service threadpool

Service

Page 87: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Requestthreadpool

Service threadpool

Service

Page 88: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Requestthreadpool

Service threadpool

Service

Page 89: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Requestthreadpool

Service threadpool

Service

Page 90: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Requestthreadpool

Service threadpool

ServiceTimeout

Page 91: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Error

Requestthreadpool

Service threadpool

Service

Page 92: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web Application

Error

Requestthreadpool

Service threadpool

Service call timeouts still required

Service

Page 93: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Web ApplicationBulkhead includedRequest

threadpool

Service threadpool

Service

Error

Page 94: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

ExecutorService executor = new ThreadPoolExecutor(3, 3, 1,TimeUnit.MINUTES, new SynchronousQueue<>());

Offers protectedGetOffers() {try {

Future<Offers> future =executor.submit(specialOffers::getOffers);

return future.get(1, TimeUnit.SECONDS);} catch (RejectedExecutionException e) {

throw new RejectedByBulkheadException();} catch (TimeoutException e) {

throw new ServiceCallTimeoutException();}

}

Page 95: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Thread pool handovers are verypowerful!

What about performance?

Page 96: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 97: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Monitor Service Calls

Page 98: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Timeout rate

Rejected call rate

Short circuit rate

Failure/success rate

Response times

Page 99: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 100: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Understand problems before changing

configuration

Page 101: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 102: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 103: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

”All this seems like a lot of work!”

Page 104: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 105: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

class GetOffersCommand extends HystrixCommand<Offers> {

public GetOffersCommand() {super(HystrixCommandGroupKey

.Factory.asKey("SpecialOffers"));}

@Overrideprotected Offers run() throws Exception {

return specialOffers.getOffers();}

}

public Offers getOffers() {return new GetOffersCommand().execute();

}

Page 106: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

class GetOffersCommand extends HystrixCommand<Offers> {

// ...

@Overrideprotected Offers getFallback() {

return Offers.emptyOffers();}

}

Page 107: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 108: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant
Page 109: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Design for failure

Use timeouts

Circuit Breakers

Bulkheads

Monitor service calls

Page 110: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

https://github.com/Netflix/Hystrix

Page 111: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Image Attributions

• Polycelis felina" by Eduard Solà - Own work. Licensed under CC BY-SA 3.0 via Commons -https://commons.wikimedia.org/wiki/File:Polycelis_felina.jpg#/media/File:Polycelis_felina.jpg

• "Old book bindings" by Tom Murphy VII - Own work. Licensed under CC BY-SA 3.0 via Commons -https://commons.wikimedia.org/wiki/File:Old_book_bindings.jpg#/media/File:Old_book_bindings.jpg

• "Cute Snail" by gniyuhs - Own work. Licensed under CC BY-SA 3.0 via deviantart - http://gniyuhs.deviantart.com/art/Cute-Snail-278597934

• ”Cash” by 401(K) 2012 – Own work. Licensed under CC BY-SA 2.0 via Flickr -https://www.flickr.com/photos/68751915@N05/6355816649

• "Circuit breakers at substation near Denver International Airport, Colorado" by Greg Goebel from Loveland CO, USA -Yipws_2bUploaded by PDTillman. Licensed under CC BY-SA 2.0 via Wikimedia Commons -https://commons.wikimedia.org/wiki/File:Circuit_breakers_at_substation_near_Denver_International_Airport,_Colorado.jpg#/media/File:Circuit_breakers_at_substation_near_Denver_International_Airport,_Colorado.jpg

• ”The control room of the nuclear ship NS Savannah, Baltimore, Maryland, USA” - Own work. Licensed under CC BY-SA 3.0 via Commons -https://en.wikipedia.org/wiki/File:NS_Savannah_control_room_MD1.jpg#/media/File:NS_Savannah_control_room_MD1.jpg

Page 112: Building Fault Tolerant Micro Services - Jfokus€¦ · Building Fault Tolerant Micro Services Kristoffer Erlandsson kristoffer.erlandsson@avanza.se @kerlandsson. Building Fault Tolerant

Thank you! - Questions?

Kristoffer [email protected]

@kerlandsson