md devddays 2016: defensive programming, resilience patterns & antifragility

51
danielfishe r.com Defensive Programming, Daniel Fisher Resilience Patterns & Antifragi lity

Upload: daniel-fisher

Post on 11-Jan-2017

76 views

Category:

Software


0 download

TRANSCRIPT

Page 1: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comDefensive

Programming,

Daniel Fisher

Resilience Patterns &Antifragility

Page 2: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

I’m a technician & always concerned about bandwidthSo I ask you to send one packet instead of two

DANIEL

My name is Any further questions? Just Ask!

Page 3: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

softwareI design, develop, deploy, teach, train, coach and speak

HTML5 & WEB, DATA ACCESS & PERFORMANCE, SCALABLE & TESTABLE DESIGN, DISTRIBUTED SYSTEMS & SERVICES, SECURITY & TRUST

lennybacon.com my blog url@lennybacon my twitter [email protected] my smtp

find my services at danielfisher.com

Page 4: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

THAT IS ALL THAT I DEEPLY BELEVE IN

D I S C L A I M E R

IT FITS MY SHOESIT MIGHT NOT FIT YOURS

THIS PRESENTATION CONTAINS MY PERSONAL VIEW ON THE WORLDIT IS BASED ON MY EXPERIENCE IN SOFTWARE DEVELOPMENT PROJECTS SINCE 1996MOST THINGS I LEARNED FROM PAIN OTHERS FROM MOMENTS OF GRACEFULNESS, BRAVENESS & SUCCESS

Page 5: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

CHAPTER 1

Software Development: A world of fear

Page 6: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

https://www.flickr.com/photos/38295844@N05/4980776534/

Page 7: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

https://www.flickr.com/photos/pagedooley/2398572388/

Page 8: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

http://www.city-data.com/forum/anchorage/692696-anchorage-here-we-come-finally.html

Page 9: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

BOSSFEAR

Page 10: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

“Office Space” by Mike Judge / Twentieth Century Fox Film Corporation

Page 11: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

FEARCHANGE

Page 12: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

https://www.flickr.com/photos/bluedharma/89186151

Page 13: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

https://www.flickr.com/photos/armydre2008/3144377781

Page 14: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

FEARRELEASE

Page 15: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

Time

Chan

ge Big

Smal

l …

Page 16: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

“Fight Club” by David Fincher / Twentieth Century Fox Film Corporation

Page 17: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

FEARFAIL

Page 18: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

https://www.flickr.com/photos/38403488@N08/5100179116

Page 19: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

I have not failed!I've just found 10,000 ways that won't work …

Thomas Edison

Page 20: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

CHAPTER 2

Paranoia basics: Defensive programming

Page 21: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

https://www.flickr.com/photos/ajahan/8413794849

Page 22: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

Yoda Conditionsif (variable.Equals("literal")){ ... } if ("literal".Equals(variable)){ ... }

Page 23: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

Check Collections for Nullvar files = SomeApi.GetFileList();if (files != null){ for (var i = 0; i < files.length; i++) { ... }}

Page 24: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comAll classes are sealed by

defaultpublic class Class1{ ...}

internal sealed class Class1{ ...}

Page 25: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comDDD Value Object Input

Validationpublic sealed class ZipCode : IValueObject{ public ZipCode(int value) { // Input validation!!! Value = value; } public int Value { get; private set;}}

Page 26: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

CHAPTER 3

Advanced paranoia tactics: Robustness

Page 27: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

CULTUREIT’S ALL ABOUT

Page 28: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comFinding Bugs is

good and mustn’t be punished!It makes code less buggy!

Page 29: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comFinding Bugs in

tests is even better!No customer will even face them!

Page 30: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comTry to break, burn,

shoot and drown it together!I call it Breakstorming!

Page 31: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

CHAPTER 4

Professional Paranoia: Resilience patterns

Page 32: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comA distributed system

is one in which the failure of a computer you didn't even know existed can render your computer unusable http://research.microsoft.com/en-us/um/people/lamport/pubs/distributed-system.txt

Page 33: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

Page 34: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

Topology changes

Networks failLatency varies by locationBandwidth differs by locationThings get hacked

Page 35: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

Servers get rebooted

Code has bugsOther users might use it different

Failover means offline

Processing time varies by amount of data

Environments differFile system is not always available

Page 36: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comLife is not a

walk in the park. neither is software!

Page 37: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

Success is the ability to go from one failure to another with no loss of enthusiasm.Winston Churchill

Page 38: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

Scale like a boss

AsynchronicityNo one waiting for an error

Bulkheads & ReplaysLoose coupling for the winBut dare you forget the dead letters

No cascading failures and stack trace

Page 39: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comBASE OVER

ACIDAtomic, Consistent, Isolated and Durable solutions are not a silver bullet.Basic Availability, Soft-state and Eventual consistency work better in most distributed scenarios.BUT YOU MUST THINK DIFFERENT FOR BASEUse a more relaxed consistency model to reduce coupling

Queues are as transactional as databases

Page 40: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comIdempoten

cyNon-idempotency is complicated to handleand increases coupling between participants.stateless stateless stateless

THIS ALSO REQUIRES YOU TO THINK DIFFERENTBut in the end it is nothing more than divide and conquer with an eye on the results

Functional programming and immutable types for the win.

Page 41: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comMonitor &

AuditMeasure to gain latency control and detect non-timely responses before they time out.

Learn more about the life of your system to predict its behavior.

If you can’t debug, log is your friend

Respond to detected failures.

20% - 40% logging codeAuditing and Logging can even be party of your architecture

Page 42: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comRetry Pattern

https://www.flickr.com/photos/st3f4n/143623217

Page 43: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comCircuit Breaker Pattern

https://www.flickr.com/photos/qubodup/8278039181

Page 44: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comLeader Election Pattern

http://moonbasetshirts.limitedrun.com/products/557785-palpatine-vader-2016

Page 45: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comCompensating Transaction

Pattern

https://www.flickr.com/photos/susivinh/16341538221

Page 46: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

CHAPTER 5

Things that gain from disorder: Antifragility

Page 47: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comNassim Nicholas Taleb wrote two interesting

books about how economical systems behave.

He focusses on what happens under stress and on unexpected occurrences of events.

The black swanAntifragility

Page 48: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

AntifragilityResilienceRobustnessFragile

TimeValu

e/Co

rrect

ness

/Sta

bilit

y/…

Page 49: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comWhat Doesn't Kill

You Makes You StrongerEvery time something catastrophic happens that you take on and survive…… your team and you code becomesStronger, Better, Faster, More

Page 50: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.comAsymmetric information &

optionsAn opportunity to cope with the lack of knowledge

S T R A T E G YBusiness, Architecture & CodeLong Term vs Short TermSustainability vs Reward

Page 51: MD DevdDays 2016: Defensive programming, resilience patterns & antifragility

danielfisher.com

Thank you!github.com/lennybacon my codedanielfisher.com my serviceslennybacon.com my blog posts@lennybacon my twitter [email protected] my mail