เมื่อช่วงอาทิตย์ที่ผ่านมา (13-17 มีนาคม 2017) เจอปัญหาบทความที่ลงในแฟนเพจบางบทความฮ็อตมาก นักเขียนแต่ละคนก็เขียนมาดีมาก ทำให้เกิดอาการ Server Down ไปทันที คนนับแสนเข้าอ่านบทความเรื่องเดียวในเวลาพร้อมกัน ทำให้เว็บล่มและไม่สามารถเปิดได้ งานเข้าแล้ว..ฟๆ

ก่อนหน้านี้ผมใช้บริการ VPS ของไทยเจ้าหนึ่งอยู่ ตอนนั้นเมื่อเว็บไซต์เข้าไม่ได้ ผมรีบติดต่อไปที่บริษัทผู้ให้บริการ ปรากฏว่าทางนั้นบอกว่า RAM หมด โดยทางนั้นต้องจัดการคืนค่า RAM ให้ เว็บไซต์จะกลับมาปกติ ตอนนั้น VPS ผมมี RAM อยู่ 1.5GB แต่ใช้ไปถึง 2GB

พอลองสอบถามราคาในการอัพ RAM เพิ่มขึ้นไป 4GB จะอยู่ที่ 4,000 บาทเลย รู้สึกว่าหนักเกินไป (จริงๆเราตั้งงบสำหรับ VPS ไว้ที่ 5,000 บาทต่อเดือน) พอลองหาข้อมูลเพิ่มเติม จนมีคนแนะนำให้ลองใช้ Digital Ocean

Digital Ocean เนี่ย เป็นเว็บผู้ให้บริการ Cloud Server หรือถ้าจะพูดให้เข้าใจด้วยภาษาง่ายๆ ก็คือ เป็นคนที่มีคอมพิวเตอร์วางไว้ให้เราใช้เปิดเป็น Server โดยที่ Server นี้เราจะใช้ทำอะไรก็ได้ ส่วนคอมพิวเตอร์ที่ว่าก็จะเป็นไปในลักษณะ Cloud Server ซึ่งตรงนี้จะไม่ขออธิบายมาก เดี๋ยวจะงงซะก่อน

ในตอนแรกนั้น ผมมองไปที่ AWS ของ Amazon ที่เป็น Cloud Server เช่นเดียวกัน เนื่องจากก่อนหน้านี้หลายปีแล้วแหละ เคยใช้ตอนทำงานที่เก่า แต่พอลองถามหลายๆคนดู มีแต่คนแนะนำ Digital Ocean ด้วยความที่มันติดตั้งง่าย เหมาะกับมือใหม่อย่างเรา แถมสมัครใหม่ จะมีเครดิตอยู่ $10 ด้วย เลยลองซะหน่อย

SERVER ต้องรองรับ 500,000 คนในเวลาเดียวกัน

ถึงแม้จะฟังดูเยอะมาก แถมตัวเลขน่าจะเป็นพวกเว็บใหญ่ๆซะมากกว่า (แต่เอาจริงๆเว็บใหญ่ๆนี่มากกว่านี้อีกนะ) แต่เอาเข้าจริงๆ เวลาเจอช่วง Peak Time นี่ กราฟมันพุ่งขึ้นเกือบ 90 องศาเลยนะ ถึงตอนนั้นถ้า Server Down ไปนี่จะกลายเป็นเราจะสูญเสียรายได้จากตรงนั้นไปเลย

ทีนี้จะทำยังไง..? คือ ณ สปีดการผลิตงานของทีมตอนนี้ จะเรียกคนอ่านได้แค่ราวๆ 100,000-200,000 ต่อวัน แต่มีครั้งหนึ่งที่ล่ม ตอนนั้นล่มไปตอน 120,000 คนในเวลาเดียวกัน ทำให้ผมตั้งใจจะให้ Server ใหม่รองรับที่ 500,000 คน หมายความว่า 500,000 คนนี้ต้องได้เข้าเว็บพร้อมกัน

ความรู้ด้านการติดตั้ง Server ผมก็แทบไม่มี โชคดีที่ Digital Ocean นั้นใช้งานง่ายมาก แถมมีเพื่อนที่คอยแนะนำการติดตั้งอย่างใกล้ชิด ทำให้พอไถๆไปได้ โดยสเป็คเครื่องที่ผมเลือกคือ

2 CPU ได้ RAM 4GB มีฮาร์ดดิสก์แบบ SSD 60GB ก็น่าจะพอได้อยู่ อ้อ มี Data Transfer 4 TB ด้วย

