Top Banner
Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance Ball, Senior Software Engineer, Red Hat
66

Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Jun 25, 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: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

MicroserviceResiliency

FromFronttoBackEnd

QConSãoPaulo,2017

LanceBall,SeniorSoftwareEngineer,RedHat

Page 2: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

WhoamI?

SeniorSoftwareEngineer,RedHat

Page 3: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

WhoamI?

SeniorSoftwareEngineer,RedHat

Page 4: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

WhoamI?

SeniorSoftwareEngineer,RedHat

Page 5: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

WhoamI?

SeniorSoftwareEngineer,RedHat

Page 6: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

µService

“ softwareapplicationsassuitesofindependentlydeployableservices

https://martinfowler.com/articles/microservices.html

Page 7: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

µService

“ softwareapplicationsassuitesofindependentlydeployableservices

https://martinfowler.com/articles/microservices.html

Butwhatdoesthismean?!

Page 8: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

What'sinanapplication?

Page 9: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Stuff

Page 10: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Monolithicapplication

Page 11: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Scalingamonolith

Page 12: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Microserviceapplication

Page 13: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Scaledmicroservices

Page 14: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Wait...isn'tthistheUXtrack?

Page 15: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

ServiceLifecycle

Page 16: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

ServiceLifecycle

Clientmakesarequest

Page 17: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

ServiceLifecycle

ClientmakesarequestServerprovidesaresponse

Page 18: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

ServiceLifecycle

ClientmakesarequestServerprovidesaresponseOftenusingHTTPtransport

Page 19: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

ServiceLifecycle

ClientmakesarequestServerprovidesaresponseOftenusingHTTPtransportOftenwithJSONdataformat

Page 20: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

IntheBrowser

Page 21: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

IntheBrowser

XMLHttpRequest

Page 22: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

IntheBrowser

XMLHttpRequestJQuery

Page 23: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

IntheBrowser

XMLHttpRequestJQueryAJAX

Page 24: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

MicroserviceRequests

(simplified)

Page 25: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

OperationalComplexity

Page 26: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

MicroservicesVisualized

https://twitter.com/ThePracticalDev/status/845285541528719360

Page 27: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Problems

Page 28: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Problems

Timeouts

Page 29: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Problems

Timeouts

Networksaturation

Page 30: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Problems

Timeouts

Networksaturation

Programmererror

Page 31: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Problems

Timeouts

Networksaturation

Programmererror

Diskfailure

Page 32: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Problems

Timeouts

Networksaturation

Programmererror

Diskfailure

Transitivedependencies

Page 33: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Cascadingfailures

Page 34: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance
Page 35: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Howtodealwithallthis

Page 36: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Howtodealwithallthis

Limitsinglepointsoffailure

Page 37: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Howtodealwithallthis

Limitsinglepointsoffailure

Shedloadwhenpossible

Page 38: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Howtodealwithallthis

Limitsinglepointsoffailure

Shedloadwhenpossible

Providefallbackbehavior

Page 39: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Howtodealwithallthis

Limitsinglepointsoffailure

Shedloadwhenpossible

Providefallbackbehavior

Optimizefailurediscovery

Page 40: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreaker

Page 41: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreaker

Callsthatcouldfailarewrapped

Page 42: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreaker

Callsthatcouldfailarewrapped

Circuitopensatafailurethreshold

Page 43: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreaker

Callsthatcouldfailarewrapped

Circuitopensatafailurethreshold

Furthercallsshortcircuitforawhile

Page 44: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreaker

Callsthatcouldfailarewrapped

Circuitopensatafailurethreshold

Furthercallsshortcircuitforawhile

Later,circuittriesagainandtripsimmediatelyifthereisfailure

Page 45: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance
Page 46: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitState

Page 47: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Asyncoperationthatcouldfail

//UseJQuerytogetcartinfo$.get('http://mystore.com/cart').then((json)=>{//updatetheUIwithJSONdata}).catch((e)=>{//oopssomethingwentwrongconsole.error(e);})

Page 48: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Asyncoperationthatcouldfail

//UseJQuerytogetcartinfo$.get('http://mystore.com/cart').then((json)=>{//updatetheUIwithJSONdata}).catch((e)=>{//oopssomethingwentwrongconsole.error(e);})

Shedloadwhenpossible

Page 49: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Aside-Promsies

//UseJQuerytogetcartinfo$.get('http://mystore.com/cart').then((json)=>{//updatetheUIwithJSONdata}).catch((e)=>{//oopssomethingwentwrongconsole.error(e);})

Page 50: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreakerExample

//UseJQuery'sajaxwrapperandcircuitbreaker//defaultsforfailurethreshold,timing,etc.constcircuit=circuitBreaker($.get);

