Introduction to Azure Chaos Studio

อยากชวนผู้อ่านมาทำความรู้จักกับ Chaos Engineering ที่ช่วยให้เรามั่นใจว่าระบบของเราจะยังคงทำงานได้อย่างมีประสิทธิภาพ แม้ว่าจะเกิดเหตุการที่ทำให้ระบบทำงานได้ไม่สมบูรณ์อันเนื่องมาจากปัญหาต่างๆนะครับ และมาดูกันว่า Azure Chaos Studio จะช่วยในการทำงานยังไงได้บ้าง

Ponggun
T. T. Software Solution
3 min readJan 1, 2024

--

What do high availability applications look like?

learn.microsoft.com/architectures/multi-region

ก่อนอื่นผมอยากยกตัวอย่างหน้าตาของระบบที่มีการทำงานที่ออกแบบมาให้รองรับการทำงานในช่องทางสำรอง ในกรณีที่ระบบหลักเกิดข้อผิดพลาดขึ้นนะครับ

โดยในภาพข้างบนเราจะพบว่าระบบออกแบบให้มี ระบบสำรอง (Standby Region) โดยจะมีทั้งการสำรองข้อมูลจาก ระบบหลัก (Active Region) มาที่นี้และเมื่อระบบหลักเกิดข้อผิดพลาดขึ้น ตัว Gateway จะทำงานส่งต่อผู้ใช้มาที่ ระบบสำรอง (Standby Region) นะครับ

ปัญหาคือแล้วเราจะทดสอบได้ยังไงละว่าถ้าระบบเกิดข้อผิดพลาดแล้วจะทำงานได้ตามที่เราออกแบบไว้จริงๆครับผม

ตอนส่งงานอย่างหล่อ เจอปัญหาทีตัวหดเบยยย ฮ่า

What is Chaos?

คำว่า Chaos ในภาษาอังกฤษแปลเป็นภาษาไทยว่า “ความโกลาหล” หรือ “ความวุ่นวาย”. คำนี้มักใช้เพื่ออธิบายสถานการณ์ที่มีความยุ่งเหยิง ไม่มีระเบียบ หรือมีความสับสนมากมาย.

เป็นเหตุการณ์ที่เราไม่อยากให้เกิดขึ้นกับใครเบย
  • การจราจร: ในช่วงเวลาเร่งด่วนที่เมืองใหญ่ๆ บ่อยครั้งที่จะเห็นการจราจรที่มีความวุ่นวายมากมาย เช่น รถติดขัดอย่างหนัก รถหลายคันพยายามเปลี่ยนเลนในเวลาเดียวกัน ส่งผลให้เกิดความโกลาหลทางการจราจร.
  • เหตุการณ์ฉุกเฉิน: เช่น หลังจากเกิดแผ่นดินไหวหรือพายุ บ่อยครั้งที่จะมีความวุ่นวายในการจัดการกับสถานการณ์ โดยเฉพาะในพื้นที่ที่ขาดการเตรียมพร้อมสำหรับภัยธรรมชาติ.
  • งานเทศกาล: ในงานเทศกาลหรือคอนเสิร์ตที่มีผู้คนมากมายเข้าร่วม บางครั้งอาจเกิดความโกลาหลเมื่อมีผู้คนพยายามเข้าหรือออกจากสถานที่พร้อมกัน ทำให้เกิดการแออัดและสับสน.
  • สถานการณ์ครอบครัว: เช่น ในช่วงเช้าของวันทำงานหรือวันเรียน เมื่อทุกคนในครอบครัวพยายามเตรียมตัวไปทำงานหรือโรงเรียนในเวลาเดียวกัน อาจทำให้เกิดความวุ่นวายและความโกลาหลในบ้าน.
  • สถานการณ์การทำงาน: ในสภาพแวดล้อมการทำงานที่มีกำหนดเวลาต้องส่งงานที่แน่น และมีงานหลายอย่างเกิดขึ้นพร้อมกัน อาจทำให้เกิดความวุ่นวายและความเครียดในที่ทำงาน.
Chaos เดียวที่ผมคิดถึงคือ Chaos Magic … ยั๊งงงง!

Chaos Engineering

เป็นหลักปฏิบัติที่กำลังเกิดขึ้นใหม่ในการทดสอบระบบด้วยการจำลองเหตุการให้เกิดความล้มเหลวและการขัดขวางการใช้งานระบบขึ้น

แนวคิดนี้ถูกพัฒนาขึ้นครั้งแรกโดย Netflix ระหว่างการย้ายไปใช้ AWS
โดย Netflix ตระหนักว่าความล้มเหลวของ VM นั้นหลีกเลี่ยงไม่ได้และพวกเขาจำเป็นต้องแนวทางการรับมือต่อความล้มเหลวเหล่านี้

ซึ่งพวกเขาได้สร้างเครื่องมือที่สามารถยกเลิกการทำงานของ VM ได้ตามความต้องการและจับตาดูผลลัพธ์อย่างใกล้ชิดตลอดเวลา

วิธีการนี้ได้กลายเป็นหลักปฏิบัติทั่วไปใน Site Reliability Engineering ซึ่งวิศวกรจะสร้างสมมติฐานเกี่ยวกับความทนทาน (Resiliency) ของระบบของพวกเขา ทดลองเพื่อทดสอบสมมติฐานนั้น วิเคราะห์ผลลัพธ์และทำการปรับปรุงเพื่อสร้างความมั่นใจในการออกแบบแอปพลิเคชัน