อาจจะดูน้อยนะครับ แต่พอดีเพื่อนคนที่แนะนำการใช้งาน ได้แนะนำให้ใช้บริการอีกอย่างหนึ่งคือ Cloudflare

Cloudflare เป็นอีกบริการหนึ่งที่จะคอยช่วยเป็นตัวกลางระหว่างคนเข้าชมเว็บไซต์ กับ Server ของคุณ โดยความสามารถเด่นๆที่จะช่วยผมได้มากที่สุดเลยตอนนี้ คือ CDN และ Cache

ก่อนอื่นลองดูรูปข้างล่างก่อนครับ

จากรูปเราจะแบ่งเป็นฝั่งซ้ายและขวา

ฝั่งซ้าย คือไม่ใช้บริการ Cloudflare จะสังเกตุได้ว่า ผู้เข้าชม(สีเขียว) , บอท(สีเทา) , แฮคเกอร์(สีแดง) สามารถเข้าถึง Server เราได้โดยตรงผ่าน Nameserver ทำให้ได้ IP เครื่องเราไปยิงได้เลย แต่พอใช้บริการ Cloudflare ทั้ง 3 คนจะต้องผ่าน Cloudflare ที่ทำหน้าที่เหมือนหน้าด่านก่อน โดยเมื่อผ่านการกรองแล้ว จึงจะถูกส่งต่อมาที่ Server จากภาพด้านขวา เราจะเห็นได้ว่า แฮคเกอร์สีแดง ไม่สามารถเข้าถึง Server เราได้ ซึ่งอันที่จริงแล้ว ทั้ง 3 คนก็ไม่สามารถได้ IP ของ Server เรา เพราะเมื่อไหร่ที่ Scan Domain ของเว็บไซต์เรา ก็จะได้ไปเพียงแค่ Nameserver และ IP ของ Cloudflare เท่านั้น ทำให้เว็บไซต์เราปลอดภัยยิ่งขึ้น

นอกจากนี้ ฟีเจอร์เด่นที่สุดคือ ระบบ CDN ระบบนี้คือ เว็บไซต์เราปกติแล้วจะมีไฟล์ข้อมูลที่ Server เท่านั้น (ก่อนหน้านี้ VPS ผมอยู่ที่ไทย ทำให้คนที่เข้าเว็บไซต์จากยุโรป , สหรัฐฯ , ออสเตรเลีย หรือที่ไกลๆ จะช้ามาก) พอย้ายมาใช้ Digital Ocean มันก็ยังถือว่าไม่ตอบโจทย์ เพราะเป็นแค่การเปลี่ยนฮาร์ดแวร์เท่านั้น แต่ระบบ CDN ของ Cloudflare มันจะทำการ Caching เว็บไซต์ของเราไปวางไว้ที่ CDN Network ทั่วทุกภูมิภาคของโลก และคนที่เข้าชมเว็บไซต์จากที่ไหนก็ตาม จะดึงข้อมูลจาก CDN ในภูมิภาคนั้นๆ แทนที่จะต้องมาถึงที่ไทย ทำให้เว็บไซต์จะโหลดเร็วมาก

และนี่คือ CDN Network ของ Cloudflare สังเกตุว่าจะมีอยู่ในทุกภูมิภาคของโลกเลยทีเดียว

หลังจากที่ทำตามคำแนะนำของ @koobitor อย่างใกล้ชิด ในที่สุดก็สามารถเริ่มทดสอบได้ โดยตอนนี้สามารถทำตามโจทย์ได้บางส่วน

เซิฟเวอร์พอรองรับได้หลัก 200,000 คน แต่ยังไม่ตอบโจทย์ที่ 500,000
ทำ CDN เพื่อให้เข้าเว็บได้เร็วจากทุกที่ทั่วโลก

แต่ปัญหาต่อมาคือ ผมต้องการให้ Server ทำงานน้อยที่สุด (อย่างที่บอก VPS เดิมที่ใช้ ใช้ RAM ไปถึง 2GB ตอนคนเข้าเยอะ) จน @koobitor ได้แนะนำให้ใช้ Cache ของ Cloudflare เข้าช่วย

