ЁЯПл The SchoolтА║ЁЯкк AWSтА║ЁЯЫОя╕П рдзрдбрд╛ 15 тАФ Load balancers: рдЧрд░реНрджреА рд╡рд╛рдЯрдгрд╛рд░реЗ reception (Layer 7 load balancer)
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯЫОя╕П рдзрдбрд╛ 15 тАФ Load balancers: рдЧрд░реНрджреА рд╡рд╛рдЯрдгрд╛рд░реЗ reception (Layer 7 load balancer)

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 20 рдкреИрдХреА рдзрдбрд╛ 15 ┬╖ рдорд╛рдЧреАрд▓: lesson-14-s3 ┬╖ рдкреБрдвреАрд▓: lesson-16-route53


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ15. Public рд╡рд┐рднрд╛рдЧрд╛рд▓рд╛ рдЕрдЦреЗрд░ рддреНрдпрд╛рдЪрд╛ рд░рд╣рд┐рд╡рд╛рд╕реА рдорд┐рд│рддреЛ: рд░рд╕реНрддреНрдпрд╛рдХрдбреЗ рддреЛрдВрдб рдХрд░реВрди рдЙрднреА рд░рд╛рд╣рд╛рдпрд▓рд╛рдЪ рд╣рд╡реА рдЕрд╢реА рдПрдХрдореЗрд╡ рдЧреЛрд╖реНрдЯ.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рдХреНрд░реАрдбрд╛ рджрд┐рди: рд╕рдЧрд│реЗ рдЧрд╛рд╡ рд▓реЛрдЯрддреЗ. рддреБрдореНрд╣реА рдЧрд░реНрджреАрд▓рд╛ corridors рдордзреНрдпреЗ рдлрд┐рд░рдд рд╡рд░реНрдЧрд╛рдВрдЪреНрдпрд╛ рджрд╛рд░рд╛рдВрд╡рд░ рдареЛрдард╛рд╡реВ рджреЗрдд рдирд╛рд╣реА тАФ рддреБрдореНрд╣реА gate рд╡рд░ рдПрдХ reception desk ЁЯЫОя╕П рдареЗрд╡рддрд╛. рддреЗрдЪ рдЖрд╣реЗ Application Load Balancer (ALB).

рдПрдХ pneumatic tube рдкрдг рдЖрд╣реЗ тАФ NLB: рддреЗ requests рд╡рд╛рдЪрдд рдирд╛рд╣реА, рдлрдХреНрдд network packets рддрд╛рд░реЗрдЪреНрдпрд╛ рд╡реЗрдЧрд╛рдиреЗ рдмрд╛рдХрд╛рдВрдХрдбреЗ рдлреЗрдХрддреЗ (L4, ALB рдЪреНрдпрд╛ L7 рд╡рд┐рд░реБрджреНрдз). Databases рдЖрдгрд┐ game servers tube рдШреЗрддрд╛рдд; websites reception рдШреЗрддрд╛рдд.

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
    crowd["ЁЯзСтАНЁЯзСтАНЁЯзТ the town"]
    alb["ЁЯЫОя╕П ALB тАФ reception<br/>public wings, AZ-a + AZ-b"]
    rules["ЁЯкз signboard<br/>/api/* тЖТ api desks<br/>else тЖТ web desks"]
    tg["ЁЯУЛ target group: web<br/>ЁЯЩЛ health-checked"]
    d1["ЁЯЦея╕П desk (private, AZ-a)"]
    d2["ЁЯЦея╕П desk (private, AZ-b)"]
    dead["ЁЯШ┤ desk failing checks<br/>тЖТ skipped, not restarted"]
    crowd -->|"1 one address"| alb -->|"2"| rules -->|"3"| tg
    tg -->|"4"| d1
    tg -->|"4"| d2
    tg -.->|"skipped"| dead

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

рдПрдХ рдмрд╛рдХ = failure рдЪрд╛ рдПрдХ рдмрд┐рдВрджреВ рдЖрдгрд┐ рдПрдХ рдЗрдорд╛рд░рдд. Reception + рджреЛрди рдЗрдорд╛рд░рддреАрдВрддреАрд▓ рдмрд╛рдХ = рдХреНрд░реАрдбрд╛ рджрд┐рдирд╛рдЪреНрдпрд╛ рдордзреНрдпреЗрдЪ рдПрдХ рдЗрдорд╛рд░рдд рдЬрд│реВрди рдЧреЗрд▓реА рддрд░реА рдЧрд╛рд╡рд╛рд▓рд╛ рдХрд╛рд╣реАрдЪ рдХрд│рдд рдирд╛рд╣реА. рдпрд╛рдЪ рдзрдбреНрдпрд╛рдд "multi-AZ" рдШреЛрд╖рдгрд╛ рд░рд╛рд╣рдд рдирд╛рд╣реА, рддрд░ рд╣реЛрддреЗ: рджреЛрди public рд╡рд┐рднрд╛рдЧрд╛рдВрдд ALB, рджреЛрди private рд╡рд┐рднрд╛рдЧрд╛рдВрдд рдмрд╛рдХ, рдЖрдгрд┐ рдХреЛрдг рдЙрддреНрддрд░ рджреЗрдИрд▓ рд╣реЗ health checks рдард░рд╡рддрд╛рдд.

ЁЯФз рдХрд╕реЗ

# what reception sees (which desks are healthy, and why not):
aws elbv2 describe-target-health --target-group-arn $TG_ARN \
  --query 'TargetHealthDescriptions[].{id:Target.Id,state:TargetHealth.State,why:TargetHealth.Reason}'

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~15 рдорд┐рдирд┐рдЯреЗ, ~2┬в тАФ рдкрд╣рд┐рд▓рд╛ рджреЛрди-рдмрд╛рдХрд╛рдВрдЪрд╛ lab)

