สถาปัตยกรรมเบื้องหลัง Instagram
ข่าวนี้เก่าไปหลายเดือน แต่น่าจะเป็นประโยชน์สำหรับคนที่อยากรู้ว่าบริการยอดฮิตอย่าง Instagram สามารถรองรับโหลดปริมาณมหาศาลจากผู้ใช้ทั่วโลกได้อย่างไร
เรื่องนี้มีอธิบายไว้ในบล็อก Instagram Engineering
เซิร์ฟเวอร์
- Instagram ใช้เซิร์ฟเวอร์เสมือน คือเช่าบริการ Amazon EC2 ทั้งหมด ด้วยเหตุผลว่าปริมาณวิศวกรที่มี ไม่พอสำหรับการตั้งเซิร์ฟเวอร์เอง ดังนั้นเลือกเช่าใช้งาน EC2 ง่ายกว่า
-
ระบบปฏิบัติการเซิร์ฟเวอร์เป็น Ubuntu 11.04 โดยทีมงานบอกว่า Ubuntu รุ่นก่อนๆ มีปัญหากับ EC2 แต่ในรุ่นนี้ไม่มีแล้ว
Load Balancing
-
เดิมที Instagram ใช้เซิร์ฟเวอร์ NGINX สองตัว สลับกันแบบ DNS Round-Robin
- ภายหลังเปลี่ยนมาใช้ Amazon Elastic Load Balancer (ELB), NGINX 3 instance สำหรับทำ load balancer
- ใช้เทคนิคตัดการเชื่อมต่อแบบ SSL ที่ตัว ELB เพื่อลดโหลดของ NGINX
- ใช้ Amazon Route53 สำหรับ DNS
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
รายละเอียดแบบเต็มๆ อ่านได้จาก What Powers Instagram: Hundreds of Instances, Dozens of Technologies
นอกจากนี้ยังมีบล็อกอีกตอนคือ Keeping Instagram up with over a million new users in twelve hours ที่อธิบายว่า Instagram รองรับโหลดที่เพิ่มขึ้นจากเวอร์ชัน Android ได้อย่างไร
Source: www.blognone.com
Tagged with: Age • Amazon • Android • Blognone • Data • Network • Streaming • กิน • ข้อมูล • งาน • นก • พิเศษ • ภาพ • ย่าง • ระบบ • รุ่น • อัพ • เครื่อง • เดือน • เวลา • โหลด • ใหญ่ • ไฟ
Filed under: IT News
Like this post? Subscribe to my RSS feed and get loads more!