30 คำถามและคำตอบยอดนิยมสำหรับการสัมภาษณ์งานด้านการออกแบบระบบ (ปี 2026)

คำถามและคำตอบสัมภาษณ์การออกแบบระบบ

การเตรียมตัวสำหรับการสัมภาษณ์งานด้านการออกแบบระบบ หมายถึงการคาดการณ์ว่าผู้สัมภาษณ์จะประเมินความคิดเชิงสถาปัตยกรรมภายใต้ความกดดันอย่างไร คำถามสัมภาษณ์การออกแบบระบบ เปิดเผยรายละเอียดเชิงลึก ข้อแลกเปลี่ยน การตัดสินใจเรื่องความสามารถในการขยายขนาด และการสื่อสารผ่านการสนทนาที่มีโครงสร้าง

การเตรียมตัวที่ดีจะเปิดโอกาสในบทบาทต่างๆ ทั้งแพลตฟอร์มคลาวด์ ระบบกระจาย และวิศวกรรมข้อมูล โดยพิสูจน์ความเชี่ยวชาญทางเทคนิคผ่านการวิเคราะห์จริง ผู้เชี่ยวชาญที่ทำงานในสาขานี้จะสร้างทักษะเชิงปฏิบัติ สนับสนุนทีม ช่วยผู้จัดการในการตัดสินใจ และตอบคำถามทั่วไปที่ครอบคลุมตั้งแต่ระดับเริ่มต้นจนถึงระดับสูง รวมถึงมุมมองขั้นสูง พื้นฐาน และทางเทคนิคในระดับโลกในปัจจุบัน
อ่านเพิ่มเติม ...

👉 ดาวน์โหลด PDF ฟรี: คำถามและคำตอบสำหรับการสัมภาษณ์งานด้านการออกแบบระบบ

คำถามและคำตอบสัมภาษณ์การออกแบบระบบยอดนิยม

1) อธิบายว่าการออกแบบระบบคืออะไร และเหตุใดจึงมีความสำคัญในวิศวกรรมซอฟต์แวร์

การออกแบบระบบคือ กระบวนการกำหนดสถาปัตยกรรม ส่วนประกอบ อินเทอร์เฟซ และข้อมูลสำหรับระบบ เพื่อตอบสนองความต้องการเฉพาะเจาะจงในลักษณะที่ปรับขนาดได้ เชื่อถือได้ และบำรุงรักษาได้ มันเชื่อมโยงเป้าหมายระดับสูง (สิ่งที่ระบบควรทำได้) กับการตัดสินใจที่เป็นรูปธรรมเกี่ยวกับเทคโนโลยี โปรโตคอล และรูปแบบสถาปัตยกรรม การออกแบบระบบที่แข็งแกร่งช่วยให้มั่นใจได้ว่าแอปพลิเคชันทำงานได้ดีภายใต้ภาระงาน มีความทนทานต่อข้อผิดพลาด และสามารถพัฒนาไปได้ตลอดเวลาโดยไม่ต้องเขียนใหม่ทั้งหมด

ในการสัมภาษณ์ สิ่งนี้แสดงให้เห็นถึงความสามารถของคุณในการสร้างสมดุล ความต้องการการทำงาน สีสดสวย ข้อจำกัดที่ไม่เกี่ยวข้องกับการทำงาน เช่น ความสามารถในการขยายขนาด ความหน่วงเวลา ความสม่ำเสมอ และความพร้อมใช้งาน บริษัทเทคโนโลยีชั้นนำทุกแห่งจะประเมินทักษะการออกแบบระบบของผู้สมัครเพื่อวัดวิจารณญาณด้านวิศวกรรมในโลกแห่งความเป็นจริง


2) ในสถาปัตยกรรมระบบ คุณแยกแยะความแตกต่างระหว่างการออกแบบระดับสูง (High-Level Design: HLD) กับการออกแบบระดับต่ำ (Low-Level Design: LLD) ได้อย่างไร?

การออกแบบระดับสูง (HLD) มุ่งเน้นไปที่ ภาพรวมทางสถาปัตยกรรมและส่วนประกอบหลัก โดยไม่ต้องเจาะลึกรายละเอียดการใช้งาน มันแสดงให้เห็นว่าระบบต่างๆ ทำงานร่วมกันอย่างไร — เช่น เว็บเซิร์ฟเวอร์, ฐานข้อมูล, แคช, API เกตเวย์และ ระบบส่งข้อความ.

การออกแบบระดับต่ำ (LLD) ลงลึกไปในรายละเอียดมากขึ้น คำจำกัดความของคลาส เมธอด โครงสร้างข้อมูล และตรรกะโดยละเอียด ภายในแต่ละส่วนประกอบ HLD เกี่ยวข้องกับส่วนประกอบที่คุณจะใช้และวิธีการทำงานร่วมกันของส่วนประกอบเหล่านั้น ในขณะที่ LLD เกี่ยวข้องกับวิธีการที่คุณจะนำการทำงานร่วมกันเหล่านั้นไปใช้ การเข้าใจทั้งสองส่วนนี้จะช่วยให้ผู้สัมภาษณ์ประเมินความคิดในภาพรวมของคุณได้ดียิ่งขึ้น รวมถึงความสามารถด้านวิศวกรรมในรายละเอียดของคุณด้วย


3) ตัวชี้วัดประสิทธิภาพหลักที่คุณควรพิจารณาในการออกแบบระบบมีอะไรบ้าง และเพราะเหตุใด?

ตัวชี้วัดประสิทธิภาพช่วยวัดว่าระบบตอบสนองความต้องการของผู้ใช้และธุรกิจได้ดีเพียงใด ตัวชี้วัดหลักได้แก่:

  • แฝง: เวลาที่ใช้ในการประมวลผลคำขอแต่ละรายการ ยิ่งเวลาแฝงน้อย การตอบสนองก็จะยิ่งเร็วขึ้น
  • ผ่าน: ปริมาณงานที่ประมวลผลในช่วงเวลาหนึ่ง (เช่น จำนวนคำขอต่อวินาที) อัตราการประมวลผลที่สูงขึ้นแสดงถึงประสิทธิภาพภายใต้ภาระงานที่สูงขึ้น
  • สถานะ: สัดส่วนของเวลาที่ระบบสามารถใช้งานได้ ความพร้อมใช้งานสูงมีความสำคัญอย่างยิ่งสำหรับบริการระดับโลก

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

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

4) อธิบายการกระจายภาระงาน (load balancing) และเหตุใดจึงมีความสำคัญอย่างยิ่งในระบบแบบกระจาย (distributed systems)

การปรับสมดุลภาระงานคือกระบวนการของ กระจายคำขอที่เข้ามาไปยังเซิร์ฟเวอร์หรือบริการหลายแห่ง เพื่อป้องกันไม่ให้โหนดใดโหนดหนึ่งกลายเป็นคอขวด ช่วยให้มั่นใจได้ว่ามีการใช้ความจุอย่างเหมาะสม ปรับปรุงเวลาตอบสนอง และเพิ่มความน่าเชื่อถือของระบบโดยการส่งต่อทราฟฟิกออกจากอินสแตนซ์ที่ทำงานผิดปกติ

