Section 8 - High Availability & Scalability: ELB & ASGV

  • Scalability & High Availability
      * Scalability means that an application/system can handle greater loads by adapting
        * High availability: run instance for the same application across multi AZ
          * High availability usually goes hand in hand with horizontal scaling
          * Means running your application/system in at least 2 AZs
          * The goal is to survive a data center loss
          * Can be passive (for RDS Multi AZ), active (for horizontal scaling)
        * 2 types:
          * Vertical: increasing the size of the instance
            * Common for non distributed systems, such as a database
            * RDS, ElastiCache are services that can scale vertically
            * There's usually a hardware limit to how much you can vertically scale
            * Ex: r4.large ‒> r4.4xlarge
          * Horizontal: increasing the number of instances/systems for your application
            * Auto Scaling Group, Load Balancer
            * Implies distributed systems
            * Common for web applications/modern applications
            * easy to horizontally scale thanks to EC2
  • Elastic Load Balancing
      * Load Balancers ‒> servers that forward traffic to multiple servers (Ex: EC2 Instances) downstream
        * Spread load across multiple downstream instances
        * Expose singly point of access (DNS)
        * Seamlessly handle failures of downstream instances
        * Do Regular health checks to instances
          * enable load balancer to know if instances it forwards traffic to are available to reply to requests
          * done on port and route (/health is common)
          * 200 (Ok)
        * Provide SSL termination (HTTPS) for websites
        * Enforce stickiness with cookies
        * High availability across zones
        * Separate public traffic from private traffic
      * Elastic Load Balancer ‒> managed load balancer
        * AWS guarantees that it will be working
        * AWS takes care of upgrades, maintenance, high availability
        * AWS provides only a few configuration knobs
        * Costs less to setup your own but more effort
        * integrated with many AWS offerings
          * EC2, EC2 Auto Scaling, ECS, ….
        * 4 Types:
          * Classic Load Balancer (v1) - CLB: HTTP, HTTPS, TCP, SSL
            * Supports TCP (Layer 4), HTTP & HTTPS (Layer 7)
            * Health checks are TCP or HTTP based
            * Fixed hostname: XXX.region.elb.amazonaws.com
          * Application Load Balancer (v2) - ALB: HTTP, HTTPS, WebSocket
            * Layer 7 (HTTP)
            * Load balancing to multiple HTTP applications across machines (target groups)
            * Load balancing to multiple applications on the same machine (ex: containers)
            * Support for HTTP/2 and WebSocket
            * Support redirects (from HTTP to HTTPS for example)
            * Routing tables to different target groups:
              * Routing based on path in URL
              * Routing based on hostname in URL
              * Routing based on Query String, Headers
            * ALB are a great fit for micro services & container-based application (example: Docker & Amazon ECS)
            * Has a port mapping feature to redirect to a dynamic port in ECS
            * In comparison, we'd need multiple Classic Load Balancer per application
            * Target Groups:
              * EC2 Instances (can be managed by an Auto Scaling Group) - HTTP
              * ECS task (managed by ECS itself) - HTTP
              * Lambda functions - HTTP request is translated into a JSON event
              * IP Addresses - must be private IPs
            * ALB can route to a multiple target groups
            * Health checks are at the target group level
            * Good to Know:
              * Fixed hostname (XXX.region.elb.amazonaws.com)
              * The application servers don't see the IP of the client directly
                * The true IP of the client is inserted in the header X-Forwarded-For
                * We can also get Port (X-Forwarded-Port) and proto (X-Forwarded-Proto)
          * Network Load Balancer (v2) - NLB: TCP, TLS (secure TCP), UPD
          * Gateway Load Balancer - GWLB: Operates at layer 3 (Network layer) - IP Protocol
          * Recommended to use newer gens
          * Some can be setup as internal or external ELBs