ความทนทาน (Resiliency) เป็นเรื่องที่สำคัญมากๆนะครับ เพราะถ้าเมื่อไหร่ที่ระบบทำงานผิดพลาด จะก่อให้เกิดปัญหาตามมาอีกมากมายเลยครับ โดยเฉพาะค่าเสียหายที่เกิดขึ้นและความน่าเชือ่ถือของระบบที่ลดลง
อีกสิ่งนึงท่ีคนออกแบบระบบต้องพึงระวังคือ การทำงานในรูปแบบ Cloud Computing หรือ Distributed Computation นั้นมีโอกาสเกิดข้อผิดพลาดได้ตลอดเวลานะครับ เราจึงต้องออกแบบและทดสอบอยู่ตลอดเวลาทั้ง Cloud ที่เราใช้ และระบบของเรา ซึ่งเป็นความรับผิดชอบร่วมกันครับ

Azure Chaos Studio

เป็นบริการที่ช่วยทดสอบในเรื่องของความทนทาน (Resiliency) ของระบบเรา โดยมีเครื่องมือที่ช่วยจำลองเหตุการณ์ต่างๆ (Fault Injection) ให้เราทดสอบได้อย่างง่ายขึ้น และมีค่าใช้จ่ายที่จ่ายตามที่ใช้จริงเท่านั้นครับ

เราสามารถทดลองใช้งาน Azure Chaos Atudio ได้ทั้งผ่าน Azure Portal หรือผ่าน REST API นะครับ โดยจะแบ่งการทดลองเป็นสองส่วนใหญ่ๆ

  1. Service-direct: เป็นการทดลองด้วยการจำลองความผิดพลาดต่างๆบนบริการของ Azure โดยตรง เช่นทดสอบว่า CosmosDB ใช้งานไม่ได้ โดยไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติมเลย
  2. Agent-based: เป็นบริการเสริมที่ต้องติดตั้ง Agent เพิ่มเติมลงไปที่ VM ครับ เช่นการทดสอบว่าถ้า CPU หรือ Memory ทำงานหนักๆแล้วระบบจะเป็นยังไงบ้าง

Demo Time !!!

ในขั้นตอนแรกเราต้องมาทำความรู้จักกับ Chaos Experiment กันก่อนนะครับ

  1. Steps คือการทำงานแบบตามลำดับนะครับ ถ้าอยากให้มีข้อผิดพลาดในระบบเกิดขึ้นจาก 1 -> 2 -> 3 ก็ให้เราสร้าง Step 1 -> Step 2 -> Step 3 ตามลำดับนะครับ
  2. Branch จะอยู่ภายใน Steps นะครับ โดยถ้ามีหลาย Branch จะทำงานขนานกันครับผม
  3. Selectors คือกลุ่มของเป้าหมายที่เราจะทดสอบครับ
  4. Target คือเป้าหมายที่เราทดสอบครับ

เริ่มเบยยย

1. เราจะทดสอบแบบ Agent-based นะครับ จะเป็นการทดสอบทำให้ CPU ทำงานหนักๆๆ

2. ให้ตั้งชื่อ Step, Branch ตรงนี้ชิลๆไม่มีอะไร

3. ในขั้นตอน Edit Fault ให้เลือก CPU Pressure

4. เลือก VM ที่ต้องการนะครับ

5. กดรัน ป้าปๆๆๆ แล้วเราจะพบว่าช่วงที่เรารัน Azure Chaos Studio นั้นจะพบว่า CPU พุ่งเลยครับ ซึ่งในช่วงนั้นเราก็จะทดสอบระบบของเราเองว่า ยังทำงานได้ไหม อะไรที่พังบ้าง แล้วเราก็ปรับปรุงระบบของเราเพิ่มเติมนะ

Pricing

ค่าใช้จ่ายจะคิดตามจริง ตามจำนวนนาทีที่ใช้นะครับ

โดย 1 นาที จะเสีย 0.1 USD ครับ

ในตัวอย่างผมใช้ไปประมาณ 10 นาที เท่ากับเสียค่าใช้จ่าย 1 USD

ซึ่งส่วนตัวผมถือว่าคุ้มค่ามาก เพราะผมไม่ต้องเสียเวลาพัฒนา Script ในการทำให้ CPU รัน 100% เลยครับ

ศึกษาเพิ่มเติม

microsoft/contosotraders-cloudtesting สามประสาน Playwright + Load Test + Chaos Studio
azure.microsoft.com/en-us/products/chaos-studio/

Video อธิบายนะครับ

Slide ครับผม

สรุป

Azure Studio ช่วยให้เราสามารถทดสอบการทำงานในกระบวนการ Chaos Engineering ได้อย่างมีประสิทธิภาพ และทำได้สะดวกมากๆนะครับ โดยมีข้อจำกัดที่ต้องเป็นบริการที่ใช้งานอยู่บน Azure นะครับ

หวังว่าบทความนี้จะมีประโยชน์กับผู้อ่านที่กำลังสนใจแนวทาง Chaos Engineering นะครับ

ด้วยความเคารพ

ป้องกันขยันกิน

--

--

Ponggun
T. T. Software Solution

Development Manager, Web Developer with ASP.Net, ASP.net Core, Azure and Microsoft Technologies