อุปกรณ์กระจายโหลดมีหลายประเภท A ชั้น 4 (L4) ตัวปรับสมดุลทำงานที่เลเยอร์การขนส่ง (IP/พอร์ต) ในขณะที่ ชั้น 7 (L7) ตัวปรับสมดุลโหลดทำงานที่เลเยอร์แอปพลิเคชัน โดยเข้าใจความหมายของ HTTP/S การปรับสมดุลโหลดมีความสำคัญอย่างยิ่งต่อความทนทานต่อข้อผิดพลาด การขยายขนาดโดยไม่หยุดชะงัก และการอัปเดตแบบต่อเนื่องในระบบการผลิต การตอบคำถามนี้ได้ดีแสดงให้เห็นว่าคุณเข้าใจถึงข้อแลกเปลี่ยนพื้นฐานของระบบกระจายระหว่างประสิทธิภาพ ความสม่ำเสมอ และต้นทุน


5) คุณจะออกแบบบริการ TinyURL อย่างไร? อธิบายส่วนประกอบหลักและขั้นตอนต่างๆ

การออกแบบบริการ TinyURL ครอบคลุมทั้งข้อกำหนดด้านฟังก์ชันการทำงาน (การย่อ URL การเปลี่ยนเส้นทางผู้ใช้) และข้อกำหนดที่ไม่ใช่ฟังก์ชันการทำงาน (ความสามารถในการขยายขนาด ความเป็นเอกลักษณ์ ประสิทธิภาพ)

ขั้นแรก การตั้งคำถามเพื่อความชัดเจนจะช่วยกำหนดข้อจำกัดต่างๆ เช่น ปริมาณที่คาดการณ์ไว้ นโยบายการหมดอายุ ความต้องการด้านการวิเคราะห์ เป็นต้น ส่วนประกอบหลักมีดังนี้:

  • ชั้น API: รับและประมวลผลคำขอตัดย่อ/เปลี่ยนเส้นทาง
  • ฐานข้อมูลและการแคช: จัดเก็บการจับคู่ URL ต้นฉบับกับ URL ที่ย่อแล้ว การแคชช่วยเพิ่มประสิทธิภาพในการอ่าน
  • ตัวสร้างรหัสย่อ: ใช้การแฮชหรือรหัสประจำตัวที่ไม่ซ้ำกันที่เข้ารหัสแบบฐาน

เพื่อสร้างรหัสเฉพาะได้อย่างมีประสิทธิภาพ คุณอาจทำดังนี้:

  • ใช้ การเข้ารหัสฐาน 62 ของรหัสลำดับ (เช่น 1 → a, 2 → b เป็นต้น)
  • ใช้ ฟังก์ชันแฮชพร้อมการแก้ไขการชนกัน.

นอกจากนี้ คุณควรพิจารณาเรื่องการวิเคราะห์ข้อมูล การจำกัดอัตราการใช้งาน และการจัดการ URL ที่มีการใช้งานบ่อยด้วยการแคชหรือ CDN เพื่อลดภาระการทำงาน การอธิบายข้อดีข้อเสียเหล่านี้แสดงให้เห็นถึงความเข้าใจอย่างลึกซึ้งทั้งในด้านรูปแบบการออกแบบและการพิจารณาเรื่องความสามารถในการขยายขนาด


6) การแคชคืออะไร และช่วยเพิ่มประสิทธิภาพของระบบได้อย่างไร?

ร้านค้าแคช ข้อมูลที่เข้าถึงบ่อยหรือมีต้นทุนการประมวลผลสูง ในสื่อจัดเก็บข้อมูลที่เร็วกว่า (หน่วยความจำ, แคชแบบกระจาย) เพื่อลดการประมวลผลซ้ำและการโหลดฐานข้อมูล ช่วยปรับปรุงความหน่วงและปริมาณงานได้อย่างมากโดยการตอบสนองคำขอที่ได้รับความนิยมอย่างรวดเร็ว

การแคชสามารถเกิดขึ้นได้หลายระดับ: หน่วยความจำของแอปพลิเคชัน, Redis/Ehcacheเซิร์ฟเวอร์ CDN edge หรือพื้นที่จัดเก็บข้อมูลในเครื่องของเบราว์เซอร์ แม้ว่าการแคชจะช่วยลดเวลาตอบสนอง แต่ก็ทำให้เกิดปัญหาเรื่องข้อมูลล้าสมัยและการทำให้แคชไม่ถูกต้อง ซึ่งคุณต้องจัดการในระหว่างการออกแบบ ตัวอย่างเช่น คุณอาจใช้นโยบายเวลาในการคงอยู่ (TTL) หรือกลยุทธ์การทำให้แคชไม่ถูกต้องเมื่อข้อมูลพื้นฐานเปลี่ยนแปลง คำตอบที่ดีแสดงให้เห็นว่าคุณเข้าใจทั้งสองด้าน ประโยชน์และข้อผิดพลาด ของการแคช


7) อธิบายทฤษฎี CAP และผลกระทบของทฤษฎีนี้ต่อการออกแบบระบบกระจาย

ทฤษฎีบท CAP ระบุว่า ในระบบกระจาย คุณสามารถเลือกรับประกันได้มากที่สุดสองข้อจากสามข้อต่อไปนี้:

  1. สอดคล้อง: โหนดทุกโหนดจะเห็นข้อมูลเดียวกันในเวลาเดียวกัน
  2. สถานะ: ทุกคำขอจะได้รับการตอบกลับ (โดยไม่มีการรับประกันความถูกต้อง)
  3. ค่าความคลาดเคลื่อนของพาร์ติชั่น: ระบบยังคงทำงานต่อไปได้แม้ว่าเครือข่ายจะล้มเหลวก็ตาม

ไม่มีระบบกระจายศูนย์ใดที่ใช้งานได้จริงสามารถบรรลุเป้าหมายทั้งสามอย่างพร้อมกันได้ในกรณีที่มีการแบ่งส่วนเครือข่าย ตัวอย่างเช่น ในระหว่างการแบ่งส่วนเครือข่าย ระบบจะต้องเลือกระหว่างการให้บริการข้อมูลที่ล้าสมัย (ความพร้อมใช้งาน) หรือการปฏิเสธคำขอจนกว่าความสอดคล้องจะกลับมา (ความสอดคล้อง) การทำความเข้าใจ CAP จะแสดงให้เห็นว่าคุณสามารถตัดสินใจได้อย่างชาญฉลาดโดยพิจารณาจากลำดับความสำคัญในการดำเนินงาน ซึ่งเป็นทักษะสำคัญในการสัมภาษณ์งานด้านการออกแบบระบบ


8) ในภาพรวมแล้ว คุณจะออกแบบบริการส่งข้อความแชทแบบ WhatsApp อย่างไร?

