stackoverflow

ผมเชื่อว่า 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 เป็นดังนี้

Screen Shot 2557-05-16 at 12.10.08 AM

แล้วขั้นตอนการพัฒนาเป็นอย่างไรล่ะ ??
1. เริ่มต้นจะมีการแจ้งเพื่อขอพัฒนาความสามารถใหม่ๆ เข้ามา

2. ทีมพัฒนาทำการ coding และ testing บนเครื่องของตนเอง

3. เมื่อทีมพัฒนาเห็นว่าสิ่งที่ทำมันสามารถทำงานตามที่คสดหวังแล้ว
จะทำการ push code และส่วนต่างๆ ที่เกี่ยวข้องไปยัง code repository

4. โดยระบบ Continuous Integration จะทำการ build, test และเมื่อทุกอย่างผ่าน
จะทำการ deploy ไปยัง production server
สามารถเข้าทำการทดสอบระบบผ่าน dev.stackoverflow.com
แน่นอนว่าต้อง login เข้าไปเพื่อทดสอบ เนื่องจากใช้สำหรับทีมภายในเท่านั้น

Screen Shot 2557-05-16 at 12.16.02 AM
ใน presentation ได้แสดงการใช้งานในระบบ dev
ซึ่งมีหน้าตาหรือความสามารถต่างๆ เหมือนกับการใช้งานปกติทั่วไป
เพียงแต่มีความสามารถที่กำลังพัฒนาอยู่เท่านั้น ที่เพิ่มเข้ามา
แต่เน้นย้ำว่าเป็นการ deploy บน production server ดังรูป

Screen Shot 2557-05-16 at 12.17.07 AM

5. เมื่อการพัฒนาเสร็จสิ้น การทดสอบต่างๆ เสร็จสิ้นแล้ว
จะทำการ deploy แบบ 1-click ไปยัง meta.stackexchange.com

6. เมื่อทำการทดสอบแล้วพบข้อผิดพลาด ก็จะทำการ revert กลับไปยังเวอร์ชันก่อนหน้า
แล้วส่ง feedback กลับไปยังทีมพัฒนาเพื่อทำการแก้ไข

แต่ถ้าทุกอย่างเรียบร้อย จะทำการ deploy แบบ 1-click ไปยังเครือข่ายของผู้ใช้งานจริงๆ ทั่วโลกต่อไป

โดยความสามารถใหม่ๆ ก็จะมีขั้นตอนการพัฒนาแบบนี้อยู่อย่างเสมอ
สิ่งที่เราเห็นได้ชัดเจนคือ ทำการ deploy ขึ้น production server ตั้งแต่แรก
ทำให้ไม่ต้องกลัวเรื่องการ deploy เลย
แถมมีระบบการ deploy แบบ 1-click ยิ่งทำให้มีความน่าเชื่อถือและมั่นใจ
ใน Stack Overflow ทำการ deploy ความสามารถใหม่ๆ อย่างน้อยวันละ 50 ครั้ง

สรุปภาพรวมการพัฒนาเป็นดังรูป

Screen Shot 2557-05-16 at 12.22.39 AM

ลองมองย้อนกลับไปที่บริษัทของคุณดูว่า คุณใช้เวลาการ 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 ที่สร้างขึ้นมา จึงอยู่ในรูปแบบดังรูป

Screen Shot 2557-05-16 at 12.34.34 AM
และแนวคิดสุดท้ายคือ YAGNI
นั่นหมายความว่า จะไม่สร้างสิ่งที่คนอื่นสร้างไว้ดีแล้ว
แต่ให้นำมาใช้เลย
สุดท้ายก็จัด code ให้สวยงาม แล้วเปิดเผย code ให้คนอื่นๆ ทั่วโลกนำไปใช้งาน
ซึ่งเป็นแนวคิดและแนวทางที่ดีมากๆ ขอชื่นชมครับ

สุดท้ายจริงๆ แล้ว

สามารถสรุปแนวทางของ Stack Overflow ได้ดังนี้

  • Performance คือ feature
  • พร้อมที่จะ deploy อยู่เสมอ
  • ใช้สถานการณ์หรือปัญหาต่างๆ เพื่อสร้างสิ่งที่ดีกว่าขึ้นมา
  • พยายามเปิดเผย code ออกไปให้มากที่สุด
  • แน่นอนว่าต้องมี Monitor จอใหม่ๆ เข้าไว้ดูขีพจรของระบบ

ขอให้สนุกกับการพัฒนาครับ …

Reference Website
http://highscalability.com/blog/2009/8/5/stack-overflow-architecture.html