Web Site Scalability : ว่าด้วยการเติบโตของเว็บไซต์

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

  1. share host
    เริ่มต้นทดสอบระบบ การใช้งานไม่มาก

  2. VPS/high perf hosting
    ปริมาณคนเข้าเริ่มเยอะขึ้น หลังจากถูก share host เตะมาสองสามที่แล้วก็เลยย้ายมา (ฮา)
    เริ่มมีการจัดการระบบที่ซับซ้อนมากขึ้น โครงสร้างเว็บจะเริ่มโต+บวม

  3. ขยับไปเช่า dedicated หรือวางเครื่องเอง
    ทีนี้เริ่มสนุกแล้วครับ เพราะหมายความว่าเราเริ่มมีรายได้
    หรือสามารถแบกรับภาระที่สูงขึ้นที่มาจากเว็บเราได้แล้ว
    ปริมาณ page view เว็บน่าจะทะลุวันละแสนครั้งไปเรียบร้อยแล้ว
    พร้อมทั้งการใช้งานทรัพยากรที่เพิ่มมากขึ้นเรื่อยๆ

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

  5. เพิ่มเครื่องรัน db
    เจอปัญหา database ทำงานไม่ทันใช่มั้ยครับ?
    วันนี้ TV Direct ขอนำเสนอระบบ Database replication
    ด้วยการแยก read/write ออกจากกัน เพื่อให้การเขียน database เป็นไปอย่างราบลื่น
    เพราะเราเชื่อว่า ระบบปกติ select มากกว่า insert/update แน่ๆ
    แต่ขั้นนี้ เงื่อนไขที่สำคัญคือ… ต้องมีการแก้ไขโปรแกรมให้รองรับการแยก read/write
    เพราะ mysql มันไม่ฉลาดพอที่จะจัดการให้
    แล้วถ้าโครงสร้างระบบตัวเดิมเราไม่ดีพอคงต้องแก้กันสนุก(เหนื่อย)เลย

  6. เพิ่มเครื่องรัน web (เพิ่ม storage server เข้ามาด้วย)
    เพิ่มเครือ่งรัน database ยังง่ายครับ เพราะมันแก้ code นิดเดียว
    แต่เพิ่มเครื่องรันเว็บนี่ปัญหาใหญ่ ยิงถ้าเว็บเราอนุญาตให้ user อัพไฟล์ขึ้นมาได้ด้วยนี่สนุกแน่ๆ
    เพราะต้องมีการแยก storage server ออกมาต่างหากอีก
    เพื่อให้ web server ทุกตัวเข้าถึงข้อมูลจากตรงนี้ได้
    แถมต้องมีการออกแบบไม่ให้ storage server เดี้ยงง่ายๆ เพราะติดข้อจำกัดด้าน i/o จาก harddisk
    ซึ่งจะใช้ ssd หรืออะไรวิธีไหนยังไงก็ว่าไป

  7. แยก static server
    บางครั้งเว็บบางเว็บก็มี request ไปที่ file static (พวกไฟล์รูป หรือ css อะไรพวกนี้) ในปริมาณมหาศาล
    ทำให้เป็นภาระของระบบค่อนข้างมาก
    อีกทั้งโดยปกติแล้ว วิธีการทำงานของ static กับ dynamic page ต้องการการ optimize ระบบที่แตกต่างกัน
    การแยก static server ออกมา (ไม่ว่าจะด้วยวิธการทำ reverse proxy / ปรับไปใช้ CDN หรือแยก server ออกมาต่างหาก)
    ก็จะเป็นผลดีต่อการขยายระบบได้ครับ

8 ) สลับข้อ 5-6 กันเรื่อยๆ
ถึงตรงนี้ถ้าวางพื้นฐานไว้ดีพอแล้ว การจะทำข้อ 5-6 ก็ไม่ใช่ปัญหาของการขยายการรองรับงานแล้วครับ
มีตังค์ก็ยัดเครื่องเอา ปัญหาอยู่ที่จะมีที่วางมั้ยมากกว่าแหละ

  1. เปิด IDC เอง
    คิดว่าเว็บใหญ่ๆ ในไทยเองก็ยังไม่ถึงขั้นนี้ (ยังไม่เห็นเว็บไหนมี ASN เป็นของตัวเองซักเว็บ)
    แต่ของ ตปท มีเป็นเรื่องปกติเลยครับ
    ตัวอย่างง่ายๆ ก็ facebook นี่แหละ
    เพราะสุดท้ายพอระบบใหญ่มากๆ เข้า ต้นทุนหลักจะกลายเป็นค่า สาธารณูปโภค (ไฟฟ้า / สัญญาณ internet)

  2. สูงสุดคืนสู่สามัญ กลับไป optimize code
    เพราะถ้าถึงขั้นที่ 9 แล้ว ปริมาณเครื่อง server ในระบบนี่หลักพันขึ้นไปแน่ๆ
    การแก้ไข code เพียงบรรทัดเดียวก็อาจส่งผลให้ทั้งระบบเร็วขึ้น หรือช้าลงได้อย่างชัดเจน
    การ optimize code จะช่วยลดต้นทุนระยะยาวของระบบลงไปได้อย่างชัดเจน

