บทที่ 02 · การประมาณการ

การประมาณการแบบ Back-of-the-Envelope

การประมาณการแบบ Back-of-the-Envelope เป็นทักษะที่สำคัญใน System Design Interviews ซึ่งเกี่ยวข้องกับการคำนวณอย่างรวดเร็วเพื่อประเมินความสามารถหรือประสิทธิภาพของระบบ

บทนำ

การประมาณการแบบ Back-of-the-Envelope เป็นทักษะสำคัญในการสัมภาษณ์ออกแบบระบบ มันเกี่ยวข้องกับการคำนวณอย่างรวดเร็วเพื่อประเมินความสามารถหรือประสิทธิภาพของระบบ ตามที่ Jeff Dean Google Senior Fellow กล่าว การประมาณการเหล่านี้ช่วยประเมินว่าการออกแบบตรงตามข้อกำหนดหรือไม่ผ่าน Thought Experiments และ Common Performance Benchmarks

1. แนวคิดหลัก

Power of Two

การเข้าใจปริมาณข้อมูลในแง่ของ Powers of Two เป็นพื้นฐาน ความรู้นี้ช่วยในการคำนวณ Storage และ Bandwidth ที่แม่นยำ

ตัวเลข Latency ที่ทุก Programmer ควรรู้

ตัวเลข Latency แสดงถึงเวลาที่ใช้สำหรับ Operations ต่างๆ ในระบบคอมพิวเตอร์

OperationLatency (2020)
L1 Cache Access0.5 ns
L2 Cache Access7 ns
Main Memory Access100 ns
SSD Random Read150 µs
HDD Random Seek10 ms
Round-Trip in Data Center500 µs
Inter-Region Data Center150 ms
ข้อคิดที่สำคัญ:
  • Memory เร็ว, Disk ช้า
  • หลีกเลี่ยง Disk Seeks ทุกครั้งที่ทำได้
  • บีบอัดข้อมูลก่อนส่งผ่าน Internet เพื่อประหยัด Bandwidth

2. ตัวเลข Availability

High Availability (HA) ทำให้ Downtime น้อยที่สุด Availability แสดงเป็น Nines

AvailabilityDowntime ต่อปี
99% (Two Nines)~3.65 วัน
99.9% (Three Nines)~8.8 ชั่วโมง
99.99% (Four Nines)~52 นาที
99.999% (Five Nines)~5.3 นาที
99.9999% (Six Nines)~31.56 วินาที

Cloud Providers เช่น Amazon, Google และ Microsoft มุ่งเป้า SLA (Service Level Agreements) ที่ 99.9% หรือสูงกว่า

3. ตัวอย่างการประมาณการ - Twitter QPS และ Storage Requirements

สมมติฐาน

การประมาณการ

1. Query Per Second (QPS):

2. Media Storage:

4. เคล็ดลับสำหรับการประมาณการที่มีประสิทธิภาพ

1. การปัดเศษและการประมาณ

ความแม่นยำไม่สำคัญมาก; มุ่งเน้นที่กระบวนการ ใช้ตัวเลขกลมๆ เช่น:

2. เขียนสมมติฐาน

บันทึกสมมติฐานอย่างชัดเจนเพื่ออ้างอิงในอนาคต

3. ระบุหน่วย

หลีกเลี่ยงความกำกวมโดยระบุหน่วย (เช่น 5 MB แทนที่จะเป็น 5)

4. สถานการณ์การประมาณการทั่วไป

สรุป

การประมาณการแบบ Back-of-the-Envelope เป็นทักษะที่จำเป็นสำหรับ System Design Interviews ช่วยให้คุณ:

  • ประเมิน Feasibility ของการออกแบบอย่างรวดเร็ว
  • ระบุ Bottlenecks ที่อาจเกิดขึ้น
  • สื่อสาร Trade-offs กับผู้สัมภาษณ์
  • แสดงความเข้าใจเกี่ยวกับ System Scale

เนื้อหานี้อ้างอิงจาก ByteByteGo - System Design Interview - An Insider's Guide