16 August 2013

Web ใหญ่ๆ ทำไงถึงไม่ล่มรายวัน

Web server (by iconarchive.com)
การทำงานของ website บนโลกนี้ทั่วๆไปมีวิธีการง่ายๆ คือการตั้งเครื่อง Server หรือการเอา Website ไปฝากในพื้นที่รวมกับผู้อื่น หรือที่เรียกว่า Web hosting ซึ่งในช่วงที่ผ่านมาเครื่อง Server ต่างๆ มีการพัฒนาคุณภาพทั้งในด้านอุปกรณ์ด้านความเร็วการประมวลผล หรือความเร็วของระบบเครือข่าย คิดแบบเร็วๆก็เทียบซะว่าถ้าตั้ง Server ซักตัวนึงก็สามารถรับคนได้ตั้งแต่ 200,000 - 500,000 คนต่อวันได้แบบปกติ

ปัญหาที่เกิดขึ้นกับ Website ที่มีคนมากๆนั้น จะสัมพันธ์กับปริมาณความต้องการใช้งาน ณ ช่วงเวลาหนึ่งๆ เราน่าจะเคยได้พบกับปัญหา web ล่ม จากการเข้าตรวจสอบคะแนนสอบ A-Net, O-Net หรือ แม้กระทั่ง website ขนาดใหญ่อย่าง fifa.com ก็เคยล่มตอนเกมการแข่งขันฟุตบอลโลกมาแล้ว นั่นเป็นเพราะมีจำนวนผู้ใช้ร้องขอข้อมูลพร้อมๆกันมากเกินไป ซึ่งความต้องการข้อมูลจะกลายเป็นมากกว่า 500,000 หรือ 1 ล้านครั้งภายในชั่วโมงเดียว

ความลับที่ไม่ลับมากของผู้ให้บริการ website ขนาดใหญ่ ใช้กลไกของสถาปัตยกรรมระบบต่างๆที่มีอยู่แล้ว ในการจัดการเพื่อให้บริการ Website ในสถานการณ์ที่มีความต้องการหนักๆได้ สิ่งที่ต้องเน้น 3 จุดหลักๆคือ ความเร็วของเครือข่าย (Network Bandwidth), ช่องทางบริการตัวเว็บไซต์ (HTTP Server), ข้อมูลของเว็บไซต์ผ่านระบบฐานข้อมูล (Database Server)

Network Bandwidth น่าจะเป็นอะไรที่ง่ายที่สุดในการจัดการ ช่องทางให้บริการของ Network ที่มีผู้ใช้งานหนักๆ อาจจะมีตั้งแต่ 10Gbit หรือ 100Gigabit แต่โดยสื่อการส่งข้อมูลที่เร็วขนาดนั้นไม่ได้เกิดจากการต่อสายเส้นเดียวที่มีความเร็วขนาดนั้นได้ วิธีการทำ Trunk ซึ่งเสมือนการต่อสายส่งข้อมูลหลายๆเส้น แต่ให้ระบบมองเป็นเส้นเดียวได้ การทำ Trunk จะมีการประยุกต์ไปในรูปแบบต่างๆ ซึ่งเราสามารถให้ Server มี Trunk port โดยการต่อการ์ด LAN จำนวนหลายๆไปก็ได้ หรือ การต่อสาย LAN กับ Network Switch หลายๆเส้น หรือ สายไฟเบอร์ 10Gbps จำนวนหลายๆ port ก็เป็นการทำงานเพื่อเพิ่มประสิทธิภาพของสายส่งข้อมูลที่มีจำกัดได้

Example of Trunk port for switch
[Image credits Allied Telesis]
HTTP Server อย่างที่บอกตอนแรกว่าการทำ Server เพียงตัวเดียวก็รับงานได้จำกัด การที่จะให้ HTTP server ทำงานได้มากขึ้น ไม่ใช่การไปเพิ่ม CPU, หรือ หน่วยความจำ แต่เป็นการเพิ่มจำนวน Server ที่ทำหน้าที่เดียวกันต่างหาก การประยุกต์ใช้ Network Load Balance สามารถแก้ไขปัญหาได้ โดยให้ Web server ทำงานลักษณะเดียวกัน ให้ไปทำงานอยู่หลัง Load balance ซึ่งจะทำให้สามารถรับมือกับปริมาณงานที่มากเกินกว่า Server 1 ตัวจะรับได้

Load balancer method
[Image credits ARR Architecture IIS.net ]
Database Server แม้ว่าจะไม่ได้เป็นส่วนที่เอาไว้รับมือกับผู้ใช้งานโดยตรง แต่การออกแบบให้ฐานข้อมูลสามารถรับมือกับการเรียกข้อมูลหนักๆนั้น มีวิธีการใช้หลักการของการทำ Clustering ซึ่งตัวฐานข้อมูลจะกระจายการเก็บข้อมูลต่างๆ ไปยังฐานข้อมูลที่เชื่อมต่อระหว่างกันโดยอัตโนมัติ ซึ่งช่วยให้การค้นหาข้อมูล (Query) สามารถเสร็จเร็วขึ้น หรือทำงานค้นหาแบบคู่ขนานแล้วเสร็จงานพร้อมกันได้มากขึ้น

ส่วน Clouds หรือการทำ Virtualization นั้นคือวิธีคิดเหมารวมของคำอธิบายทั้ง 3 เรื่องที่ผ่านมา ทั้งนี้เพื่อให้การจัดการของผู้ดูแลระบบง่ายขึ้น เราก็เพียงให้ผู้ดูแลระบบไม่ต้องสนใจว่าองค์ประกอบของสถาปัตยกรรมระบบการเชื่อมต่อเป็นอย่างไร ขอให้มีพื้นที่เว็ป, มีฐานข้อมูล ระบบที่อยู่ภายใน Clouds จะทำการบริหารจัดการทุกอย่างเพื่อให้ระบบสามารถทำงานได้ภายใต้เงื่อนไขทรัพยากรที่กำหนด
Cloud Services

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

Written by Tiwakorn Laophulsuk

No comments:

Post a Comment

Give a comment ...