ข่าวนี้เก่าไปหลายเดือน แต่น่าจะเป็นประโยชน์สำหรับคนที่อยากรู้ว่าบริการยอดฮิตอย่าง Instagram สามารถรองรับโหลดปริมาณมหาศาลจากผู้ใช้ทั่วโลกได้อย่างไร
เรื่องนี้มีอธิบายไว้ในบล็อก Instagram Engineering
เซิร์ฟเวอร์
Application Servers
- ใช้ Django เป็น application server (ภาษา Python)
- เครื่องที่รันเป็นเครื่องรองรับโหลดหนักพิเศษของ EC2 คือรุ่น High-CPU Extra-Large (ข้อมูลเมื่อ 4 เดือนก่อน ใช้ 25 instance)
- ลักษณะงานของ Instagram เน้นซีพียูมากกว่าแรม จึงเลือกรุ่น High-CPU Extra-Large
- ใช้ Green Unicorn สำหรับเซิร์ฟเวอร์ WSGI ของ Python (เดิมทีใช้ Apache + mod_wsgi แต่เปลืองพลังซีพียูมากไป
- ใช้ Fabric สำหรับงานต่างๆ บนคอมมานด์ไลน์
Data storage
- ข้อมูลส่วนใหญ่เก็บใน PostgreSQL
- เครื่องที่ใช้รันฐานข้อมูลเป็นรุ่น Quadruple Extra-Large memory จำนวน 12 instance
- งานเกือบทั้งหมดรันบนหน่วยความจำตลอดเวลา เพื่อประสิทธิภาพที่ดี เพราะระบบการเก็บข้อมูลบนดิสก์ของ Amazon ตอบสนองช้าเกินไป
- ระบบไฟล์ของเครื่องที่ใช้ทำฐานข้อมูล เป็น XFS
- เครื่องที่รัน PostgreSQL ทุกเครื่องจะต่อแบบ master-replica โดยใช้ Streaming Replication
- รูปภาพทั้งหมดเก็บอยู่บน Amazon S3
- ใช้ Amazon CloudFront เป็น CDN ช่วยกระจายโหลดรูปภาพ
- ใช้ Redis สำหรับข้อมูล feed ทุกประเภท งานรันอยู่บนหน่วยความจำทั้งหมด ใช้เครื่อง Quadruple Extra-Large Memory สำหรับ Redis เช่นกัน
- งานด้าน geolocation เดิมทีค้นที่ระดับ PostgreSQL แต่เปลี่ยนมาใช้ Apache Solr ในภายหลัง
- ใช้ Memcached จำนวน 6 instance สำหรับแคช
Task Queue & Push Notifications
- Gearman สำหรับการจัดคิวงานแบบ asynchronous (งานพวกอัพรูปไปยัง social network จะรันอยู่เบื้องหลังผ่านระบบคิวงานนี้ แยกจากการอัพไฟล์รูป)
- pyapns สำหรับ push notification
Monitoring
- Munin สำหรับตรวจสอบสถานะการทำงานของโพรเซส
- ใช้ Pingdom ช่วยตรวจสอบโพรเซสจากภายนอกอีกชั้นหนึ่ง
รายละเอียดแบบเต็มๆ อ่านได้จาก What Powers Instagram: Hundreds of Instances, Dozens of Technologies
นอกจากนี้ยังมีบล็อกอีกตอนคือ Keeping Instagram up with over a million new users in twelve hours ที่อธิบายว่า Instagram รองรับโหลดที่เพิ่มขึ้นจากเวอร์ชัน Android ได้อย่างไร
Comments
ใช้ Ubuntu ด้วย!
เครื่องที่รัน PostgresQL ทุกเครื่องจะต่อแบบ
SQL ตัวใหญ่ครับ
ใช้ python ด้วย
แต่เหมือนจะล่มบ่อยมาก
ทำกันสิบสามคน แต่ดูแล service เยอะขนาดนี้ ... ทำงานกันได้ยังไงหว่า 555
Route69
ผมอยากรู้ค่าใช้จ่ายแต่ละเดือน
เหมือนเคยได้ยินว่า molome ก็ใช้ Amazon EC2 แต่ไม่รู้รายละเอียด
คิดอีกมุมหนึ่ง Amazon มีตลาด server ที่ดูดีกว่า 2เจ้าใหญ่อีกนะ
เว็บนอกใหญ่ๆ ส่วนใหญ่ผมเห็นใช้ Amazon กันเยอะเลย
web นอกพวกนั้น ต้องมาดูงานที่บ้านเราน่ะฮะ
เครื่องประกอบ ไม่ถึง 10k เปิดทิ้งได้เป็นปี คนดูแลวุฒิแค่ ปวส โครตเทพ!!!
เห็นเป็นแบบนี้หลายเจ้านะครับไม่เจาะจง ...
Ton-Or
เปิดทิ้งไว้เป็นปี มีคนเข้าใช้ปะคับ 555 (แซวเล่นนะครับ)
555 แบบมีคนเข้าไป เสียบ usb sata บ่อยๆ ลืมนึกถึงไปเลย เออ เหะ ฮ่าๆ
Ton-Or
อยากรู้จริงทำไมถึงใช้ Ubuntu กับ XFS
หรือว่าลงไปแต่แรก + เปลี่ยนไม่ทันแล้ว - -
XFS เหมาะกับ EC2 ที่สุดฮับ เป็น Recommended FS เลยหละ
พอคาดเดาได้ว่า Molo ใช้ EC2?
ครับ เลยไม่มีตังค์จ่ายอยู่ทุกวันนี้
งิ้ง..... คนที่ชอบโมโลฯ ตอนนี้น่าจะเริ่มเข้าใจแล้วนะครับ
ถ้าใช้กับ server จริงนี่ xfs พังง่ายจนน่ากลัวเลยฮะ
EBS ของ Amazon เป็น XFS หนะ ถ้าเราไปใช้อย่างอื่น จะมีปัญหาเรื่อง File Consistency ตอน Restore ข้อมูล
ดังนั้น Service ใหญ่ๆที่จำเป็นต้องยิง Snapshot เรื่อยๆ XFS เป็นสิ่งที่ "ต้อง" ทำเลยหละบน Amazon AWS
อยากรู้ด้วยคน
Jusci - Google Plus - Twitter
Scale ดีมากเลยนะ ตอนเปิดเวอร์ชัน Android นี่ก็ลื่นมาก ทั้งที่มีคนสมัครใหม่หลายล้าน
แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com
ลองคำนวณราคาเล่นๆดู แล้วจะรู้ว่าทุนสำคัญขนาดไหน
(เดิมทีใช้ Apache + mod_wsgi แต่เปลืองพลังซีพียูมากไป
ขาดวงเล็บไปอีก 1 ตัวครับ
Coder | Designer | Thinker | Blogger
เซิร์ฟเวอร์ น่าจะใช้ภาษาอังกฤษให้เข้าชุดกับกัวข้ออันอื่น ยิ่งมันเด้งไปอยู่ข้าง thumbnail แล้วมองไม่เหมือนหัวข้อไปใหญ่ = ='
May the Force Close be with you. || @nuttyi
ใหญ่มากเลย
..: เรื่อยไป