circuit.fire('http://nodejs.org/dist/index.json').then((json)=>{//updatetheUIwithJSONdata})//onfailure,justlogtoconsole.catch(console.error);

Page 51: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreakerExample

//UseJQuery'sajaxwrapperandcircuitbreaker//defaultsforfailurethreshold,timing,etc.constcircuit=circuitBreaker($.get);

circuit.fire('http://nodejs.org/dist/index.json').then((json)=>{//updatetheUIwithJSONdata})//onfailure,justlogtoconsole.catch(console.error);

Page 52: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreakerExample

//UseJQuery'sajaxwrapperandcircuitbreaker//defaultsforfailurethreshold,timing,etc.constcircuit=circuitBreaker($.get);

circuit.fire('http://nodejs.org/dist/index.json').then((json)=>{//updatetheUIwithJSONdata})//onfailure,justlogtoconsole.catch(console.error);

Page 53: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Promisesvs.Callbacks

//WrapNode.js'fs.readFileasapromise-returningfunctionconstreadFile=circuitBreaker.promisify(fs.readFile);

constcircuit=circuitBreaker(readFile,options);

circuit.fire('./package.json','utf-8').then(console.log).catch(console.error);

Page 54: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreakerFallback

Providesdefaultbehaviorincaseoferror

circuit.fallback((file)=>`Sorry,Ican'tread${file}`);

//Fallbackfunctionisstillasuccesscasecircuit.fire('./package.jsob').then((data)=>console.log(`package.json:\n${data}`)).catch((err)=>console.error(`ERR:${err}`));

Page 55: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

CircuitBreakerFallback

Providesdefaultbehaviorincaseoferror

circuit.fallback((file)=>`Sorry,Ican'tread${file}`);

//Fallbackfunctionisstillasuccesscasecircuit.fire('./package.jsob').then((data)=>console.log(`package.json:\n${data}`)).catch((err)=>console.error(`ERR:${err}`));

Page 56: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Caching

Alwaysreturnsthesamevalue

constnow=circuitBreaker(Date,{cache:true});

Page 57: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Caching

Alwaysreturnsthesamevalue

constnow=circuitBreaker(Date,{cache:true});

circuit.fire().then(console.log);//MonApr10201712:10:26GMT-0400(EDT)circuit.fire().then(console.log);//MonApr10201712:10:26GMT-0400(EDT)circuit.fire().then(console.log);//MonApr10201712:10:26GMT-0400(EDT)

Page 58: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Whenisthisuseful?

Frequenthits,infrequentchangeE.g.username

constusername=circuitBreaker(fetchUsername,{cache:true});

//periodicallyclearthecachesetInterval(_=>username.clearCache(),5000);

Page 59: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Events

Circuitbreakersareeventemitters

//UpdatetheUIspecificallyfortimeouterrorscircuit.on('timeout',()=>$(element).prepend(mkNode(`${route}istakingtoolongtorespond.`)));

Page 60: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

`fire``reject``timeout``success``failure`

`open``close``halfOpen``fallback``snapshot`

Events

Circuitbreakersareeventemitters

//UpdatetheUIspecificallyfortimeouterrorscircuit.on('timeout',()=>$(element).prepend(mkNode(`${route}istakingtoolongtorespond.`)));

Page 61: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Status

//createa10secwindowwith10bucketsof1secconstcircuit=circuitBreaker(asyncFunc,{rollingCountTimeout:10000,rollingCountBuckets:10});

//statusiscalculatedeverytimestatusisaccessedconststatus=circuit.status

//printtheentirestatisticalwindowconsole.log(status.window);

//printtherollingstatsconsole.log(status.stats);

Page 62: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Status

//createa10secwindowwith10bucketsof1secconstcircuit=circuitBreaker(asyncFunc,{rollingCountTimeout:10000,rollingCountBuckets:10});

//statusiscalculatedeverytimestatusisaccessedconststatus=circuit.status

//printtheentirestatisticalwindowconsole.log(status.window);

//printtherollingstatsconsole.log(status.stats);

Page 63: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Status

//printtherollingstatsconsole.log(status.stats);

//{failures:3,//fallbacks:4,//successes:44,//rejects:4,//fires:48,//timeouts:1,//cacheHits:0,//cacheMisses:0}

Page 64: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Dashboard

http://techblog.netflix.com/2012/12/hystrix-dashboard-and-turbine.html

Page 65: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Demo

Page 66: Microservice Resiliency - qconsp.com › sp2017 › system › files › presentation-slides › lan… · Microservice Resiliency From Front to Back End QCon São Paulo, 2017 Lance

Obrigado&Questions

http://lanceball.com/qcon-saopaulo-2017/https://github.com/lance/qcon-saopaulo-2017Twitter-@lanceballGitHub-@lance