Cache นี้จะทำหน้าที่โหลดข้อมูลของหน้าเว็บนั้นๆ จาก Server ของเรา (DigitalOcean) มาไว้ใน CDN ของ Cloudflare เอง และเมื่อมีคนเข้าเว็บไซต์หน้านั้นๆ มันจะไม่ต้องไปโหลดที่ Server เรา แต่จะมาโหลดที่ Cloudflare CDN แทน ดังนั้น ต่อให้มีคนเข้าเว็บ 100,000 คน Server เราก็จะทำงานเหมือนแค่คนดูแค่ 1 คน(จาก Cloudflare) เท่านั้น ฟังดูเจ๋งมั้ยหละ?

ปัญหาต่อเนื่องจาก CLOUDFLARE CDN

แต่ก็ยังมีปัญหาถัดมาให้ตามแก้ เพราะก่อนหน้านี้ผมไม่ได้ทำ Cache มาก่อน การออกแบบโครงสร้างเว็บไซต์เลยไม่ได้คำนึงถึงเรื่องนี้ เลยเกิดปัญหาตามมาจังๆ คือเว็บไซต์ผมมีระบบสมาชิก ทีนี้พอสมาชิก Login แล้ว ถึงจะแสดงเมนูขึ้นมา แต่เมื่อ Cloudflare มันทำการ Cache หน้าเว็บนั้นๆก่อนที่จะมีการ Login ทำให้เมื่อ Login แล้ว เมนูก็ไม่โผล่ เพราะมันติด Cache ที่เกิดก่อน Login นั่นเอง

ทีนี้จะแก้ยังไง..? ก่อนหน้านี้ผมใช้วิธีการ Login โดยการเช็ค Session มันตรงๆด้วย PHP เลย If..Else ธรรมดานี่แหละ แต่วิธีการต้องเปลี่ยนเมื่อทำ Cache เลยต้องเขียนฟังชันก์ Ajax Post ไปเช็คว่า มี Token นี้อยู่มั้ย ถ้ามีเป็นใครยังไง พอยืนยันตัวได้แล้ว ค่อยส่ง html เมนูกลับมา แล้วค่อยเอาไปแปะไว้ใน Div ที่ต้องการ เท่ากับว่า ต่อไปนี้ ส่วนไหนที่เป็น Dynamic Content ก็ต้องใช้วิธีนี้หมดเลย เป็นงานใหญ่พอสมควรที่ต้องแก้ แต่ก็คุ้มกับผลลัพธ์ที่ได้มา

สรุป

วันนี้ผมได้แก้โครงสร้างเว็บไซต์เสร็จ และได้ลองลงบทความฮ็อตๆ ไป 1 เรื่อง เพื่อลองดูประสิทธิภาพของ Digital Ocean และ Cloudflare ลองมาดูผลกันครับ

อันนี้จาก CLOUDFLARE

 

สังเกตุตรง Total Requests สูงถึง 300,000 แต่เรียก Cache ไปถึง 272,000 หรือคิดเป็น 90% เลยทีเดียว!

ลองดูตรงกลางครับ แบนวิธทั้งหมด 13.79GB แต่ประหยัดไปได้ 12.33GB! ใช้จริงๆแค่ 1 กว่าๆ

ส่วนอันนี้ สังเกตุด้านซ้าย มีการโจมตี 5 ครั้ง Cloudflare ป้องกันได้หมด และสังเกตุตรงกลางครับ มี Traffic จากหลายประเทศ อันนี้แสดงให้เห็นถึงประสิทธิภาพของ CDN Network ของ Cloudflare

ต่อมาเป็น DigitalOcean ลองดูว่า Server ทำงานเป็นไง

สังเกตุแบนวิธด์ของตัว Server ในตอนคนเข้าเยอะ (ราวๆ 11.48pm) จะเห็นว่าใช้ไปแค่ 2.4Mbps เอง ในช่วงเวลาเดียวกันนั้น CPU ทำงานแค่ 3.68% ในขณะที่ SSD เขียนข้อมูลแค่ 0.03MB/s

เรียกได้ว่า ทุกอย่างออกมาเป็นที่น่าพอใจมากกกกกกกกกกกกก และด้วยแนวโน้มแบบนี้ ผมแทบจะไม่ต้องอัพเกรดตัว Cloud Package เลย แค่เดือนละ $40 ก็น่าจะพอแล้วซึ่งพอแปลงเป็นไทย ถูกกว่าที่จ่ายค่า VPS ทุกวันนี้ซะอีก 55555

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

คราวหน้า ผมจะเขียนวิธีการ Deploy DigitalOcean และการตั้งค่าให้ใช้งานกับ Cloudflare แบบฟรีๆกันครับ