ในการออกแบบระบบแชทที่ใช้งานได้ในระดับใหญ่ เริ่มต้นด้วยการระบุข้อกำหนดหลัก ได้แก่ การส่งข้อความแบบเรียลไทม์ การคงอยู่ของข้อความ การเรียงลำดับข้อความ การรองรับการใช้งานแบบออฟไลน์ และความสามารถในการขยายขนาด

ในระดับสูง:

  • Clients เชื่อมต่อผ่านเว็บ/มือถือไปยังเซิร์ฟเวอร์เกตเวย์
  • เราเตอร์ข้อความ จัดการข้อความขาเข้าและส่งต่อไปยังผู้รับ (ผ่านการเชื่อมต่อแบบถาวร เช่น WebSockets)
  • ฐานข้อมูล บันทึกประวัติข้อความ พร้อมแบ่งพาร์ติชันอย่างเหมาะสมสำหรับฐานผู้ใช้ขนาดใหญ่

ส่วนประกอบเพิ่มเติม ได้แก่ แคชสำหรับแชทล่าสุด คิวสำหรับการส่งแบบอะซิงโครนัส และบริการแจ้งเตือนสำหรับผู้ใช้ที่ออฟไลน์ คุณควรหารือเกี่ยวกับเรื่องนี้ วิธีการจัดเก็บ เรียงลำดับ และส่งข้อความไปยังอุปกรณ์หลายเครื่องของผู้ใช้แต่ละราย และวิธีการจัดการระบบสำรองข้อมูลและการทนต่อความผิดพลาด


9) การแบ่งส่วนข้อมูล (Sharding) คืออะไร และช่วยในการขยายขนาดฐานข้อมูลได้อย่างไร?

การแบ่งส่วน (Sharding) เป็นรูปแบบหนึ่งของ มาตราส่วนแนวนอน โดยที่ชุดข้อมูลขนาดใหญ่จะถูกแบ่งออกเป็นส่วนย่อยๆ ที่เป็นอิสระต่อกัน เรียกว่า ชาร์ด (shard) แต่ละชาร์ดจะถูกจัดเก็บไว้ในโหนดฐานข้อมูลที่แตกต่างกัน วิธีนี้ช่วยเพิ่มประสิทธิภาพและความสามารถในการขยายขนาดโดยการกระจายภาระงานของข้อมูลและคำสั่งค้นหาไปยังเครื่องหลายเครื่องแทนที่จะขยายขนาดเฉพาะอินสแตนซ์เดียว

ข้อมูลสามารถแบ่งออกเป็นส่วนย่อยได้ตามรหัสลูกค้า ภูมิภาค หรือการแฮช การแบ่งส่วนย่อยช่วยลดภาระต่อโหนด แต่ก็เพิ่มความซับซ้อนในการค้นหาข้อมูลข้ามส่วนย่อยและการปรับสมดุลเมื่อเพิ่มหรือลบโหนด ผู้สัมภาษณ์คาดหวังว่าคุณจะเข้าใจข้อดีข้อเสียเหล่านี้ และวิธีที่การแฮชแบบสม่ำเสมอหรือตัวจัดการส่วนย่อยสามารถช่วยให้การดำเนินงานง่ายขึ้น


10) อธิบายความแตกต่างระหว่าง API และไมโครเซอร์วิส กับสถาปัตยกรรมแบบโมโนลิธ

A Monolithic architecture การรวมส่วนประกอบทั้งหมดของแอปพลิเคชันเข้าไว้ในหน่วยเดียวที่สามารถใช้งานได้นั้น ช่วยให้การพัฒนาทำได้ง่ายขึ้นในตอนเริ่มต้น แต่จะทำให้การขยายขนาด การบำรุงรักษา และการอัปเดตทำได้ยากขึ้นในระยะยาว

Microservices แบ่งระบบออกเป็นส่วนๆ บริการขนาดเล็กที่สามารถใช้งานได้อย่างอิสระแต่ละบริการมีหน้าที่รับผิดชอบด้านความสามารถทางธุรกิจเฉพาะด้าน API (Application Programming Interfaces) ช่วยให้สามารถสื่อสารระหว่างบริการเหล่านี้ได้

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

ไมโครเซอร์วิสช่วยเพิ่มความสามารถในการปรับขนาดและความยืดหยุ่นในการใช้งาน แต่ต้องใช้เครื่องมือปฏิบัติการขั้นสูง (การค้นหาบริการ การติดตาม และการทนต่อข้อผิดพลาด) การพูดคุยในประเด็นนี้แสดงให้เห็นว่าคุณสามารถคิดวิเคราะห์เกี่ยวกับการวิวัฒนาการของสถาปัตยกรรมและข้อแลกเปลี่ยนระหว่างความเรียบง่ายและความยืดหยุ่นได้


11) เครือข่ายส่งเนื้อหา (CDN) ทำงานอย่างไร และมีข้อดีอย่างไรบ้าง?

A เครือข่ายการจัดส่งเนื้อหา (CDN) เป็นเครือข่ายกระจายของพร็อกซีเซิร์ฟเวอร์ที่ตั้งอยู่ในตำแหน่งที่เหมาะสมในภูมิภาคทางภูมิศาสตร์ต่างๆ เป้าหมายหลักคือ ส่งมอบเนื้อหาให้กับผู้ใช้ด้วยความล่าช้าน้อยที่สุด โดยให้บริการจากเซิร์ฟเวอร์ที่อยู่ใกล้ที่สุด (ซึ่งเรียกว่าโหนดขอบ)

เมื่อผู้ใช้ร้องขอทรัพยากรบนเว็บ (เช่น รูปภาพ วิดีโอ หรือไฟล์คงที่) CDN จะแคชเนื้อหาและส่งตรงจากเซิร์ฟเวอร์ Edge หากเนื้อหาไม่อยู่ในแคช ระบบจะดึงเนื้อหาจากเซิร์ฟเวอร์ต้นทางและจัดเก็บไว้สำหรับการร้องขอครั้งต่อไป

ข้อดีของ CDN:

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

CDN มีความสำคัญอย่างยิ่งสำหรับระบบระดับโลก เช่น Netflix, YouTubeหรือแพลตฟอร์มอีคอมเมิร์ซ เพื่อให้มั่นใจถึงประสิทธิภาพและความพร้อมใช้งานในระดับสูง


12) การจำกัดอัตรา (Rate limiting) คืออะไร และเหตุใดจึงมีความสำคัญในการออกแบบ API?

อัตราจำกัด จำกัดจำนวนคำขอที่ไคลเอ็นต์สามารถส่งไปยัง API ภายในระยะเวลาที่กำหนด ซึ่งมีความสำคัญอย่างยิ่งสำหรับ การป้องกันการละเมิด, รักษาการใช้งานอย่างเป็นธรรมและ การปกป้องบริการแบ็กเอนด์ จากการโอเวอร์โหลดหรือการโจมตีแบบปฏิเสธการให้บริการ (DoS)

