หากใครติดตามข่าวสาร IT คงรู้ว่าตอนนี้ Pantip.com ผลัดใบจาก “วันฉัตร” สู่ “อภิศิลป์” หรือที่เรียกกันบ่อยๆว่า Pantip 3G เนื่องจากวันนี้ผมก็คั้นไม้คั้นมืออยาก ออกแบบระบบ Pantip ในแนวทางของผมเอง (เพื่อจะมีหวังที่ได้ไปช่วยงานพี่บอย @MacroArt) เนื่องจากผมยังไม่เก่งเรื่อง Infrastructure แต่ก็ขอลองนั่งเทียนเขียนดูครับ ติชมกันได้ครับ เอาละครับผมจะวิเคราะห์ไปเป็นส่วนๆครับ
Pantip 3G ควรทำอะไรเป็นลำดับต้นๆ
- เพิ่มความเร็วในการโหลดหน้าเว็บไซต์
- ไม่ใช้ Iframe
- สามารถเข้าจาก Mobile แล้วมีสามารถอ่านได้สะดวก
- มีระบบ RSS/Atom/Email Notification ในส่วนของ “กระทู้” และ “ความคิดเห็นของกระทู้”
- Data Mining + Social Commerce
- Social Media Friendly + SEO
- HTML5 + RDF
- YSlow + Google PageSpeed เกรด A
ซึ่งในส่วนนี้จะเป็นจุดที่ทำให้คนใช้ Pantip เยอะยิ่งขึ้นเพราะเมื่อโหลดเร็วคนก็อยากเข้า / เมื่อคนไม่เข้าก็มี Noti เตือนให้เขาเข้า / เมื่อนำไป Share คนก็อยากกด / สุดท้ายเมื่อนำไปแสดงบน Search Engine การใช้ RDF จะทำให้เราสามารถบรรยายข้อมูลได้มากขึ้นกับ Google หรือที่ Google เรียกว่า Rich Snippets
Platform
โดยใช้ CI เพราะผมถนัด + มันเรียนรู้ได้ง่าย , PHP 5.3 เพื่อการทำ OOP + มี Library ใหม่ๆให้ใช้ เสร็จแล้วใช้ MySQL 5.5 เพื่อเก็บข้อมูลตามปกติ , ต่อมาทำไมใช้ Redis แล้ว Memcached ละเป็นผมจะเลือกสักตัวไม่ Redis ก็ Memcached แต่เมื่อมาชั่งน้ำหนักแล้วผมเลือก Redis แล้วที่ไม่ใช้ Memcached เลยเพื่อลดปัญหาการเขียน Code ซ้ำแล้ว Maintenance ลำบาก ต่อมาเลือก Job Queue แต่ที่ดูแล้วชอบคงหนีไม่พ้นของ Zend Server + Job Queue เพราะใช้ง่าย แต่เสียดายต้องลง Zend Server ซึ่งมาค่า License
สุดท้ายคือ MongoDB ตัวนี้มีหน้าที่เก็บ Log เพียงอย่างเดียวโดยล่าสุด 1.7.5 นั้นมีการทำงานแบบ Durability ทำให้สามารถใช้เครื่องเดียวได้โดยไม่ต้องกลัวข้อมูลศูนย์หายอีกต่อไป (แต่น่าจะช้าลง) ทั้งนี้ทั้งนั้นสุดท้ายอยู่ที่การเขียน Code / วาง Database อยู่ดีในการทำให้มัน Maintenance ง่ายๆกับมี Performance สูง ส่วนที่มี S3/Cloudfront มาเกี่ยวข้องนั้นจะได้ลดภาระของเครื่องไปอยู่ที่ Amazon แทนซึ่งเสียเงินมากหน่อย แต่เหมือนเป็นการ Outsource งาน โดยไม่ต้องมากลัวเรื่อง Disk เต็มได้ง่ายๆ
ส่วนในเรื่อง Varnish เป็นตัว Reverse Proxy ซึ่งถ้าการแสดงผลเปลี่ยนแปลงก็จะไปอัพเดต Proxy ทำให้ไม่ต้องรอ Request ก่อนแล้วค่อย Check สุดท้ายการใช้ HTML5 Cache Manifest จะช่วยให้การใช้ Bandwidth น้อยลง
การควบคุมคุณภาพ
แน่นอนครับเรื่องหลักๆของ Software ที่ดีต้องมีตัวชี้วัดที่ดี ดังนั้น Process ที่สำคัญในการพัฒนาครั้งใหม่นี้คือ “ตัวชี้วัด” เช่น กิน CPU น้อยกว่าเดิมไหม ? , ใช้ Mem น้อยกว่าเดิมไหม ? รองรับ Throughput เยอะขึ้นไหม ? Write หรือ Read มากกว่ากัน ?ฯลฯ โดยสุดท้ายเราต้องดูถึงขนาด Function ได้เลยว่า Function ไหนทำให้ระบบงานช้า ! ซึ่งถ้าใช้ Zend Server จะช่วยลดภาระงานประเภทนี้ได้มาก + สุดท้ายเร็วอย่างเดียวไม่ได้ต้องทำงานถูกต้องด้วยดังนั้นไม่ควรพลาดที่จะทำ Automated Test เพื่อการพัฒนาอย่างมั่นใจ ! สุดท้ายแต่ไม่ท้ายสุดการควบคุม Version เพราะเราต้องทำงานหลายคน แล้วเราจะต้องรู้ให้ได้ว่าใครเป็นคนทำอะไร
การสร้างข้อตกลงเพื่อบรรลุเป้าหมาย Scale Out
เนื่องจากงานนี้ทำใหม่ทั้งทีต้องทำให้เมพขิงๆ ดังนั้นการตั้งข้อตกลงในการ Coding จะทำให้มีผลในการทำ Scale Out ได้ซึ่งเป็นเหตุผลหนึ่งที่ถ้าไม่ทำในตัว Application เองก็ควรทำที่ MySQL Proxy (แต่ผมแนะนำให้ทำที่ Proxy ถึงแม้จะเขียนยากหน่อยเพราะมันใช้ภาษา Lua) แล้วการออกแบบ Database จะเป็นส่วนสำคัญ ที่จะทำให้เร็วไม่เร็ว และการ Shard จะช่วยให้เรื่อง Write ได้เร็ว / ส่วน Replication จะทำให้ Read ได้ไว แต่เนื่องจากยุคใหม่นั้นการ Read/Write ที่ไวกว่าคืออยู่บน Mem แต่จำทำยังไงให้มันเร็วได้ทั้ง Read / Write และโอกาสเสียข้อมูลน้อย เป็นผมคงทำ Cache ในระดับ Model และ View ซึ่งเมื่อประกบกับ Varnish ซึ่งเป็น Reverse Proxy แล้ว Performance ก็จะสูงปรี๊ดแต่ประเด่นคือเราไม่ได้มีแค่ Server ตัวเดียว ดังนั้นการทำ Convention ในส่วนการอัพเดต Cache ก็เลยเป็นเรื่องสำคัญ !
ส่วนถ้าดูวิธีนี้เป็นการยุ่งยาก การใช้ Virtualization ก็สามารถทำให้ Scale Out ได้เช่นกัน แต่คราวนี้ก็จะไปหนักไปทาง System Admin มากกว่าทาง Developer ซึ่งการทำ เป็นการเปลี่ยนวิธีการ “แยกที่ทำงาน” เป็น “มีที่เดียวแต่เพิ่มหลังให้ทำงานเร็ว” แต่สุดท้ายการมีที่อยู่แหล่งเดียวก็ไม่สามารถการันตี Availability ได้ดังนั้นอย่างน้อยถ้าจะ VM ก็ควรมีสักสอง
สรุปและทิ้งท้าย
เนื่องจากนี้เป็นการวิเคราะห์ในมุมมองของผม ซึ่งไม่มีตัวเลขชี้วัดเป็นการนั่งเทียนขึ้นมา ซึ่งผมอาจจะมั่ว + ผิดถ้าใครมีข้อคิดเห็นอย่างไรกับเรื่องนี้มา Share กันให้ฟังบ้างนะครับ และหวังว่า Pantip 3G ครั้งนี้จะเป็นการเปลี่ยนแปลงครั้งยิ่งใหญ่ของ Pantip.com ซึ่งทำให้เป็นเว็บ Social Network อันดับหนึ่งของไทยตลอดไปครับ