คุยหน้าแชทแล้วปิ๊งไอเดียขึ้นมา เอามาเขียนทิ้งๆ ไว้ก่อน
ไม่มีรายละเอียดทางเทคนิคนะครับ ยกเว้นชื่อเรียก
"สมมติ" ว่าเกิดเราทำเว็บขึ้นมาแล้วมันโตวันโตคืน (คือมีปริมาณการใช้งานเพิ่มขึ้นเรื่อยๆ) นะครับ
ลำดับการ scale เว็บทั่วไปมันควรจะประมาณนี้
-
share host
เริ่มต้นทดสอบระบบ การใช้งานไม่มาก -
VPS/high perf hosting
ปริมาณคนเข้าเริ่มเยอะขึ้น หลังจากถูก share host เตะมาสองสามที่แล้วก็เลยย้ายมา (ฮา)
เริ่มมีการจัดการระบบที่ซับซ้อนมากขึ้น โครงสร้างเว็บจะเริ่มโต+บวม -
ขยับไปเช่า dedicated หรือวางเครื่องเอง
ทีนี้เริ่มสนุกแล้วครับ เพราะหมายความว่าเราเริ่มมีรายได้
หรือสามารถแบกรับภาระที่สูงขึ้นที่มาจากเว็บเราได้แล้ว
ปริมาณ page view เว็บน่าจะทะลุวันละแสนครั้งไปเรียบร้อยแล้ว
พร้อมทั้งการใช้งานทรัพยากรที่เพิ่มมากขึ้นเรื่อยๆ -
แยก database ออกจากเว็บ
ขั้นนี้เป็นขั้นที่ถือเป็นที่พักริมทางบนเชิงเขาแล้วครับ
เพราะยังไม่ต้องมีการแก้ไขระบบใน code มากเท่าไหร่
ซึ่งยังถือว่าขยายระบบได้ง่ายอยู่ ขั้นตอนหลังจากนี้จะซับซ้อนขึ้นแบบก้าวกระโดดเลย -
เพิ่มเครื่องรัน db
เจอปัญหา database ทำงานไม่ทันใช่มั้ยครับ?
วันนี้ TV Direct ขอนำเสนอระบบ Database replication
ด้วยการแยก read/write ออกจากกัน เพื่อให้การเขียน database เป็นไปอย่างราบลื่น
เพราะเราเชื่อว่า ระบบปกติ select มากกว่า insert/update แน่ๆ
แต่ขั้นนี้ เงื่อนไขที่สำคัญคือ… ต้องมีการแก้ไขโปรแกรมให้รองรับการแยก read/write
เพราะ mysql มันไม่ฉลาดพอที่จะจัดการให้
แล้วถ้าโครงสร้างระบบตัวเดิมเราไม่ดีพอคงต้องแก้กันสนุก(เหนื่อย)เลย -
เพิ่มเครื่องรัน web (เพิ่ม storage server เข้ามาด้วย)
เพิ่มเครือ่งรัน database ยังง่ายครับ เพราะมันแก้ code นิดเดียว
แต่เพิ่มเครื่องรันเว็บนี่ปัญหาใหญ่ ยิงถ้าเว็บเราอนุญาตให้ user อัพไฟล์ขึ้นมาได้ด้วยนี่สนุกแน่ๆ
เพราะต้องมีการแยก storage server ออกมาต่างหากอีก
เพื่อให้ web server ทุกตัวเข้าถึงข้อมูลจากตรงนี้ได้
แถมต้องมีการออกแบบไม่ให้ storage server เดี้ยงง่ายๆ เพราะติดข้อจำกัดด้าน i/o จาก harddisk
ซึ่งจะใช้ ssd หรืออะไรวิธีไหนยังไงก็ว่าไป -
แยก static server
บางครั้งเว็บบางเว็บก็มี request ไปที่ file static (พวกไฟล์รูป หรือ css อะไรพวกนี้) ในปริมาณมหาศาล
ทำให้เป็นภาระของระบบค่อนข้างมาก
อีกทั้งโดยปกติแล้ว วิธีการทำงานของ static กับ dynamic page ต้องการการ optimize ระบบที่แตกต่างกัน
การแยก static server ออกมา (ไม่ว่าจะด้วยวิธการทำ reverse proxy / ปรับไปใช้ CDN หรือแยก server ออกมาต่างหาก)
ก็จะเป็นผลดีต่อการขยายระบบได้ครับ
8 ) สลับข้อ 5-6 กันเรื่อยๆ
ถึงตรงนี้ถ้าวางพื้นฐานไว้ดีพอแล้ว การจะทำข้อ 5-6 ก็ไม่ใช่ปัญหาของการขยายการรองรับงานแล้วครับ
มีตังค์ก็ยัดเครื่องเอา ปัญหาอยู่ที่จะมีที่วางมั้ยมากกว่าแหละ
-
เปิด IDC เอง
คิดว่าเว็บใหญ่ๆ ในไทยเองก็ยังไม่ถึงขั้นนี้ (ยังไม่เห็นเว็บไหนมี ASN เป็นของตัวเองซักเว็บ)
แต่ของ ตปท มีเป็นเรื่องปกติเลยครับ
ตัวอย่างง่ายๆ ก็ facebook นี่แหละ
เพราะสุดท้ายพอระบบใหญ่มากๆ เข้า ต้นทุนหลักจะกลายเป็นค่า สาธารณูปโภค (ไฟฟ้า / สัญญาณ internet) -
สูงสุดคืนสู่สามัญ กลับไป optimize code
เพราะถ้าถึงขั้นที่ 9 แล้ว ปริมาณเครื่อง server ในระบบนี่หลักพันขึ้นไปแน่ๆ
การแก้ไข code เพียงบรรทัดเดียวก็อาจส่งผลให้ทั้งระบบเร็วขึ้น หรือช้าลงได้อย่างชัดเจน
การ optimize code จะช่วยลดต้นทุนระยะยาวของระบบลงไปได้อย่างชัดเจน
ทั้งนี้ บทความนี้นั่งเทียนเขียนขึ้นมาจากความรู้สึก และประสบการณ์ส่วนตัวล้วนๆ
และการขยายเว็บ ก็ไม่จำเป็นต้องเป็นไปตามลำดับพวกนี้เสมอไป
แต่สุดท้ายแล้ว กว่า 99% ก็จะอยู่เพียงแค่ขอบเขตนี้เท่านั้นครับ
(อีก 1% เผื่อหน้าแตก 555)