Opportunities to Improve System Reliability and Resilience by Donald Belcham
-
Upload
net-conf-uy -
Category
Technology
-
view
79 -
download
1
description
Transcript of Opportunities to Improve System Reliability and Resilience by Donald Belcham
![Page 1: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/1.jpg)
SystemReliability and Resilience
and stuff
![Page 2: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/2.jpg)
Some things need to be cleared up first
![Page 3: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/3.jpg)
http://en.wikipedia.org/wiki/Vedette_(cabaret)
![Page 4: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/4.jpg)
tuple
![Page 5: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/5.jpg)
//Initialize customer and invoiceInitialize(customer, invoice);
![Page 6: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/6.jpg)
public void Initialize(Customer customer, Invoice
invoice){
customer.Name = “asdf”;invoice.Date = DateTime.Now;
}
![Page 7: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/7.jpg)
Initialize(customer, invoice);//did something happen to customer// and/or invoice?
![Page 8: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/8.jpg)
customer.Name =InitNameFrom(customer,
invoice);invoice.Date =
InitDateFrom(customer, invoice);
![Page 9: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/9.jpg)
customer.Name =GetNameFrom(customer,
invoice);invoice.Date =
GetDateFrom(customer, invoice);
![Page 10: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/10.jpg)
var results = Initialize(customer, invoice);
customer.Name = results.Item1;invoice.Date = results.Item2;
![Page 11: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/11.jpg)
public tuple<string, DateTime>Initialize(customer,
invoice){
return new Tuple<string, DateTime>(“asdf”, DateTime.Now);
}
![Page 12: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/12.jpg)
public static bool TryParse(string s, out DateTime result)
or
public static tuple<bool, DateTime?> TryParse(string s)
![Page 13: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/13.jpg)
tuple• Avoid side effects
• Avoid out parameters
• multiple values without a specific type
![Page 14: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/14.jpg)
null object
![Page 15: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/15.jpg)
private ILogger _logger;public MyClass(ILogger logger) {
_logger = logger;}
…
if (_logger != null) {_logger.Debug(
“it worked on my machine!”);}
![Page 16: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/16.jpg)
null checks for everyone!
![Page 17: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/17.jpg)
forget one and…
![Page 18: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/18.jpg)
public class NullLogger : ILogger {public void Debug(string text) {
//do sweet nothing}
}
![Page 19: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/19.jpg)
private ILogger _logger = new NullLogger();
public MyClass(ILogger logger) {_logger = logger;
}
…
_logger.Debug(“it worked on my machine!”);
![Page 20: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/20.jpg)
null object• Can eliminate null checks
• Simple to implement
![Page 21: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/21.jpg)
Circuit Breaker
![Page 22: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/22.jpg)
![Page 23: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/23.jpg)
Retry
![Page 24: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/24.jpg)
Your
Applicati
on O
ut o
f Pro
cess
Dependency
N times
![Page 25: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/25.jpg)
Out o
f Pro
cess
Dependency
N times
*
Y clients
![Page 26: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/26.jpg)
= Denial of
Service Attack
![Page 27: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/27.jpg)
Limit the # of retries
![Page 28: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/28.jpg)
N * Ybecomes
5 * Y
![Page 29: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/29.jpg)
Y isstill a
problem
![Page 30: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/30.jpg)
![Page 31: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/31.jpg)
Circuit Breaker
![Page 32: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/32.jpg)
![Page 33: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/33.jpg)
State Machine
On :: Off
![Page 34: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/34.jpg)
On Offwhen not healthy
![Page 35: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/35.jpg)
Off Onmanually
![Page 36: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/36.jpg)
Get to softwarebefore we ask you
to dance
![Page 37: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/37.jpg)
Healthyor
Unhealthy
Out o
f Pro
cess
Dependency
![Page 38: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/38.jpg)
State is independent of
requestor
Out o
f Pro
cess
Dependency
![Page 39: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/39.jpg)
Your
Applicati
on
Has many independent external dependencies
![Page 40: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/40.jpg)
Your
Applicati
on
Can throttle itself
![Page 41: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/41.jpg)
Your
Applicati
on
Has a wait threshold
![Page 42: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/42.jpg)
Your ApplicationExternal
DependencyCircuit 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 43: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/43.jpg)
Threshold = 2Pause = 10msTimeout = 30sState = OpenRequest
30s has not passed
CircuitBreakerOpenException
Request
30s has not passed
CircuitBreakerOpenException
System can try
to
become
healthy
for 30s
Your ApplicationExternal
DependencyCircuit Breaker
![Page 44: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/44.jpg)
Threshold = 2Pause = 10msTimeout = 30sState = ½ OpenRequest
Request
Failure (i.e. HTTP 500)
Failure Count = 2State = Open
OperationFailedException
30s has passed
Your ApplicationExternal
DependencyCircuit Breaker
![Page 45: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/45.jpg)
Threshold = 2Pause = 10msTimeout = 30sState = ½ OpenRequest
Request
Failure Count = 0State = Closed
Response
30s has passed
Response
Your ApplicationExternal
DependencyCircuit Breaker
![Page 46: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/46.jpg)
ClosedOpen
½ Open
![Page 47: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/47.jpg)
½ Open is like a
manual reset
![Page 48: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/48.jpg)
PauseTimeout
![Page 49: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/49.jpg)
Pausebetween calls
in the loop
![Page 50: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/50.jpg)
Timeoutbefore you
can call again
![Page 51: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/51.jpg)
Exceptions
![Page 52: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/52.jpg)
OperationFailed:
AggregateException
![Page 53: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/53.jpg)
CircuitBreakerOpen:
ApplicationException
![Page 54: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/54.jpg)
Don’t Loose Exception Info
![Page 55: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/55.jpg)
Always use InnerException(s)
![Page 56: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/56.jpg)
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 ApplicationExternal
DependencyCircuit Breaker
Failure Count = 1
![Page 57: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/57.jpg)
SegregateDependencies
![Page 58: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/58.jpg)
circuitBreaker(“database”)
circuitBreaker(“weatherservice”)
![Page 59: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/59.jpg)
Dependency type, endpoint svc,
endpoint
![Page 60: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/60.jpg)
Where?
![Page 61: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/61.jpg)
Your
Applicati
on O
ut o
f Pro
cess
Dependency
Cir
cuit
Bre
aker
Pro
xy
![Page 62: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/62.jpg)
Watch forInception
![Page 63: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/63.jpg)
Your
Applicati
on W
eb S
erv
ice
Cir
cuit
Bre
aker
Cir
cuit
Bre
aker
Pro
xy
Data
baseR
eposi
tory
![Page 64: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/64.jpg)
circuit breaker• retry looping
• slow down attempts
• good neighbour
![Page 65: Opportunities to Improve System Reliability and Resilience by Donald Belcham](https://reader033.fdocuments.us/reader033/viewer/2022052623/559b30671a28ab440a8b475e/html5/thumbnails/65.jpg)
¡Muchas gracias!