Architecture Design บน AWS: ใช้กี่ Availability Zone (AZ) ดี?

Nopnithi Khaokaew (Game)
2 min readDec 25, 2022

--

พูดถึงการ design architecture ว่า workload ของเราบน AWS ควรจะใช้กี่ availability zone (AZ) ดี? ใช้แค่ 1 AZ ได้มั้ย? หรือถ้าใช้ 2 AZs พอมั้ย? หรือควรไป 3, 4 AZs ดีกว่า

Table of Contents

  • สร้าง Baseline กันก่อน
  • คำถามคือใช้ 2 AZs พอมั้ย? หรือไป 3, 4 AZs ?
  • งั้นยิ่งใช้ AZ เยอะก็ยิ่งดี?
  • งั้นใช้ 2 AZs ดีกว่า?
  • สรุป

สร้าง Baseline กันก่อน

  • Non-critical environment เช่น test, dev หรืออื่น ๆ จะใช้ AZ เดียวก็ได้ (เพื่อเรื่อง cost-effective)
  • แต่ production ควรมี 2 AZs ขึ้นไปเพื่อ high availability (HA)

คำถามคือใช้ 2 AZs พอมั้ย? หรือไป 3, 4 AZs?

ถ้าสมมุติ workload เรา run อยู่บน EC2 และต้องใช้ทั้งหมด 4 instances เพื่อ handle workload (ไม่ยอมให้ degraded ด้วย)

ถ้าใช้ 2 Availability Zones (AZs)

การใช้ 2 AZs เรื่อง cost ก็น่าจะดูดี แถม manage ง่าย ดังนั้นถ้า app เรามี minimum ที่ 4 instances แปลว่าเราควรจะต้องมี EC2 ทั้งหมด 4+4 = 8 instances

  • AZ A = 4 instances
  • AZ B = 4 instances

เพราะเมื่อ AZ ใด ๆ down (สมมุติว่ามีโอกาสไม่เยอะที่จะเกิด outage พร้อมกันมากกว่า 1 AZ) เราก็ยังจะเหลือ 4 instances ไว้ handle workload

แต่ประเด็นคือ cost ครับ เพราะเราต้อง overprovision ไปถึง 2 เท่า!

ถ้าใช้ 3 Availability Zones (AZs)

เอาใหม่ ใน requirement เดียวกันถ้าเราใช้ 3 AZs ก็จะเป็น 2+2+2 = 6 instances

  • AZ A = 2 instances
  • AZ B = 2 instances
  • AZ C = 2 instances

และเมื่อเกิด down ไปหนึ่ง AZ เราก็ยังจะเหลือ EC2 instance ไว้ handle workload ได้โดยที่เรา overprovision น้อยกว่าตอนใช้ 2 AZs (จาก 2 เหลือ 1.5 เท่า)

งั้นยิ่งใช้ AZ เยอะก็ยิ่งดี?

ก็ไม่เชิงเพราะมันขึ้นอยู่กับหลายปัจจัย เพราะการมี AZ เยอะก็จะ…

  • Cost สำหรับ VPC endpoint, transit gateway attachment หรือการ run service บางตัว (เช่น AD) จะเพิ่มขึ้นหาก architecture เรามีการใช้สิ่งเหล่านี้
  • Cost สำหรับ data transfer ระหว่าง AZ เพิ่มขึ้น ยิ่งถ้า architecture ของเรามี traffic ระหว่าง system to system หลายกลุ่มก้อนด้วยแล้ว
  • เพิ่ม admin overhead ในการดูแลหรือจัดการกับ AZ ที่เพิ่มขึ้น

ยกตัวอย่างเรื่อง Data Transfer

จะเห็นว่าระหว่างการใช้ 2 AZs กับ 3 AZs มี data transfer ข้าม AZ ต่างกันพอควร ทีนี้ cost จะต่างมากหรือน้อยขึ้นกับปริมาณ data ระหว่าง service แล้วแหละ

แต่ถ้า zoom in ไปดูระดับ instance และ service B ไม่จำเป็นต้องมี instance เท่า A ก็อาจจะเป็นอัตราส่วนที่น้อยกว่านี้ครับ

งั้นใช้ 2 AZs ดีกว่า?

ก็ไม่แน่เสมอไปอีกครับ เพราะมันขึ้นอยู่กับ requirement อื่นด้วย เช่น บาง workload ที่ critical มาก การมี 3 AZs ขึ้นไปก็เป็นการเพิ่ม fault tolerance เพราะก็ไม่ใช่ว่าจะไม่มีโอกาสที่จะเกิด outage ทีเดียว 2 AZs พร้อมกัน แต่สุดท้ายก็ต้องแลกมาด้วย cost อีกนั่นแหละ

สรุป

ส่วนตัวผมคิดว่าไม่ว่าเรื่องใดก็ไม่มีสิ่งที่ดีที่สุดสำหรับทุกอย่าง

“Engineering is a job of balancing constraints”

ซึ่งข้อจำกัดที่ว่าก็เช่น performance, reliability, cost รวมถึง budget หรือข้อจำกัดอื่น ๆ ซึ่งหน้าที่ของเราคือการ balance สิ่งเหล่านี้โดยการ trade-off หรือยอม compromise บางเรื่องเพื่อให้ได้ผลลัพธ์สุดท้ายที่ตรงกับความต้องการที่สุด

ดังนั้นสรุปไม่ได้ครับผม 555 แต่ผมเชื่อว่าหลายท่านที่อ่านจนถึงตรงนี้ก็คงจะพอเห็นภาพแล้วแหละว่าเราต้องไปดูอะไรบ้างเพื่อตัดสินใจ เช่น ความ critical ของ workload, ดู architecture ว่ามันมี traffic ระหว่าง AZs แค่ไหน, มี resource ที่ต้องใช้เยอะแค่ไหนหากมี AZ ที่มากขึ้น เช่น service ต่าง ๆ, VPC endpoint หรือ transit gateway attachment

--

--

Nopnithi Khaokaew (Game)
Nopnithi Khaokaew (Game)

Written by Nopnithi Khaokaew (Game)

Cloud Solutions Architect & Hobbyist Developer | 8x AWS/Azure Certified, CKA, CKAD, CKS, 2x HashiCorp Certified (Terraform, Vault), etc.

No responses yet