рдзрдбрд╛ 12 рдЪреНрдпрд╛ user-data рдиреЗ рджреЛрди t3.micro рдмрд╛рдХ рд╕реБрд░реВ рдХрд░рд╛ (рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рддрдГрдЪреЗ hostname рджреЗрддреЛ), рд╕рдореЛрд░ ALB рдареЗрд╡рд╛, рдордЧ ALB рдЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рд╡рд░ watch curl рдХрд░рд╛ тАФ hostname рдЖрд▓рдЯреВрди рдкрд╛рд▓рдЯреВрди рдпреЗрддреЗ. рдПрдХ рдмрд╛рдХ рдерд╛рдВрдмрд╡рд╛: traffic рди рддреБрдЯрддрд╛ рдЪрд╛рд▓реВ рд░рд╛рд╣рддреЛ. рд╕рдЧрд│реЗ destroy рдХрд░рд╛.

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

describe-target-health рджреЛрдиреНрд╣реА рдмрд╛рдХ healthy рджрд╛рдЦрд╡рддреЗ; watch curl ALB_DNS hostnames рдЖрд▓рдЯреВрди рдкрд╛рд▓рдЯреВрди рджреЗрддреЛ; рдПрдХ рдмрд╛рдХ рдерд╛рдВрдмрд╡рд▓рд╛ рддрд░реА traffic рдЪрд╛рд▓реВ рд░рд╛рд╣рддреЛ.

ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛

terraform destroy тАФ рд░рд┐рдХрд╛рдореЗ ALB рдХреЛрдгреА рднреЗрдЯ рджрд┐рд▓реА рдХрд┐рдВрд╡рд╛ рдирд╛рд╣реА рддрд░реА рддрд╛рд╕рд╛рдкреНрд░рдорд╛рдгреЗ bill рдХрд░рддреЗ (~$16/month)

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

тПня╕П рдкреБрдвреЗ

Reception рдЪрд╛ рдкрддреНрддрд╛ рд▓рд╛рдВрдм рдЖрдгрд┐ рдХреБрд░реВрдк рдЖрд╣реЗ (my-alb-1234.elb.amazonaws.com). www.school.com рд▓рд╛ рддреЛ рдХрд╕рд╛ рд╕рд╛рдкрдбрддреЛ? рдзрдбрд╛ 16: phonebook тАФ Route 53.

ЁЯЫОя╕П Lesson 15 тАФ Load balancers: the reception that splits crowds (Layer 7 load balancer)

ЁЯУН You are here: Lesson 15 of 20 ┬╖ Previous: lesson-14-s3 ┬╖ Next: lesson-16-route53


ЁЯУж What's in this branch

Lessons 01тАУ15. The public wing finally gets its resident: the one thing that SHOULD face the street.

ЁЯзТ Explain like I'm 5

Sports day: the whole town shows up. You don't let the crowd wander the corridors knocking on classroom doors тАФ you put a reception desk ЁЯЫОя╕П at the gate. That's an Application Load Balancer (ALB).

There's also the pneumatic tube тАФ the NLB: it doesn't read requests, just slings network packets at desks at wire speed (L4 vs the ALB's L7). Databases and game servers take the tube; websites take reception.

ЁЯЧ║я╕П Diagram

flowchart LR
    crowd["ЁЯзСтАНЁЯзСтАНЁЯзТ the town"]
    alb["ЁЯЫОя╕П ALB тАФ reception<br/>public wings, AZ-a + AZ-b"]
    rules["ЁЯкз signboard<br/>/api/* тЖТ api desks<br/>else тЖТ web desks"]
    tg["ЁЯУЛ target group: web<br/>ЁЯЩЛ health-checked"]
    d1["ЁЯЦея╕П desk (private, AZ-a)"]
    d2["ЁЯЦея╕П desk (private, AZ-b)"]
    dead["ЁЯШ┤ desk failing checks<br/>тЖТ skipped, not restarted"]
    crowd -->|"1 one address"| alb -->|"2"| rules -->|"3"| tg
    tg -->|"4"| d1
    tg -->|"4"| d2
    tg -.->|"skipped"| dead

тЭУ What

ЁЯдФ Why

One desk = one point of failure and one building. Reception + desks in two buildings = a building can burn down mid-sports-day and the town notices nothing. This lesson is where "multi-AZ" stops being a slogan and becomes: ALB in two public wings, desks in two private wings, health checks deciding who answers.

ЁЯФз How

# what reception sees (which desks are healthy, and why not):
aws elbv2 describe-target-health --target-group-arn $TG_ARN \
  --query 'TargetHealthDescriptions[].{id:Target.Id,state:TargetHealth.State,why:TargetHealth.Reason}'

ЁЯзк Try it (~15 min, ~2┬в тАФ the first two-desk lab)

Spin two t3.micro desks with lesson 12's user-data (each serves its own hostname), put an ALB in front, then watch curl the ALB address тАФ the hostname alternates. Stop one desk: traffic flows on, unbroken. Destroy all.

тЬЕ Verify тАФ what you should see

describe-target-health shows both desks healthy; watch curl ALB_DNS alternates hostnames; stop one desk and traffic continues.

ЁЯз╣ Clean up тАФ do not leave running

terraform destroy тАФ an idle ALB bills hourly (~$16/month) whether anyone visits or not

тЪая╕П Common mistakes

тПня╕П Next

Reception has a long ugly address (my-alb-1234.elb.amazonaws.com). How does www.school.com find it? Lesson 16: the phonebook тАФ Route 53.

тЖР Previouss3Next тЖТroute53

This page is the lesson's README from the lesson-15-load-balancers branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.