อัลกอริทึมที่ใช้กันทั่วไปสำหรับการจำกัดอัตรา ได้แก่:

  • เคาน์เตอร์หน้าต่างคงที่ — เรียบง่าย แต่Hอาจทำให้เกิดการกระชากของค่าที่ขอบเขตของหน้าต่างได้
  • บานเลื่อน / หน้าต่างบานเลื่อน — ช่วยให้การจัดการคำขอราบรื่นยิ่งขึ้น
  • ถังโทเค็น / ถังรั่ว — อนุญาตให้มีการใช้งานเพิ่มขึ้นอย่างรวดเร็วภายในขอบเขตที่กำหนด และรักษาระดับการไหลของคำขอให้คงที่

ตัวอย่างเช่น GitHub จำกัดการเรียกใช้ API ไว้ที่ 5000 ครั้งต่อชั่วโมงต่อผู้ใช้ การกำหนดขีดจำกัดอัตราการใช้งานช่วยให้ระบบมีความเสถียรและปรับปรุงคุณภาพการบริการโดยรวม


13) คุณจะมั่นใจได้อย่างไรว่าข้อมูลมีความสอดคล้องกันในระบบกระจายต่างๆ?

การรักษาความสม่ำเสมอในระบบกระจายศูนย์เป็นเรื่องท้าทายเนื่องจากการจำลองข้อมูลและความหน่วงของเครือข่าย มีกลยุทธ์หลายอย่างขึ้นอยู่กับความสมดุลที่ต้องการระหว่างความสม่ำเสมอและความพร้อมใช้งาน:

ประเภทความสม่ำเสมอ Descriptไอออน ใช้กรณี
ความสอดคล้องที่แข็งแกร่ง ลูกค้าทุกรายเห็นข้อมูลเดียวกันได้ทันที ระบบธนาคาร
ความสอดคล้องในที่สุด การอัปเดตจะเผยแพร่แบบไม่พร้อมกัน อนุญาตให้มีความแตกต่างชั่วคราวได้ ฟีดโซเชียลมีเดีย
ความสอดคล้องเชิงสาเหตุ รักษาลำดับเหตุและผล แอปพลิเคชันสำหรับการทำงานร่วมกัน

เทคนิคอย่าง บันทึกการเขียนล่วงหน้า, นาฬิกาเวกเตอร์, อัลกอริทึมฉันทามติ (Raft, Paxos)และ การยืนยันสองขั้นตอน (2PC) ช่วยรักษาความสอดคล้องกัน ผู้สัมภาษณ์คาดหวังให้คุณอธิบาย when เพื่อลดความเข้มงวดในเรื่องความสม่ำเสมอ เพื่อเพิ่มประสิทธิภาพและขีดความสามารถในการขยายขนาด


14) อธิบายความแตกต่างระหว่างการปรับขนาดแนวนอนและการปรับขนาดแนวตั้ง

การปรับขนาดหมายถึงการเพิ่มขีดความสามารถของระบบเพื่อรองรับภาระงานที่มากขึ้น โดยมีสองประเภทหลัก ได้แก่:

ประเภทการปรับขนาด วิธี ข้อดี ข้อเสีย
การขยายขนาดในแนวตั้ง (Scale-Up) เพิ่มทรัพยากร (ซีพียู, แรม) ให้กับเครื่องเดียว ง่ายต่อการใช้งาน ข้อจำกัดของฮาร์ดแวร์ จุดล้มเหลวเพียงจุดเดียว
การขยายขนาดในแนวนอน (Scale-Out) เพิ่มเครื่องจักรเพื่อช่วยกระจายภาระงาน ความพร้อมใช้งานสูง คุ้มค่า มีความซับซ้อนในการจัดการและประสานงาน

ตัวอย่างเช่น การเพิ่มจำนวนซีพียูในเว็บเซิร์ฟเวอร์จาก 2 ตัวเป็น 8 ตัว เรียกว่าการขยายขนาดในแนวตั้ง (Vertical Scaling) ในขณะที่การเพิ่มเซิร์ฟเวอร์หลายตัวไว้ด้านหลังตัวกระจายโหลด (Load Balancer) เรียกว่าการขยายขนาดในแนวนอน (Horizontal Scaling) ระบบกระจายแบบสมัยใหม่ เช่น Kubernetes นิยมการขยายขนาดในแนวตั้ง มาตราส่วนแนวนอน เพื่อความยืดหยุ่น


15) คิวข้อความคืออะไร และเหตุใดจึงใช้ในสถาปัตยกรรมแบบกระจาย?

A คิวข้อความ แยกส่วนผู้ผลิตและผู้บริโภคออกจากกันโดยการจัดเก็บข้อความไว้ชั่วคราวจนกว่าจะได้รับการประมวลผล ซึ่งช่วยให้ การสื่อสารแบบอะซิงโครนัสเพื่อเพิ่มความยืดหยุ่นและความสามารถในการขยายขนาดในระบบกระจายศูนย์

โบรกเกอร์ข้อความยอดนิยม ได้แก่ RabbitMQ, Kafka, Amazon ตรและ Google Pub/Sub.

ประโยชน์ที่ได้รับ:

  • ช่วยลดความผันผวนของปริมาณการจราจร
  • บริการแยกส่วน
  • เปิดใช้งานกลไกการลองใหม่และการรักษาความต่อเนื่อง
  • ช่วยเพิ่มความทนทานต่อข้อผิดพลาด

ตัวอย่าง: ในแพลตฟอร์มอีคอมเมิร์ซ บริการรับคำสั่งซื้อสามารถเผยแพร่ข้อความ ("คำสั่งซื้อเสร็จสมบูรณ์") ซึ่งบริการจัดการสินค้าคงคลังและบริการเรียกเก็บเงินจะนำไปใช้โดยอิสระ หลีกเลี่ยงการพึ่งพาโดยตรง


16) คุณจะออกแบบระบบจัดเก็บไฟล์ที่ปรับขนาดได้เช่นอย่างไร Google Drive or Dropbox?

ในการออกแบบระบบจัดเก็บไฟล์บนคลาวด์ ให้แบ่งระบบออกเป็นส่วนประกอบหลักดังนี้:

  • บริการส่วนหน้า: รองรับการอัปโหลด/ดาวน์โหลดไฟล์ผ่าน REST API
  • บริการข้อมูลเมตา: จัดเก็บข้อมูลความเป็นเจ้าของไฟล์ สิทธิ์การเข้าถึง และประวัติเวอร์ชัน
  • บริการจัดเก็บข้อมูล: จัดการส่วนย่อยของไฟล์ในระบบจัดเก็บข้อมูลแบบกระจาย (เช่น S3, HDFS)
  • การจัดเป็นกลุ่ม: ไฟล์จะถูกแบ่งออกเป็นส่วนย่อยๆ (เช่น 4 เมกะไบต์) เพื่อการจัดเก็บและการส่งข้อมูลที่มีประสิทธิภาพ

