เรามาทำความเข้าใจเกี่ยวกับความแตกต่างระหว่าง Performance กับ Scalability กันก่อน

Performance

เป็นการวัด Latency (เวลาแฝง) และ Throughput (ปริมาณงาน) ซึ่งเป็นตัวบอกว่าระบบของเรามีประสิทธิภาพดีแค่ไหน โดยจะดูที่จะต้องมี

  • Low Latency: เวลาในการตอบสนองของระบบที่ต่ำ
  • High Throughput: จำนวนการประมวลผลคำขอที่รองรับได้มากที่สุด

ซึ่งเมื่อเราพูดถึงเรื่อง performance นั้น เรามักจะพูดเรื่องภายใต้ fixed load หรือ หรือระบุจำนวนที่ชัดเจน

ดังนั้นภายใต้โหลดที่กำหนด เวลาเวลาแฝงจะเป็นเท่าไหร่ และ ปริมาณงานคืออะไร เราจะลดเวลาแฝงได้อย่างไร และเพิ่มปริมาณงานได้อย่างไร

ปริมาณงาน (Throughput) เราจะพิจารณาอยู่ 2 อย่างด้วยกัน คือ

  • Concurrency: การทำงานพร้อมกัน ซึ่งเราจะดูในเรื่องของ
    • Single Machine การทำงานพร้อมกันในเครื่องเดียว - ซึ่งเป็นการดูเรื่องของ Multi-Threading
    • Multi Machine การทำงานร่วมกันหลายๆ เครื่อง - โดยจะพิจารณาจากการนำเอา Multi-Threading + Multi Processing = Distributed Processing (การประมวลผลแบบกระจาย)
  • Capacity: การเพิ่มกำลังการผลิต

Scalability

เป็นส่วนหนึ่งของ performance แต่จะเป็นการดูเรื่องของการทำยังไงให้สามารถเพิ่มปริมาณงาน (Throughput) ของระบบภายใต้ variable load (มีความเปลี่ยนแปลง หรือ ไม่คงที่)

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

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

ซึ่งจะเห็นได้ว่า การขยายความสามารถมันจะไปเกี่ยวข้องกับการเพิ่มความจุ hardware หรือ การเพิ่มจำนวนเครื่องเข้าไป ซึ่งเป็นเรื่องของ Vertical & Horizontal Scalability และแน่นอนว่า เราสามารถทำได้ทั้งการ scale up และ scale down


Vertical & Horizontal Scalability

ถ้าพูดถึงเรื่องการ scaling ระบบนั้น คงหนีไม่พ้นการ scale สองรูปแบบนี้

Vertical Scalability

เป็นการขยายความสามารถของ hardware เช่น จากเดิมเราใช้ CPU 4 ตัว, RAM 16 GB เมื่อถึงจุดที่เรามีผู้ใช้มากขึ้นจนทำให้ เครื่องเดิมของเราเริ่มรองรับการทำงานไม่ค่อยได้แล้ว วิธีนี้เราก็ย้ายระบบของเราไปใช้ เครื่องที่มี hardware แรงกว่า เพื่อให้รองรับการทำงานได้มากขึ้นนั้นเอง

วิธีนี้เป็นการขยายระบบที่ง่าย แต่ก็ตามมาด้วยราคาที่แพงขึ้น เนื่องจากขนาดของ hardware นั้นมีจำกัด และ hardware ที่มีประสิทธิภาพสูงราคาก็จะสูงตามไปด้วย โดยทั่วไปแล้ว การขยาย hardware เพิ่ม 1 เท่า อาจจะเป็นการเพิ่ม cost เป็น 5-10 เท่าเลยก็ได้ และเมื่อถึงจุดหนึ่ง เราจะขยายมันไม่ได้อีก จะด้วยความไม่คุ้มทุน หรือ ติด max ของ hardware

วิธีการขยายระบบแบบนี้จะ

  • Easier to achieve
  • Limited scalability

Horizontal Scalability

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

วิธีนี้เป็นการขยายระบบทำได้ยากกว่าแบบแรก เพราะต้องออกแบบและสร้างให้มันสามารถขยายในแนวนอนได้ แต่เราจะสามารถขยายความสามารถในการรองรับการทำงานได้อย่างไม่จำกัด อีกอย่างคือ เราสามารถ scale up กับ scale down ได้ง่ายกว่าด้วย

วิธีการขยายระบบแบบนี้จะ

  • Hard to achieve
  • Unlimited scalability