reliability and resilience

64
Thank you to our Sponsors Media Sponsor:

Upload: donald-belcham

Post on 29-Jun-2015

129 views

Category:

Software


0 download

DESCRIPTION

How to add reliability and resilience into your code

TRANSCRIPT

Page 1: Reliability and Resilience

Thank you to our Sponsors

Media Sponsor:

Page 2: Reliability and Resilience

SystemReliability and

Resilienceand stuff

Page 3: Reliability and Resilience

tuple

Page 4: Reliability and Resilience

//Initialize customer and invoiceInitialize(customer, invoice);

Page 5: Reliability and Resilience

public void Initialize(Customer customer, Invoice

invoice){

customer.Name = “asdf”;invoice.Date = DateTime.Now;

}

Page 6: Reliability and Resilience

Initialize(customer, invoice);//did something happen to customer// and/or invoice?

Page 7: Reliability and Resilience

customer.Name =

InitNameFrom(customer, invoice);invoice.Date =

InitDateFrom(customer, invoice);

Page 8: Reliability and Resilience

customer.Name =

GetNameFrom(customer, invoice);invoice.Date =

GetDateFrom(customer, invoice);

Page 9: Reliability and Resilience

var results = Initialize(customer,

invoice);

customer.Name = results.Item1;invoice.Date = results.Item2;

Page 10: Reliability and Resilience

public tuple<string, DateTime>Initialize(customer,

invoice){

return new Tuple<string, DateTime>

(“asdf”, DateTime.Now);}

Page 11: Reliability and Resilience

public static bool TryParse(string s, out DateTime result)

or

public static tuple<bool, DateTime?>

TryParse(string s)

Page 12: Reliability and Resilience

tuple• Avoid side effects• Avoid out parameters•multiple values without a specific type

Page 13: Reliability and Resilience

null object

Page 14: Reliability and Resilience

private ILogger _logger;public MyClass(ILogger logger) {

_logger = logger;}

if (_logger != null) {_logger.Debug(

“it worked on my machine!”);}

Page 15: Reliability and Resilience

null checks for everyone!

Page 16: Reliability and Resilience

forget one and…

Page 17: Reliability and Resilience

public class NullLogger : ILogger {

public void Debug(string text) {

//do sweet nothing}

}

Page 18: Reliability and Resilience

private ILogger _logger = new NullLogger();

public MyClass(ILogger logger) {_logger = logger;

}

_logger.Debug(“it worked on my machine!”);

Page 19: Reliability and Resilience

null object• Can eliminate null checks• Simple to implement

Page 20: Reliability and Resilience

Circuit Breaker

Page 21: Reliability and Resilience
Page 22: Reliability and Resilience

Retry

Page 23: Reliability and Resilience

You

r A

pp

licati

on O

ut o

f Pro

cess

Dep

en

dency

N times

Page 24: Reliability and Resilience

Ou

t of P

roce

ss D

ep

en

dency

N times*

Y clients

Page 25: Reliability and Resilience

= Denial of Service Attack

Page 26: Reliability and Resilience

Limit the # of retries

Page 27: Reliability and Resilience

N * Ybecomes

5 * Y

Page 28: Reliability and Resilience

Y isstill a

problem

Page 29: Reliability and Resilience
Page 30: Reliability and Resilience

Circuit Breaker

Page 31: Reliability and Resilience
Page 32: Reliability and Resilience

State Machine

On :: Off

Page 33: Reliability and Resilience

On Offwhen not healthy

Page 34: Reliability and Resilience

Off Onmanually

Page 35: Reliability and Resilience

Get to softwarebefore we ask you to dance

Page 36: Reliability and Resilience

Healthyor

Unhealthy

Ou

t of P

roce

ss D

ep

en

dency

Page 37: Reliability and Resilience

State is independent of requestor

Ou

t of P

roce

ss D

ep

en

dency

Page 38: Reliability and Resilience

You

r A

pp

licati

on

Has many independent external dependencies

Page 39: Reliability and Resilience

You

r A

pp

licati

on

Can throttle itself

Page 40: Reliability and Resilience

You

r A

pp

licati

on

Has a wait threshold

Page 41: Reliability and Resilience

Your Application

External Dependency

Circuit Breaker

Threshold = 2Pause = 10msTimeout = 30sState = ClosedRequest

Request

Failure (i.e. HTTP 500)Failure Count = 1Pause 10ms

Request

Failure (i.e. HTTP 500)Failure Count = 2State = Open

OperationFailedException

Page 42: Reliability and Resilience

Threshold = 2Pause = 10msTimeout = 30sState = OpenRequest

30s has not passed

CircuitBreakerOpenException

Request

30s has not passed

CircuitBreakerOpenException

System can try to

become healthyfor 30s

Your Application

External Dependency

Circuit Breaker

Page 43: Reliability and Resilience

Threshold = 2Pause = 10msTimeout = 30sState = ½ OpenRequest

Request

Failure (i.e. HTTP 500)

Failure Count = 2State = Open

OperationFailedException

30s has passed

Your Application

External Dependency

Circuit Breaker

Page 44: Reliability and Resilience

Threshold = 2Pause = 10msTimeout = 30sState = ½ OpenRequest

Request

Failure Count = 0State = Closed

Response

30s has passed

Response

Your Application

External Dependency

Circuit Breaker

Page 45: Reliability and Resilience

ClosedOpen

½ Open

Page 46: Reliability and Resilience

½ Open is like a

manual reset

Page 47: Reliability and Resilience

PauseTimeout

Page 48: Reliability and Resilience

Pausebetween calls

in the loop

Page 49: Reliability and Resilience

Timeoutbefore you

can call again

Page 50: Reliability and Resilience

Exceptions

Page 51: Reliability and Resilience

OperationFailed:

AggregateException

Page 52: Reliability and Resilience

CircuitBreakerOpen:

ApplicationException

Page 53: Reliability and Resilience

Don’t Loose Exception Info

Page 54: Reliability and Resilience

Always use InnerException(s)

Page 55: Reliability and Resilience

Threshold = 3State = ClosedRequest

Request

Failure (i.e. HTTP 500)Request

Failure (i.e. HTTP 500)Failure Count = 2

Failure Count = 0State = Closed

Response

Response

Request?

Your Application

External Dependency

Circuit Breaker

Failure Count = 1

Page 56: Reliability and Resilience

SegregateDependencies

Page 57: Reliability and Resilience

circuitBreaker(“database”)

circuitBreaker(“weatherservice”)

Page 58: Reliability and Resilience

Dependency type, endpoint svc,

endpoint

Page 59: Reliability and Resilience

Where?

Page 60: Reliability and Resilience

You

r A

pp

licati

on O

ut o

f Pro

cess

Dep

en

dency

Cir

cuit

Bre

ake

r

Pro

xy

Page 61: Reliability and Resilience

Watch forInception

Page 62: Reliability and Resilience

You

r A

pp

licati

on W

eb

Serv

iceC

ircu

it B

reake

r

Cir

cuit

Bre

ake

r

Pro

xy

Data

base

Reposi

tory

Page 63: Reliability and Resilience

circuit breaker• retry looping• slow down attempts• good neighbour

Page 64: Reliability and Resilience

Thank you

Donald Belcham@dbelcham

[email protected]