ความท้าทายรวมถึงการรับประกัน การขจัดข้อมูลซ้ำซ้อน, ความมั่นคงและ การซิงค์การเปลี่ยนแปลง ใช้งานได้กับอุปกรณ์หลากหลายประเภท การนำการซิงค์ระดับบล็อกและการแฮชเนื้อหามาใช้จะช่วยให้การใช้แบนด์วิดท์มีประสิทธิภาพและรักษาความถูกต้องแม่นยำ


17) ปัจจัยสำคัญที่ควรพิจารณาในการออกแบบโครงสร้างฐานข้อมูลที่สามารถขยายขนาดได้มีอะไรบ้าง?

โครงสร้างข้อมูลที่ปรับขนาดได้นั้นต้องสร้างสมดุลระหว่างประสิทธิภาพ ความยืดหยุ่น และความสามารถในการบำรุงรักษา ปัจจัยสำคัญที่ควรพิจารณา ได้แก่:

  • การแบ่งพาร์ติชันข้อมูล (การแบ่งส่วน) เพื่อรองรับการเติบโต
  • การทำให้เป็นมาตรฐานกับการทำให้เป็นปกติ: ปรับรูปแบบให้เป็นมาตรฐานเพื่อความสมบูรณ์ของข้อมูล ลดการปรับรูปแบบให้เป็นปกติเพื่อประสิทธิภาพในการประมวลผลข้อมูลที่มีการอ่านสูง
  • กลยุทธ์การจัดทำดัชนี สำหรับการค้นหาอย่างรวดเร็ว
  • การแคชและการจำลองข้อมูล เพื่อรองรับปริมาณการจราจรที่หนาแน่น

ตัวอย่าง: ในแอปพลิเคชันโซเชียลมีเดีย ข้อมูลผู้ใช้และโพสต์สามารถจัดเก็บแยกกันได้เพื่อลดการเชื่อมโยงและปรับปรุงประสิทธิภาพการค้นหา การตัดสินใจเกี่ยวกับการออกแบบ Schema ควรสอดคล้องกับ รูปแบบการเข้าถึง และ ความถี่ในการสอบถาม.


18) การใช้สถาปัตยกรรมไมโครเซอร์วิสมีข้อดีและข้อเสียอย่างไรบ้าง?

ไมโครเซอร์วิสได้กลายเป็นหัวใจสำคัญของแอปพลิเคชันบนคลาวด์สมัยใหม่ แต่ก็มีข้อเสียอยู่บ้างเช่นกัน

ข้อดี ข้อเสีย
การติดตั้งและปรับขนาดอย่างอิสระ เพิ่มความซับซ้อนในการปฏิบัติงาน
การแยกความผิดพลาดและความยืดหยุ่น การดีบักแบบกระจายทำได้ยากกว่า
การนำเทคโนโลยีมาใช้ได้ง่ายขึ้น จำเป็นต้องมีวัฒนธรรม DevOps ที่แข็งแกร่ง
ความสามารถในการบำรุงรักษาโค้ดที่ดีขึ้น ความหน่วงสูงขึ้นเนื่องจากการส่งต่อข้อมูลผ่านเครือข่าย

ไมโครเซอร์วิสเหมาะสำหรับระบบขนาดใหญ่ที่เปลี่ยนแปลงอยู่ตลอดเวลา แต่ต้องการการตรวจสอบที่แข็งแกร่ง เกตเวย์ API และกลยุทธ์การสื่อสารระหว่างเซอร์วิส


19) คุณจะจัดการกับการจำลองฐานข้อมูลในระบบขนาดใหญ่ได้อย่างไร?

การจำลองฐานข้อมูล เกี่ยวข้องกับการคัดลอกข้อมูลจากฐานข้อมูลหลักไปยังฐานข้อมูลสำรองหนึ่งฐานหรือมากกว่า เพื่อปรับปรุงความพร้อมใช้งานและประสิทธิภาพการอ่าน มีสองประเภทหลัก:

ประเภทการจำลองแบบ Descriptไอออน ใช้กรณี
Syncมีเกียรติ การเปลี่ยนแปลงจะถูกบันทึกไปยังสำเนาทันที ความสม่ำเสมอที่แข็งแกร่ง
ไม่ตรงกัน เซิร์ฟเวอร์หลักจะยืนยันการเขียนก่อนที่เซิร์ฟเวอร์สำรองจะอัปเดต ประสิทธิภาพที่ดีขึ้น

การจำลองแบบช่วยเพิ่มประสิทธิภาพ ความทนทานต่อความผิดพลาด, เปิดใช้งาน การกระจายทางภูมิศาสตร์และสนับสนุน การปรับขนาดการอ่าน (อ่านสำเนา) อย่างไรก็ตาม มันก่อให้เกิดความท้าทาย เช่น ความล่าช้าในการจำลองข้อมูลและการแก้ไขข้อขัดแย้ง เครื่องมือต่างๆ เช่น MySQL การจำลองแบบกลุ่ม, MongoDB ชุดจำลองและ PostgreSQL การจำลองแบบสตรีมมิ่ง เป็นโซลูชันมาตรฐาน


20) สถาปัตยกรรมแบบขับเคลื่อนด้วยเหตุการณ์คืออะไร และมีประโยชน์มากที่สุดในด้านใด?

สถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ (Event-driven architecture หรือ EDA) คือกระบวนทัศน์การออกแบบที่ส่วนประกอบต่างๆ สื่อสารกันผ่านเหตุการณ์ เหตุการณ์ — ข้อความที่บ่งบอกถึงการเปลี่ยนแปลงสถานะหรือการกระทำ แทนที่จะส่งคำขอโดยตรง บริการจะเผยแพร่และสมัครรับเหตุการณ์แบบอะซิงโครนัส

การออกแบบนี้เหมาะสำหรับ ระบบที่เชื่อมต่อกันอย่างหลวมๆเช่น แพลตฟอร์ม IoT, อีคอมเมิร์ซ และระบบวิเคราะห์ข้อมูลแบบเรียลไทม์

ประโยชน์ที่ได้รับ:

  • ความยืดหยุ่นสูง
  • ส่วนประกอบที่แยกออกจากกัน
  • การตอบสนองแบบเรียลไทม์

ตัวอย่าง: ในสถาปัตยกรรมของ Uber เมื่อมีการจองรถ ระบบจะกระตุ้นการอัปเดตในระบบราคา การจับคู่คนขับ และการแจ้งเตือนพร้อมกันทั้งหมด โดยไม่เชื่อมโยงกันอย่างแน่นหนา


21) ในการออกแบบระบบ ความสามารถในการสร้างผลลัพธ์ซ้ำได้ (idempotency) คืออะไร และเหตุใดจึงมีความสำคัญ?

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

ตัวอย่างเช่น:

  • GET และ ลบ โดยธรรมชาติแล้ว การร้องขอจะไม่เปลี่ยนแปลงสถานะ (การร้องขอซ้ำๆ จะไม่ทำให้สถานะเปลี่ยนไป)
  • POST คำขอต่างๆ (เช่น การสร้างธุรกรรม) จะไม่แสดงผลลัพธ์ซ้ำซ้อน เว้นแต่จะถูกออกแบบมาให้เป็นเช่นนั้นโดยเฉพาะ

