Technology เพื่อการ Scale Website
ตอนนี้ผมสนใจพวก NoSQL หรือสิ่งใหม่ๆที่จะทำให้เว็บไซต์เราเร็วขึ้น แล้วรองรับการ CRUD ข้อมูลเป็นจำนวนมาก ผมก็เลยไปค้นคว้ามาซึ่งทำให้ผมค้นพบเจ้าพวกนี้ครับ
- MongoDB เป็น Document Oriented ซึ่งนอกจากความเร็วในการ Insert ที่มากกว่า MySQL แล้วยังทำตาม Best Practice ของ Database ในแง่ของการป้องกันการล่มของ Database ซึ่งตอนนี้ขาดแต่เรื่อง Shard (แต่กำลังทำ)
- Cassandra Open-source จาก Facebook ซึ่งสถาปัตยกรรมนั้นเป็นแบบ Key-value stored แต่พ่วงของเรื่อง High Availabile มาด้วย ตอนนี้ถูกใช้อย่างแพร่หลายไม่ว่าจะเป็น Digg , Facebook , Twitter , Reddit (แค่ดูจากเว็บก็รู้แล้วว่าใหญ่แค่ไหน)
- Hadoop อันนี้เป็น Framework จากทาง Yahoo สำหรับทำ High Availabile ซึ่งลงลึกถึง File System , Distributed System ฯลฯ
- Gizzard เป็น Distributed Datastore Framework จากทาง Twitter ซึ่งทำให้เราจัดการกับฐานข้อมูลหลายๆแห่งได้ง่ายขึ้นโดยจะเน้นไปเรื่อง Shard และ Replication
- RabbitMQ หลังจาก AMQP (Advanced Message Queue Protocol) มีมาตรฐานเป็นรูปเป็นร่างแล้ว RabbitMQ คือตัวที่ Implement ตามมาตรฐาน เพื่อความเข้าใจคุณควรอ่าน Message Oritented Middleware แล้วก็อันนี้
- NodeJS เกิดมาเพื่อทำให้เราเขียน Scalable network program ได้โดยง่ายด้วยภาษา Javascript เช่น Chatroom
นอกจากนั้นเราอาจจะไม่รู้จัก Storage Engine ซึ่งมีประสิทธิภาพสูง อย่าง SPIDER หรือ Drizzle โดยส่วนตัวของผมเรื่องจะให้รองรับ Scale ไม่ Scale นั้นเป็นเรื่องรอง แต่เรื่องหลักคือทำยังไงให้ข้อมูลเราส่งไปยังผู้ใช้งานได้รวดเร็วที่สุด ซึ่งผมให้ความสำคัญกับการวัดด้วย YSlow และ PageSpeed มากกว่า แล้วถ้าเราต้องการให้คนทั่วโลกใช้ก็ไปใช้ Cloud กับ CDN ก่อนแล้วถ้ามันช้าจริงๆค่อยใช้พวก Technology เพื่อการ Scale ก็ยังไม่สายป่านนั้นคงมีเงินถุงเงินถังไปแล้ว =)
ขอสรุปไว้อีกนิด ก่อนจะคิดใช้ Technology ใหม่ๆเราควรวัดตัวเลขในทุกๆเรื่องก่อน แล้วคราวนี้ค่อยมาคิดดูว่าควรใช้ Technology อะไรในการแก้ปัญหาเรื่องๆนั้น โดยควรวัดในระดับๆต่างๆ เช่น Hardware , OS , Network , Server และ DB , Application โดยคร่าวๆมีดังนี้
Hardware เราควร Benchmark เรื่องความเร็ว CPU , RAM , Harddisk
Operation System เช่น
- CPU Usage
- RAM Usage
- Disk Usage
Network เช่น
- Upload/Download Stream
- Package
Server และ DB เช่น
- CPU / Memory Usage
- Limit Connection
- Concurrency
- CRUD
Application เช่น
- Request per second
- Transfer Rate
ยังมีค่าอีกจำนวนมากที่ต้องถูกวัดในการทำ Application ระดับประเทศหรือระดับโลก จะต้องละเอียดตั้งแต่เรื่อง Hardware , OS ไปจนถึง Software แต่ละชิ้น ร่วมถึงการทำ Network ซึ่งสังเกตุว่าใช้ศาสตร์หลายแขนงมาก ดังนั้นถ้าเรามีสิทธิคุมสภาพแวดล้อมต่างๆได้เองแล้วคุณจะเห็นว่าเราเพิ่มความเร็วได้ทุกส่วนจริงๆ ไม่จำเป็นต้องพึงแต่ NoSQL เท่านั้น ฝากไว้เท่านี้ครับสวัสดีครับ
| Tweet |
เนื้อหาคล้ายกันที่น่าสนใจ

สงสัยว่าพวก Document Oriented ทำ insert เร็วขึ้น เพราะอะไรครับ
เท่าที่อ่านดูเหมือนใช้ประโยชน์จาก XML, YAML หรือ JSON
แบบนี้การจะดึงข้อมูลน่าจะช้ากว่า MySQL หรือเปล่า หรือทำโครงสร้าง B-tree ใน Document
อย่างนี้ความเร็วก็ต้องขึ้นกับ Parser ด้วยสิ ถ้าเป็น XML ก็น่าจะ parse ได้ช้าหรือเปล่าครับ?
ผมก็ไม่แน่ใจครับ อาจจะมาจากหลายๆเรื่อง แต่ถ้าเป็น MongoDB นี้เร็วกว่า MySQL ทั้ง Insert และดึงข้อมูลครับ
ซึ่งผมว่าสิ่งที่ทำให้ insert ได้เร็วส่วนหนึ่งเพราะมันไม่ต้องมี Table Structure ก็เป็นได้ครับ
มาเก็บครับ