ผมเชื่อว่า developer ทุกๆ คน ต้องมี web นี้อยู่ใน secret toolbox ของตัวเองอย่างแน่นอน
และการพัฒนาแบบนี้ผมชอบเรียกว่าStack Overflow Driven Development
คิดไม่ออก บอกไม่ถูก เข้ามาค้นหาวิธีการต่างๆ
แต่รู้ไหมว่าระบบ Stack Overflow นั่นเขาพัฒนากันอย่างไร
ดังนั้นเรามาแอบดูกันดีกว่า
เริ่มต้นมาดูกันก่อนว่าระบบพัฒนาด้วยอะไรบ้าง
- ภาษาโปรแกรมที่ใช้คือ C#
- ดังนั้นการพัฒนาคงหนีไม่พ้น Vistual Studio .Net
- ในส่วนของ web framework ใช้ ASP.Net MVC
- พวก Caching ใช้ Redis
- ระบบการค้นหาใช้ Lucene.net
- Load balance ใช้ HAProxy
และยังมีเครื่องมืออีกมากมาย อ่านเพิ่มเติมได้จาก Reference Website
แต่เราไม่ได้ให้ความสนใจมากนัก
ส่วนที่สนใจก็คือ ขั้นตอนการพัฒนา
โดยนำเนื้อหามาจากงาน QCon ที่ญี่ปุ่น โดยคุณ @sklivvz
ภาพรวมแบบคร่าวๆ ของ Stack Overflow เป็นดังนี้
แล้วขั้นตอนการพัฒนาเป็นอย่างไรล่ะ ??
1. เริ่มต้นจะมีการแจ้งเพื่อขอพัฒนาความสามารถใหม่ๆ เข้ามา
2. ทีมพัฒนาทำการ coding และ testing บนเครื่องของตนเอง
3. เมื่อทีมพัฒนาเห็นว่าสิ่งที่ทำมันสามารถทำงานตามที่คสดหวังแล้ว
จะทำการ push code และส่วนต่างๆ ที่เกี่ยวข้องไปยัง code repository
4. โดยระบบ Continuous Integration จะทำการ build, test และเมื่อทุกอย่างผ่าน
จะทำการ deploy ไปยัง production server
สามารถเข้าทำการทดสอบระบบผ่าน dev.stackoverflow.com
แน่นอนว่าต้อง login เข้าไปเพื่อทดสอบ เนื่องจากใช้สำหรับทีมภายในเท่านั้น
ใน presentation ได้แสดงการใช้งานในระบบ dev
ซึ่งมีหน้าตาหรือความสามารถต่างๆ เหมือนกับการใช้งานปกติทั่วไป
เพียงแต่มีความสามารถที่กำลังพัฒนาอยู่เท่านั้น ที่เพิ่มเข้ามา
แต่เน้นย้ำว่าเป็นการ deploy บน production server ดังรูป
5. เมื่อการพัฒนาเสร็จสิ้น การทดสอบต่างๆ เสร็จสิ้นแล้ว
จะทำการ deploy แบบ 1-click ไปยัง meta.stackexchange.com
6. เมื่อทำการทดสอบแล้วพบข้อผิดพลาด ก็จะทำการ revert กลับไปยังเวอร์ชันก่อนหน้า
แล้วส่ง feedback กลับไปยังทีมพัฒนาเพื่อทำการแก้ไข
แต่ถ้าทุกอย่างเรียบร้อย จะทำการ deploy แบบ 1-click ไปยังเครือข่ายของผู้ใช้งานจริงๆ ทั่วโลกต่อไป
โดยความสามารถใหม่ๆ ก็จะมีขั้นตอนการพัฒนาแบบนี้อยู่อย่างเสมอ
สิ่งที่เราเห็นได้ชัดเจนคือ ทำการ deploy ขึ้น production server ตั้งแต่แรก
ทำให้ไม่ต้องกลัวเรื่องการ deploy เลย
แถมมีระบบการ deploy แบบ 1-click ยิ่งทำให้มีความน่าเชื่อถือและมั่นใจ
ใน Stack Overflow ทำการ deploy ความสามารถใหม่ๆ อย่างน้อยวันละ 50 ครั้ง
สรุปภาพรวมการพัฒนาเป็นดังรูป
ลองมองย้อนกลับไปที่บริษัทของคุณดูว่า คุณใช้เวลาการ deploy นานเท่าไร ?
เพิ่มเติม
ระบบของ Stack Overflow มีการจัดการ caching หลายชั้น ประกอบไปด้วย
- Network level cache เช่น การใช้งาน CDN เป็นต้น
- Server level cache คือการใช้ caching ของ C# หรือ .Net นั่นเอง
- Site level cache คือการใช้งาน Redis เพื่อเก็บข้อมูลต่างๆ ของระบบ
- SQL Server database cache ใช้หน่วยความจำประมาณ 400 GB
- Disk ใช้ Solid State
แน่นอนว่าที่นี่ เขาเก็บ caching กันทุกๆ อย่างเลย
ในการพัฒนา จะไม่ได้ใช้ Dependency Injection หรือพวก IoC container เลย
เนื่องจากมันก่อให้เกิดความซับซ้อนขึ้นมา
ดังนั้น code ที่สร้างขึ้นมา จึงอยู่ในรูปแบบดังรูป
และแนวคิดสุดท้ายคือ YAGNI
นั่นหมายความว่า จะไม่สร้างสิ่งที่คนอื่นสร้างไว้ดีแล้ว
แต่ให้นำมาใช้เลย
สุดท้ายก็จัด code ให้สวยงาม แล้วเปิดเผย code ให้คนอื่นๆ ทั่วโลกนำไปใช้งาน
ซึ่งเป็นแนวคิดและแนวทางที่ดีมากๆ ขอชื่นชมครับ
สุดท้ายจริงๆ แล้ว
สามารถสรุปแนวทางของ Stack Overflow ได้ดังนี้
- Performance คือ feature
- พร้อมที่จะ deploy อยู่เสมอ
- ใช้สถานการณ์หรือปัญหาต่างๆ เพื่อสร้างสิ่งที่ดีกว่าขึ้นมา
- พยายามเปิดเผย code ออกไปให้มากที่สุด
- แน่นอนว่าต้องมี Monitor จอใหม่ๆ เข้าไว้ดูขีพจรของระบบ
ขอให้สนุกกับการพัฒนาครับ …
Reference Website
http://highscalability.com/blog/2009/8/5/stack-overflow-architecture.html