เพื่อนำคุณสมบัติ idempotency มาใช้:

  • ใช้ รหัสคำขอที่ไม่ซ้ำกัน เพื่อติดตามการส่งผลงานซ้ำซ้อน
  • บำรุงรักษา บันทึกการทำธุรกรรม เพื่อละเว้นการดำเนินการซ้ำๆ

หลักการนี้มีความสำคัญอย่างยิ่งใน เกตเวย์การชำระเงิน, การประมวลผลคำสั่งและ ระบบอีเมล ซึ่งการกระทำที่ซ้ำซ้อนอาจก่อให้เกิดความไม่สอดคล้องกันอย่างรุนแรง


22) จงอธิบายแนวคิดเรื่องความสอดคล้องในที่สุด (eventual consistency) พร้อมยกตัวอย่างประกอบ

ความสอดคล้องในที่สุด เป็นโมเดลในฐานข้อมูลแบบกระจายศูนย์ที่การอัปเดตจะไม่ปรากฏให้เห็นทันทีในทุกโหนด แต่ ระบบจะค่อยๆ เข้าสู่สถานะที่สอดคล้องกันเมื่อเวลาผ่านไป.

ตัวอย่าง:

In Amazon's DynamoDBเมื่อมีการอัปเดตข้อมูลในภูมิภาคหนึ่ง ข้อมูลในสำเนาของภูมิภาคอื่นอาจแสดงข้อมูลเก่าชั่วคราว แต่ในที่สุดข้อมูลเหล่านั้นจะซิงโครไนซ์กันผ่านการจำลองข้อมูลในเบื้องหลัง

โมเดลนี้มีประโยชน์ในระบบการจัดลำดับความสำคัญ ความพร้อมใช้งาน เกินกว่า ความสอดคล้องอย่างเคร่งครัดเช่น:

  • ไทม์ไลน์โซเชียลมีเดีย
  • ระบบแคช
  • ระเบียน DNS

จุดแลกเปลี่ยนที่สำคัญอยู่ที่ระหว่าง ความทนทานต่อความเก่า และ ความเร็วในการตอบสนอง.


23) คุณจะออกแบบระบบแจ้งเตือนที่รองรับหลายช่องทาง (อีเมล, SMS, การแจ้งเตือนแบบพุช) อย่างไร?

การออกแบบระบบแจ้งเตือนที่ปรับขนาดได้นั้น จำเป็นต้องอาศัยความเป็นโมดูลและความยืดหยุ่น

Archiเทคเจอร์:

  1. API การแจ้งเตือน – รับคำขอแจ้งเตือนจากแอปพลิเคชันต่างๆ
  2. คิว/บัสข้อความ – จัดเก็บและเผยแพร่เหตุการณ์ (Kafka, SQS)
  3. บริการแรงงาน – ตัวประมวลผลเฉพาะช่องทาง (อีเมล, SMS, การแจ้งเตือนแบบพุช)
  4. ผู้ให้บริการจัดส่ง – เชื่อมต่อกับ API ภายนอก เช่น Twilio หรือ Firebase
  5. ฐานข้อมูลการตั้งค่าผู้ใช้ – บันทึกการตั้งค่าการเลือกเข้าร่วม/ไม่เข้าร่วม และการตั้งค่าความถี่ในการจัดเก็บ

ข้อควรพิจารณาที่สำคัญ:

  • ลองส่งซ้ำในกรณีที่การส่งล้มเหลวโดยใช้กลยุทธ์การหน่วงเวลา (backoff strategies)
  • ใช้เทมเพลตเพื่อให้เกิดความสม่ำเสมอ
  • สนับสนุนการจัดลำดับความสำคัญ (ข้อความเร่งด่วนเทียบกับข้อความที่มีลำดับความสำคัญต่ำ)

การออกแบบแบบแยกส่วนนี้ช่วยให้มั่นใจได้ถึงความน่าเชื่อถือและความสามารถในการขยายระบบเมื่อช่องทางการแจ้งเตือนใหม่ๆ เกิดขึ้น


24) การทำดัชนีฐานข้อมูลคืออะไร และส่งผลต่อประสิทธิภาพอย่างไร?

A ดัชนีฐานข้อมูล คือโครงสร้างข้อมูล (โดยทั่วไปคือ B-tree หรือ hash table) ที่ช่วยเพิ่มความเร็วในการค้นหาข้อมูลโดยลดจำนวนระเบียนที่ฐานข้อมูลต้องสแกน

ตัวอย่างเช่น การสร้างดัชนีให้กับคอลัมน์อีเมลในตารางผู้ใช้ จะช่วยให้ระบบฐานข้อมูลค้นหาผู้ใช้ด้วยอีเมลได้อย่างรวดเร็ว โดยไม่ต้องสแกนทั้งตาราง

แง่มุม พร้อมดัชนี ไม่มีดัชนี
ความเร็วในการค้นหา ค้นหาอย่างรวดเร็ว การสแกนแบบลำดับช้า
ความเร็วในการเขียน ช้าลง (ต้องอัปเดตดัชนี) เขียนได้เร็วขึ้น
พื้นที่จัดเก็บ พื้นที่ดิสก์เพิ่มขึ้น Less การเก็บรักษา

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


25) คุณจะมั่นใจได้อย่างไรว่าระบบกระจายขนาดใหญ่มีความทนทานต่อข้อผิดพลาด?

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

กลยุทธ์ประกอบด้วย:

  • การจำลองแบบ: มีข้อมูลหรือบริการซ้ำซ้อนกันในหลายภูมิภาค
  • กลไกการสลับระบบเมื่อเกิดข้อผิดพลาด: ส่งต่อคำขอไปยังโหนดที่ทำงานได้ปกติโดยอัตโนมัติ
  • การตรวจสอบสุขภาพและการจัดการโหลด: ตรวจจับและแยกส่วนที่ผิดปกติออก
  • เบรกเกอร์วงจร: ป้องกันการเกิดข้อผิดพลาดต่อเนื่องระหว่างบริการที่เกี่ยวข้องกัน

ตัวอย่าง: Netflix“Chaos Monkey” ของบริษัทจงใจปิดระบบในสภาพแวดล้อมการใช้งานจริงเพื่อทดสอบความยืดหยุ่น ซึ่งเป็นการประยุกต์ใช้หลักการทนต่อความผิดพลาดขั้นสูง


26) การสื่อสารแบบซิงโครนัสและการสื่อสารแบบอะซิงโครนัสในระบบกระจายแตกต่างกันอย่างไร?

ลักษณะ Syncการสื่อสารที่วุ่นวาย การสื่อสารแบบอะซิงโครนัส
การอยู่ที่ ผู้ส่งรอการตอบกลับ ผู้ส่งดำเนินการโดยอิสระ
ตัวอย่าง การเรียกใช้ HTTP REST API คิวข้อความ, คาฟก้า
ความแอบแฝง สูงกว่า (การปิดกั้น) เวลาในการรับรู้ที่ลดลง
ความเชื่อถือได้ ต่ำกว่าภายใต้ความล้มเหลว ระดับที่สูงขึ้น (ข้อความสามารถคงอยู่ได้)

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

