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

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

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

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