Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Resiliency and Availability Design Patterns for...

Resiliency and Availability Design Patterns for the Cloud

We have traditionally built robust software systems by trying to avoid mistakes and by dodging failures when they occur in production or by testing parts of the system in isolation from one another. Modern methods and techniques take a very different approach based on resiliency, which promotes embracing failure instead of trying to avoid it. Resilient architectures enhance observability, leverage well-known patterns such as graceful degradation, timeouts and circuit breakers but also new patterns like cell-based architecture and shuffle sharding. In this session, will review the most useful patterns for building resilient software systems and especially show the audience how they can benefit from the patterns.

More Decks by Sébastien Stormacq - AWS Developer Advocate

Other Decks in Programming

Transcript

  1. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Resiliency and Availability Design Patterns for the Cloud B A R 4 K Y I V 1 1 . 0 6 . 2 0 1 9 { "name": "Sébastien Stormacq", "role": ”Technical Evangelist", "company": "Amazon Web Services”, "twitter": ”@sebsto”, ”github": ”sebsto” }
  2. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Can you guess what will happen?
  3. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Failures are a given and everything will eventually fail over time. Werner Vogels CTO – Amazon.com “ “
  4. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Distributed Systems are hard
  5. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Complex systems Amazon Twitter Netflix
  6. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Resiliency: Ability for a system to handle and eventually recover from unexpected conditions
  7. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Partial failure mode
  8. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. How do we build resilient software systems?
  9. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. People Application Network & Data Infrastructure
  10. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about Availability
  11. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Availability in parallel A = 1 – (1 – Ax)2 Part X Part X
  12. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Availability in parallel Component Availability Downtime X 99% (2-nines) 3 days 15 hours Two X in parallel 99.99% (4-nines) 52 minutes Three X in parallel 99.9999% (6-nines) 31 seconds
  13. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Component redundancy increases availability significantly!
  14. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Fully-scaled Availability Zone
  15. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Highly redundant regional network
  16. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS Region and availability zones Region Availability zone a Availability zone b Availability zone c data center data center data center 1 or more data centers per AZ 2 or more AZs per region (new regions min 3) data center data center data center data center data center data center
  17. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about Multi-AZ
  18. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Multi-AZ architecture Region Availability zone a Availability zone b Availability zone c Instances Instances Instances DB Instance DB instance standby Elastic Load Balancing (ELB)
  19. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Multi-AZ architecture X Region Availability zone a Availability zone b Availability zone c Instances Instances Instances DB Instance DB instance standby Elastic Load Balancing (ELB)
  20. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Multi-AZ architecture X Region Availability zone a Availability zone b Availability zone c Instances Instances Instances DB Instance DB instance standby Elastic Load Balancing (ELB)
  21. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Multi-AZ architecture X Region Availability zone a Availability zone b Availability zone c Instances Instances Instances DB Instance DB instance new master Elastic Load Balancing (ELB)
  22. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Multi-AZ architecture • Enables fault-tolerant applications • AWS regional services designed to withstand AZ failures • Leveraged by AWS regional services such as Amazon S3, Amazon DynamoDB, Amazon Aurora, Amazon ELBs, etc. Region Availability zone a Availability zone b Availability zone c Instances Instances Instances DB Instance DB instance standby Elastic Load Balancing (ELB)
  23. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about auto scaling
  24. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Auto-Scaling Fixed Variable
  25. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Availability zone 1 Auto Scaling group AWS Region Availability zone 2 Auto-scaling for self-healing Elastic Load Balancing (ELB) X
  26. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about decoupling and async
  27. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Process A Process B Process A Process B Synchronous Asynchronous Waiting Working Continues get or fetch result Get result Decoupling with async pattern
  28. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. API: {DO foo} PUT JOB: {JobID: 0001, Task: DO foo} API: {JobID: 0001} GET JOB: {JobID: 0001, Task: DO foo} {JobID: 0001, Result: bar} Cache node Worker Instance Worker Instance Queue/Streaming API Instance API Instance API Instance
  29. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Push Notification User Worker Instance Worker Instance API Instance API Instance Cache node Fetch results API Instance Queue/Streaming
  30. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Degrade & prioritize traffic with queues Worker Instance Worker Instance API Instance API Instance API Instance High Priority Queue Low Priority Queue
  31. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about the failures in distributed systems
  32. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Recommendation Engine Service Service Service Preserve at all cost Preventing failures
  33. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Some of the most important things to think about Recommendation Engine Service Service Service Preserve at all cost
  34. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about timeouts, backoff & retries!
  35. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Users App DB Conn Pool INSERT INSERT INSERT INSERT What happens if the DB “slows down”? Timeout client side Timeout backend side ? ?
  36. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. User 1 App DB Conn Pool INSERT Timeout client side = 10s Timeout backend side = default = Infinite Retry INSERT Retry INSERT ERROR: Failed to get connection from pool Retry
  37. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.timeout
  38. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. @timeout_decorator.timeout(5, timeout_exception=StopIteration) def timed_get(url): return requests.get(url) https://pypi.org/project/timeout-decorator/
  39. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. How else could we have prevented the error? User 1 DB Conn Pool INSERT Retry INSERT Retry INSERT Retry ERROR: Failed to get connection from pool
  40. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. User 1 DB Conn Pool INSERT Timeout client side = 10s Timeout backend side = 10s Wait 2s before Retry INSERT INSERT Wait 4s before Retry Wait 8s before Retry Wait 16s before Retry Backing off between retries Releasing connections Backoff
  41. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. No jitter With jitter https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/ Simple Exponential Backoff is not enough: Add Jitter
  42. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Example: add jitter 0-1000ms def get_item(self, url, n=1): MAX_TRIES = 12 try: res = requests.get(url) except: if n > MAX_TRIES: return None n += 1 time.sleep((2 ** n) + (random.randint(0, 1000) / 1000.0)) return self.get_item(url, n) else: return res
  43. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. @backoff.on_exception(backoff.full_jitter, max_time=60) def poll_for_message(queue): return queue.get() https://pypi.org/project/backoff/ As of version 1.2, the default jitter function backoff.full_jitter implements the ‘Full Jitter’ algorithm as defined in the AWS Architecture Blog’s Exponential Backoff And Jitter post.
  44. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Idempotent operation No additional effect if it is called more than once with the same input parameters.
  45. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Circuit Breaker • Wrap a protected function call in a circuit breaker object, which monitors for failures. • If failures reach a certain threshold, the circuit breaker trips. Producer Circuit Breaker Consumer Connection Monitoring Timeouts Breaking Circuit
  46. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. https://github.com/Netflix/Hystrix
  47. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. https://spring.io/guides/gs/circuit-breaker/
  48. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about health checking!
  49. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Auto Scaling group Service A Availability zone 1 Auto Scaling group AWS Region Service A Availability zone 2 Service B Service B database Email Probing for health Cluster
  50. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Shallow health check Instance Cache node Email database Cluster Are you healthy? yes
  51. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Shallow health check Instance Cache node Email database Cluster Are you healthy? yes
  52. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Deep health check Instance Cache node Email database Cluster Are you healthy? yes Are you healthy? yes yes yes yes
  53. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Deep health check Instance Cache node Email database Cluster Are you healthy? no Are you healthy? no yes yes yes
  54. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Prioritize shallow health checks during hard times. Cache.
  55. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about load shedding.
  56. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Cheaply reject excess work
  57. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Be careful when selecting the right metric
  58. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Don’t be overly optimistic and take on more than you can. Find an operational metric to reject what you cannot take in. Favor cached and static content Prioritize ELB health check (shallow) pings In an overload situation you have precious resources, do not let any of it go to waste. Load Shedding
  59. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Service Degradation & Fallbacks
  60. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. https://twitter.com/redditstatus/status/1116204502703493120
  61. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about shuffle sharding.
  62. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. X X X X X X X X ♤ ♡ ♢ ⚀ ⚁ ⚂ ⚃ ♧ ♢
  63. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Measure for this: blast radius
  64. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Blast radius • How many customers? • What functionality? • How many locations?
  65. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Cell-based architecture X X ♤ ♡ ♢ ⚀ ⚁ ⚂ ⚃ ♧ ♢
  66. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Shuffle sharding X X ♤ ♡ ♢ ⚀ ⚁⚂ ⚃ ♡ ♤ ♧ ♢ ⚀⚂ ♧ ⚁⚃ ♢ ♢ ♡ ♧ ♢
  67. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Shuffle sharding Nodes = 8 Shard size = 2 Combinations = 28 Overlap % customers 0 53.6% 1 42.8% 2 3.6%
  68. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Shuffle sharding Nodes = 100 Shard size = 5 Combinations = 75 million! Overlap % customers 0 77% 1 21% 2 1.8% 3 0.06% 4 0.0006% 5 0.0000013%
  69. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about chaos!
  70. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. GameDay at Amazon Creating Resiliency Through Destruction https://www.youtube.com/watch?v=zoz0ZjfrQ9s
  71. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Chaos engineering https://github.com/Netflix/SimianArmy
  72. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. “Chaos Engineering is the discipline of experimenting on a distributed system in order to build confidence in the system’s capability to withstand turbulent conditions in production.” http://principlesofchaos.org
  73. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Failure injection • Start small & build confidence • Application level • Host failure • Resource attacks (CPU, memory, …) • Network attacks (dependencies, latency, …) • Region attacks • “Paul” attack https://www.gremlin.com https://github.com/Netflix/SimianArmy https://chaostoolkit.org
  74. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Bananas for Monkeys
  75. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. How to DDoS yourself ~ wrk -t12 -c400 -d30s http://127.0.0.1/api/health
  76. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Adding delay to the network ~ tc qdisc add dev eth0 root netem delay 200ms
  77. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. https://github.com/Netflix/SimianArmy Set of scheduled agent: • shuts down services randomly • slows down performances • checks conformity • breaks an entire region • Integrates with spinnaker (CI/CD)
  78. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Let’s talk about operational resiliency
  79. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Value realized by example Operational resilience 1. Scaled to handle a 400% increase in page views (Kurt Geiger) 2. Improved security posture (CapitalOne) 3. 8600 transactions/second (McDonalds) 4. Transfer of over 750 TB of data from pipeline inspection machinery (GE) 5. Processing over 75 billion market events daily (FINRA) 6. Critical applications run in multiple AZs, x-Regions for robust disaster recovery (Expedia) 7. Supports over 300,000 requests per minute to its API (Easy Taxi) 8. 60% reduced downtime (Trainline) 9. Migration of SAP on Oracle to AWS with zero unplanned downtime across five countries (Kellogg’s) 10. SAP availability boosted to 100% (MacMillan)
  80. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Operational Resilience Operational resilience Critical workloads run in Multiple AZs and Regions for robust DR (Expedia) Benefit of improving SLAs and reducing unplanned outages What is it? Example
  81. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. The cost of downtime Annual Fortune 1000 application downtime costs (IDC) $1.25 to $2.5B Average cost of a data breach (Ponemon Institute) $3.6M Cost/hr of a critical application failure (IDC) $500K to $1M Average cost/hr of downtime (Ponemon Institute) $474K Average cost per lost or stolen record (Ponemon Institute) $141
  82. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Operational resilience: Quantifying cost Cost Category % of Total Definition Third Parties 1.3% The cost of contractors, consultants, auditors and other specialists engaged to help resolve unplanned outages. Equipment 1.3% The cost of new equipment purchases and repairs, including refurbishment. Ex-post Activities 1.1% All after-the-fact incidental costs associated with business disruption and recovery. Recovery 2.9% Activities and associated costs that relate to bringing the organization’s networks and core systems back to a state of readiness. Detection 3.6% Activities associated with the initial discovery and subsequent investigation of the partial or complete outage incident. IT Productivity 8.4% The lost time and related expenses associated with IT personnel downtime. End-user Productivity 18.7% The lost time and related expenses associated with end-user downtime. Lost Revenue 28.2% The total revenue loss from customers and potential customers because of their inability to access core systems during the outage period. Business disruption 34.6% Additional economic loss of the outage, including reputational damages, customer churn and lost business opportunities. TOTAL 100.0%
  83. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Operational resilience: Case studies Migrated to AWS in 6 weeks with no downtime and improved availability to 99.99%+ Migrated all workloads to AWS to reduce downtime by 60% with an annual savings of £1.2M Rebuilt patient engagement portal on AWS and reduced downtime from 120 to <5 min / month Using AWS, Travelstart has seized opportunities in emerging markets and has cut operational costs by 43% and downtime by 25% With its on-premises setup, the availability of its system ran to 98%, but on its cloud infrastructure, this has risen to 99.965% Three 9’s to five 9’s “We no longer need to worry about data center, server, or hypervisor security…which allows us to focus our attention on securing our applications.”
  84. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. DON’T blame people for failure…
  85. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. “Quality is not an act, it is a habit” Aristotle, some time around 350BC
  86. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. https://aws.amazon.com/wellarchitected
  87. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. https://medium.com/@adhorn
  88. Thank you! © 2019, Amazon Web Services, Inc. or its

    affiliates. All rights reserved. { "name": "Sébastien Stormacq", "role": ”Technical Evangelist", "company": "Amazon Web Services”, "twitter": ”@sebsto”, ”github": ”sebsto” }