ตัวอย่างเช่น การประมวลผลคำสั่งซื้อในระบบอีคอมเมิร์ซอาจเป็นแบบอะซิงโครนัส แต่การยืนยันการชำระเงินควรเป็นแบบซิงโครนัสเพื่อให้ผู้ใช้ได้รับผลตอบรับทันที


27) คุณจะออกแบบตัวจำกัดอัตราการใช้งานสำหรับระบบ API แบบกระจายอย่างไร?

ตัวจำกัดอัตราการใช้งานแบบกระจายช่วยให้มั่นใจได้ว่าการใช้งาน API เป็นไปอย่างยุติธรรมบนเซิร์ฟเวอร์หลายเครื่อง

วิธีการ:

  1. อัลกอริทึมถังโทเค็น – ผู้ใช้แต่ละคนจะได้รับโทเค็นซึ่งจะเพิ่มขึ้นเรื่อย ๆ เมื่อเวลาผ่านไป
  2. อัลกอริธึมถังรั่ว – คำขอต่างๆ จะได้รับการประมวลผลในอัตราคงที่
  3. ตัวนับส่วนกลาง (เช่น Redis) – บันทึกจำนวนคำขอต่อผู้ใช้แต่ละราย

ตัวอย่างการใช้งาน:

  • ใช้ตัวนับอะตอมิกของ Redis ร่วมกับ TTL
  • บันทึกเวลาการส่งคำขอต่อคีย์ผู้ใช้แต่ละราย
  • ปฏิเสธคำขอที่เกินเกณฑ์ที่กำหนด

การจำกัดอัตราช่วยป้องกัน การล่วงละเมิด, การโจมตี DoSและ ค่าใช้จ่ายที่พุ่งสูงขึ้นอย่างไม่คาดคิดเพื่อให้มั่นใจได้ว่าคุณภาพการบริการมีความสม่ำเสมอแก่ลูกค้าทุกราย


28) อัลกอริทึมฉันทามติแบบกระจายศูนย์คืออะไร และเหตุใดจึงจำเป็นต้องใช้?

อัลกอริทึมฉันทามติแบบกระจายช่วยให้มั่นใจได้ว่าโหนดหลายโหนดในระบบ ตกลงกันที่ค่าข้อมูลเดียวแม้ว่าจะเกิดความล้มเหลวก็ตาม

อัลกอริทึมทั่วไป:

  • แพซอส
  • แพ
  • แซ่บ (ใช้ใน ZooKeeper)

สิ่งเหล่านี้จำเป็นสำหรับการบำรุงรักษา การเลือกตั้งผู้นำ, การจำลองสถานะและ ความสอดคล้องของข้อมูล ในฐานข้อมูลแบบกระจายและตัวจัดการคลัสเตอร์ เช่น Kubernetes

ตัวอย่าง: Raft ช่วยให้มั่นใจได้ว่าโหนดทั้งหมดเห็นพ้องต้องกันในรายการบันทึกก่อนที่จะนำไปใช้กับเครื่องสถานะ ซึ่งรับประกันความน่าเชื่อถือแม้ว่าโหนดจะล่มก็ตาม


29) คุณจะออกแบบระบบบันทึกและตรวจสอบการทำงานสำหรับไมโครเซอร์วิสอย่างไร?

การตรวจสอบระบบแบบกระจายศูนย์จำเป็นต้องมีการสังเกตการณ์จากส่วนกลางเพื่อตรวจจับและแก้ไขปัญหา

ส่วนประกอบหลัก:

  • การบันทึก: รวบรวมบันทึกจากบริการทั้งหมดโดยใช้เครื่องมือต่างๆ เช่น Fluentd or Logstash.
  • เมตริก: ใช้ Prometheus หรือ Datadog เพื่อติดตามตัวชี้วัดประสิทธิภาพ (CPU, หน่วยความจำ, เวลาแฝงของคำขอ)
  • ติดตาม: ใช้ระบบติดตามการทำงานแบบกระจาย (เช่น Jaeger, Zipkin) เพื่อติดตามเส้นทางการร้องขอข้ามบริการต่างๆ
  • การแจ้งเตือน: ตั้งค่าเกณฑ์เพื่อเรียกใช้งานการแจ้งเตือนใน PagerDuty หรือ Slack.

ปฏิบัติที่ดีที่สุด:

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


30) ปัจจัยสำคัญในการออกแบบระบบที่มีความพร้อมใช้งานสูง (HA) มีอะไรบ้าง?

A ความพร้อมใช้งานสูง (HA) ระบบนี้ช่วยลดเวลาหยุดทำงานและรับประกันการให้บริการอย่างต่อเนื่อง

ปัจจัยการออกแบบที่สำคัญ:

  1. ความซ้ำซ้อน: ใช้เซิร์ฟเวอร์หลายตัวต่อหนึ่งส่วนประกอบ
  2. กำจัดจุดอ่อนสำคัญ (SPOF)
  3. การสำรองข้อมูลอัตโนมัติ: เปลี่ยนเส้นทางการจราจรระหว่างที่ระบบขัดข้อง
  4. การจำลองข้อมูล: ตรวจสอบให้แน่ใจว่าข้อมูลมีความคงทนในทุกโซน
  5. การตรวจสอบสุขภาพ: ตรวจจับและแทนที่โหนดที่ทำงานผิดปกติโดยอัตโนมัติ
  6. การกู้คืนระบบหลังภัยพิบัติ (DR): ดำเนินการสำรองข้อมูลและจำลองข้อมูลตามภูมิศาสตร์

ตัวอย่าง: AWS ปรับใช้บริการต่างๆ ทั่ว Availability Zones (AZs) และใช้ Elastic Load Balancers เพื่อการสลับการทำงานอัตโนมัติเมื่อเกิดข้อผิดพลาด ทำให้มั่นใจได้ว่า SLA จะให้ความพร้อมใช้งาน 99.99%


🔍 คำถามสัมภาษณ์ด้านการออกแบบระบบยอดนิยม พร้อมสถานการณ์จริงและคำตอบเชิงกลยุทธ์

1) คุณมีแนวทางอย่างไรในการออกแบบระบบกระจายขนาดใหญ่ตั้งแต่เริ่มต้น?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการเข้าใจความคิดที่เป็นระบบของคุณ ความสามารถในการชี้แจงข้อกำหนด และวิธีการที่คุณแบ่งปัญหาที่ซับซ้อนออกเป็นส่วนย่อยที่จัดการได้

