MD DevdDays 2016: Defensive programming, resilience patterns & antifragility
NRWConf, DE: Defensive programming, resilience patterns & antifragility
-
Upload
daniel-fisher -
Category
Technology
-
view
447 -
download
0
Transcript of NRWConf, DE: Defensive programming, resilience patterns & antifragility
![Page 1: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/1.jpg)
danielfisher.comDefensive
Programming,
Daniel Fisher
Resilience Patterns &Antifragility
![Page 2: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/2.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/3.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/4.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/5.jpg)
danielfisher.com
CHAPTER 1
Software Development: A world of fear
![Page 6: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/6.jpg)
danielfisher.com
https://www.flickr.com/photos/38295844@N05/4980776534/
![Page 7: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/7.jpg)
danielfisher.com
https://www.flickr.com/photos/pagedooley/2398572388/
![Page 8: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/8.jpg)
danielfisher.com
http://www.city-data.com/forum/anchorage/692696-anchorage-here-we-come-finally.html
![Page 9: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/9.jpg)
danielfisher.com
BOSSFEAR
![Page 10: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/10.jpg)
danielfisher.com
“Office Space” by Mike Judge / Twentieth Century Fox Film Corporation
![Page 11: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/11.jpg)
danielfisher.com
FEARCHANGE
![Page 12: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/12.jpg)
danielfisher.com
https://www.flickr.com/photos/bluedharma/89186151
![Page 13: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/13.jpg)
danielfisher.com
https://www.flickr.com/photos/armydre2008/3144377781
![Page 14: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/14.jpg)
danielfisher.com
FEARRELEASE
![Page 15: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/15.jpg)
danielfisher.com
Time
Chan
ge Big
…
Smal
l …
![Page 16: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/16.jpg)
danielfisher.com
“Fight Club” by David Fincher / Twentieth Century Fox Film Corporation
![Page 17: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/17.jpg)
danielfisher.com
FEARFAIL
![Page 18: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/18.jpg)
danielfisher.com
https://www.flickr.com/photos/38403488@N08/5100179116
![Page 19: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/19.jpg)
danielfisher.com
I have not failed!I've just found 10,000 ways that won't work …
Thomas Edison
![Page 20: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/20.jpg)
danielfisher.com
CHAPTER 2
Paranoia basics: Defensive programming
![Page 21: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/21.jpg)
danielfisher.com
https://www.flickr.com/photos/ajahan/8413794849
![Page 22: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/22.jpg)
danielfisher.com
Yoda Conditionsif (variable.Equals("literal")){ ... } if ("literal".Equals(variable)){ ... }
![Page 23: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/23.jpg)
danielfisher.com
Check Collections for Nullvar files = SomeApi.GetFileList();if (files != null){ for (var i = 0; i < files.length; i++) { ... }}
![Page 24: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/24.jpg)
danielfisher.comAll classes are sealed by
defaultpublic class Class1{ ...}
internal sealed class Class1{ ...}
![Page 25: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/25.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/26.jpg)
danielfisher.com
CHAPTER 3
Advanced paranoia tactics: Robustness
![Page 27: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/27.jpg)
danielfisher.com
CULTUREIT’S ALL ABOUT
![Page 28: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/28.jpg)
danielfisher.comFinding Bugs is
good and mustn’t be punished!It makes code less buggy!
![Page 29: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/29.jpg)
danielfisher.comFinding Bugs in
tests is even better!No customer will even face them!
![Page 30: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/30.jpg)
danielfisher.comTry to break, burn,
shoot and drown it together!I call it Breakstorming!
![Page 31: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/31.jpg)
danielfisher.com
CHAPTER 4
Professional Paranoia: Resilience patterns
![Page 32: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/32.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/33.jpg)
danielfisher.com
![Page 34: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/34.jpg)
danielfisher.com
Topology changes
Networks failLatency varies by locationBandwidth differs by locationThings get hacked
![Page 35: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/35.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/36.jpg)
danielfisher.comLife is not a
walk in the park. neither is software!
![Page 37: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/37.jpg)
danielfisher.com
Success is the ability to go from one failure to another with no loss of enthusiasm.Winston Churchill
![Page 38: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/38.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/39.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/40.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/41.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/42.jpg)
danielfisher.comRetry Pattern
https://www.flickr.com/photos/st3f4n/143623217
![Page 43: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/43.jpg)
danielfisher.comCircuit Breaker Pattern
https://www.flickr.com/photos/qubodup/8278039181
![Page 44: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/44.jpg)
danielfisher.comLeader Election Pattern
http://moonbasetshirts.limitedrun.com/products/557785-palpatine-vader-2016
![Page 45: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/45.jpg)
danielfisher.comCompensating Transaction
Pattern
https://www.flickr.com/photos/susivinh/16341538221
![Page 46: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/46.jpg)
danielfisher.com
CHAPTER 5
Things that gain from disorder: Antifragility
![Page 47: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/47.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/48.jpg)
danielfisher.com
AntifragilityResilienceRobustnessFragile
TimeValu
e/Co
rrect
ness
/Sta
bilit
y/…
![Page 49: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/49.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/50.jpg)
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: NRWConf, DE: Defensive programming, resilience patterns & antifragility](https://reader035.fdocuments.in/reader035/viewer/2022070511/58a24e831a28abe8738b541b/html5/thumbnails/51.jpg)
danielfisher.com
Thank you!danielfisher.com my companylennybacon.com my blog url@lennybacon my twitter [email protected] my smtp