ทั้งนี้ บทความนี้นั่งเทียนเขียนขึ้นมาจากความรู้สึก และประสบการณ์ส่วนตัวล้วนๆ
และการขยายเว็บ ก็ไม่จำเป็นต้องเป็นไปตามลำดับพวกนี้เสมอไป
แต่สุดท้ายแล้ว กว่า 99% ก็จะอยู่เพียงแค่ขอบเขตนี้เท่านั้นครับ
(อีก 1% เผื่อหน้าแตก 555)

ยังอยู่ขั้นแรกอยู่เลย 55 ทุกเวปเพราะทำไม่เป็นอันๆ

ทำได้แต่ optimize code เพราะจน T_T

ขาดไปตอนนึงหลัง ข้อ 7 แล้วอย่าเพิ่งไปเพิ่มเครื่อง web หรือ db มีหลายครั้งที่ code แล้วลืมทำ index database เป็นกันหลายเว็บ

ต้องไปเช็คโค๊ดเดิมก่อนนะ (เจอมาเยอะ)

ssfc กำลังจะเข้าขั้น 4 … ส่วนขั้น 7 นี่ทำตั้งแต่ตอนใช้ shared hosting เลย เพราะปลาหมึกที่ hosting รับไม่ไหว :stuck_out_tongue:

[quote author=LaZieR link=topic=26126.msg248150#msg248150 date=1266775131]
ขาดไปตอนนึงหลัง ข้อ 7 แล้วอย่าเพิ่งไปเพิ่มเครื่อง web หรือ db มีหลายครั้งที่ code แล้วลืมทำ index database เป็นกันหลายเว็บ

ต้องไปเช็คโค๊ดเดิมก่อนนะ (เจอมาเยอะ)
[/quote]ข้อ 10 ไง lol (แถได้อีก)

ถึงข้อ5 กับ optimize code แบบมั่วๆ เพราะความรู้ผมยังเด็กน้อย :flame:

  1. key value store DB run on SSD cloud with static proxy + storage cloud อะไรก็ว่ากันไป
    ผมว่า scale นี้ประหยัด เร็วและใหญ่ที่สุด ขยายโดยการเพิ่ม node
    +master-master replication , fail safe ประมาณนั้น DB ก็ โหลดมันทั้งหมดไปไว้บน RAM หรือ SSD เขียน code ใหม่ยกเลิกการใช้ sql ไปเลย

อ๊ะ ผมลืม memcache (หรืออะไรพวกนี้) ไปสนิทเลย 55555+

ขอบคุณพี่หมอครับ

  1. หา Admin เทพๆ ก็จะช่วยได้เยอะครับ อิอิ

+1 ไป … หา Admin เทพไม่เจอ ก็หาโปรแกรมเมอร์เทพไปแก้ Code
หรือถ้าหาไม่เจอทั้งสองอย่างก็เครียดหน่อย แต่ถ้าสามารถหาเจอทั้งสองอย่าง
รับรองฉิวโล้ดเรยอ่ะ

ปุ๊ก

ขอบคุณมากครับน้องไอซ์ เพิ่มให้อีกข้อก็ละกัน 13. ต้องเตรียมสำรองเงินเอาไว้เยอะๆ ด้วย ข้อนี้สำคัญที่สุด ฮา. :smiley:

มาถึง ข้อ 5 ก็ จอด แล้วอ่ะครับ ค่าตัว Admin เทพ กับ Programmer เทพ มากกว่า ค่า server อีก

ผมจอดตั้งแต่ ข้อ 1 แระ

ถ้า sharehost make money ได้มากกว่า เว็บที่จำเป็น ต้องข้อ 2+

  • ส่วนของ Database ทำ Master/Slave Replication

เรื่อง Database
MySQL Cluster

หลังๆ เริ่มลงรายละเอียดเชิงเทคนิคกันแล้วววววว lol

ดีครับ

ดีสิครับ :slight_smile:

8.5 หาคนมาซื้อราคาแพงๆ

programmer กับ admin จำเป็นต้องเป็นคนเดียวกันไหมครับ
รู้สึกว่าถ้าคนนึงเป็น programmer แต่ไม่ค่อยรู้เรื่อง server กับอีกคนนึงเป็น admin แต่้ไม่ค่อยรู้เรื่อง programmer
มักจะเถียงกันไม่จบ 55+