ตัวอย่างคำตอบ: “ผมเริ่มต้นด้วยการชี้แจงข้อกำหนดด้านฟังก์ชันและไม่ใช่ฟังก์ชัน เช่น ความสามารถในการขยายขนาด ความพร้อมใช้งาน และความหน่วง จากนั้นผมจะร่างโครงสร้างสถาปัตยกรรมระดับสูง ระบุส่วนประกอบหลัก กำหนดการไหลของข้อมูล และเลือกเทคโนโลยีที่เหมาะสม หลังจากนั้น ผมจะพิจารณาถึงปัญหาคอขวด สถานการณ์ความล้มเหลว และข้อแลกเปลี่ยนต่างๆ ก่อนที่จะปรับแต่งการออกแบบ”


2) คุณช่วยอธิบายความแตกต่างระหว่างการปรับขนาดแนวนอนและการปรับขนาดแนวตั้ง และควรใช้แบบใดในสถานการณ์ใดบ้างได้ไหม?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทดสอบความรู้พื้นฐานของคุณเกี่ยวกับความสามารถในการขยายขนาด และความสามารถของคุณในการประยุกต์ใช้กลยุทธ์ที่ถูกต้องในระบบจริง

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


3) คุณจะมั่นใจได้อย่างไรว่าระบบมีความพร้อมใช้งานสูงในการออกแบบ?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความเข้าใจของคุณเกี่ยวกับระบบสำรอง กลไกการสลับระบบเมื่อเกิดข้อผิดพลาด และความยืดหยุ่นของระบบ

ตัวอย่างคำตอบ: “ในบทบาทก่อนหน้านี้ ผมดูแลให้ความพร้อมใช้งานสูงโดยใช้ตัวกระจายโหลด การกระจายบริการไปยังโซนความพร้อมใช้งานหลายแห่ง การตรวจสอบสถานะ และการออกแบบบริการแบบไร้สถานะเท่าที่จะเป็นไปได้ กลยุทธ์เหล่านี้ช่วยลดจุดล้มเหลวเพียงจุดเดียว”


4) อธิบายสถานการณ์ที่คุณต้องเลือกระหว่างความสม่ำเสมอและความพร้อมใช้งาน

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังประเมินความเข้าใจของคุณเกี่ยวกับทฤษฎี CAP และทักษะการตัดสินใจภายใต้ข้อจำกัดต่างๆ

ตัวอย่างคำตอบ: “ในตำแหน่งงานก่อนหน้านี้ ผมทำงานกับระบบที่ความหน่วงต่ำเป็นสิ่งสำคัญ เราเลือกใช้ความสอดคล้องแบบค่อยเป็นค่อยไป (eventual consistency) แทนความสอดคล้องแบบเข้มงวด (strong consistency) เพื่อรักษาความพร้อมใช้งานในระหว่างที่เครือข่ายเกิดปัญหา ซึ่งเป็นที่ยอมรับได้สำหรับกรณีการใช้งานทางธุรกิจ”


5) คุณตัดสินใจเลือกใช้ฐานข้อมูลใดสำหรับระบบที่กำหนดอย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการดูว่าคุณเลือกวิธีการจัดเก็บข้อมูลให้สอดคล้องกับข้อกำหนดของระบบอย่างไร

ตัวอย่างคำตอบ: “ฉันประเมินรูปแบบการเข้าถึงข้อมูล ข้อกำหนดด้านความสม่ำเสมอ ความต้องการด้านความสามารถในการขยายขนาด และความซับซ้อนของการสืบค้นข้อมูล ฐานข้อมูลเชิงสัมพันธ์เหมาะสำหรับข้อมูลที่มีโครงสร้างและธุรกรรม ในขณะที่ฐานข้อมูล NoSQL เหมาะกว่าสำหรับการประมวลผลปริมาณมากและโครงสร้างข้อมูลที่ยืดหยุ่น”


6) คุณจะออกแบบระบบอย่างไรเพื่อรับมือกับปริมาณการจราจรที่เพิ่มขึ้นอย่างฉับพลัน?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังทดสอบความสามารถของคุณในการออกแบบเพื่อรองรับการขยายขนาดและปริมาณงานที่ไม่แน่นอน

ตัวอย่างคำตอบ: “ผมจะใช้กลุ่มปรับขนาดอัตโนมัติ ตัวกระจายโหลด และเลเยอร์แคช เช่น ที่เก็บข้อมูลในหน่วยความจำ ในงานก่อนหน้านี้ เทคนิคเหล่านี้ช่วยให้ระบบสามารถรองรับปริมาณการใช้งานที่เพิ่มขึ้นอย่างฉับพลันโดยไม่ส่งผลกระทบต่อประสิทธิภาพ”


7) การแคชมีบทบาทอย่างไรในการออกแบบระบบ และคุณจะนำไปใช้ในส่วนใดบ้าง?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการเข้าใจว่าคุณจะเพิ่มประสิทธิภาพและลดภาระงานของบริการหลักได้อย่างไร

ตัวอย่างคำตอบ: “การแคชช่วยปรับปรุงเวลาตอบสนองและลดภาระของฐานข้อมูล สามารถนำไปใช้ได้หลายระดับ รวมถึงฝั่งไคลเอ็นต์, CDN, ระดับแอปพลิเคชัน และการแคชคำสั่งค้นหาฐานข้อมูล ขึ้นอยู่กับกรณีการใช้งาน”


8) คุณจัดการกับการแบ่งพาร์ติชันและการแบ่งส่วนข้อมูลอย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังประเมินความสามารถของคุณในการออกแบบระบบที่สามารถขยายขนาดข้อมูลในแนวนอนได้

ตัวอย่างคำตอบ: “ผมเลือกคีย์การแบ่งส่วนข้อมูลที่กระจายข้อมูลอย่างสม่ำเสมอและลดการสืบค้นข้อมูลข้ามส่วนให้น้อยที่สุด นอกจากนี้ ผมยังวางแผนสำหรับการแบ่งส่วนข้อมูลใหม่และตรวจสอบการกระจายข้อมูลเพื่อหลีกเลี่ยงจุดที่มีการใช้งานหนาแน่นเมื่อระบบเติบโตขึ้น”


9) อธิบายสถานการณ์ที่การตรวจสอบระบบมีอิทธิพลต่อการตัดสินใจด้านการออกแบบ

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

ตัวอย่างคำตอบ: “การตรวจสอบตัวชี้วัดต่างๆ เช่น ความหน่วงและอัตราข้อผิดพลาด เผยให้เห็นจุดคอขวดในบริการ API จากข้อมูลเชิงลึกนี้ ผมจึงออกแบบบริการใหม่ให้เป็นแบบอะซิงโครนัส ซึ่งช่วยเพิ่มประสิทธิภาพการทำงานได้อย่างมาก”


10) คุณสื่อสารการออกแบบระบบที่ซับซ้อนให้แก่ผู้มีส่วนได้ส่วนเสียที่ไม่ใช่ผู้เชี่ยวชาญด้านเทคนิคได้อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังประเมินทักษะการสื่อสารและความสามารถของคุณในการเชื่อมโยงการตัดสินใจทางเทคนิคกับเป้าหมายทางธุรกิจ

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

สรุปโพสต์นี้ด้วย: