ข่าวนี้เก่าไปหลายเดือน แต่น่าจะเป็นประโยชน์สำหรับคนที่อยากรู้ว่าบริการยอดฮิตอย่าง 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 ได้อย่างไร
on
ใช้ Ubuntu ด้วย!
Charin Tapang Fri, 13/04/2012 - 16:34
ใช้ Ubuntu ด้วย!
เครื่องที่รัน PostgresQL
kimminwoo Fri, 13/04/2012 - 16:49
เครื่องที่รัน PostgresQL ทุกเครื่องจะต่อแบบ
SQL ตัวใหญ่ครับ
ใช้ python ด้วย
nextman13 Fri, 13/04/2012 - 16:52
ใช้ python ด้วย
แต่เหมือนจะล่มบ่อยมาก
nrml Fri, 13/04/2012 - 17:00
แต่เหมือนจะล่มบ่อยมาก
ทำกันสิบสามคน แต่ดูแล service
mr_tawan Fri, 13/04/2012 - 17:05
ทำกันสิบสามคน แต่ดูแล service เยอะขนาดนี้ ... ทำงานกันได้ยังไงหว่า 555
Route69
untilate Fri, 13/04/2012 - 17:07
Route69
ผมอยากรู้ค่าใช้จ่ายแต่ละเดือน
platalay Fri, 13/04/2012 - 18:05
ผมอยากรู้ค่าใช้จ่ายแต่ละเดือน
เหมือนเคยได้ยินว่า molome
best Fri, 13/04/2012 - 18:20
เหมือนเคยได้ยินว่า molome ก็ใช้ Amazon EC2 แต่ไม่รู้รายละเอียด
คิดอีกมุมหนึ่ง Amazon มีตลาด server ที่ดูดีกว่า 2เจ้าใหญ่อีกนะ
เว็บนอกใหญ่ๆ
jonathanz Fri, 13/04/2012 - 19:35
In reply to เหมือนเคยได้ยินว่า molome by best
เว็บนอกใหญ่ๆ ส่วนใหญ่ผมเห็นใช้ Amazon กันเยอะเลย
web นอกพวกนั้น
Ton-Or Sat, 14/04/2012 - 00:30
In reply to เว็บนอกใหญ่ๆ by jonathanz
web นอกพวกนั้น ต้องมาดูงานที่บ้านเราน่ะฮะ
เครื่องประกอบ ไม่ถึง 10k เปิดทิ้งได้เป็นปี คนดูแลวุฒิแค่ ปวส โครตเทพ!!!
เห็นเป็นแบบนี้หลายเจ้านะครับไม่เจาะจง ...
เปิดทิ้งไว้เป็นปี
czynet Sat, 14/04/2012 - 10:47
In reply to web นอกพวกนั้น by Ton-Or
เปิดทิ้งไว้เป็นปี มีคนเข้าใช้ปะคับ 555 (แซวเล่นนะครับ)
555 แบบมีคนเข้าไป เสียบ usb
Ton-Or Sat, 14/04/2012 - 19:37
In reply to เปิดทิ้งไว้เป็นปี by czynet
555 แบบมีคนเข้าไป เสียบ usb sata บ่อยๆ ลืมนึกถึงไปเลย เออ เหะ ฮ่าๆ
อยากรู้จริงทำไมถึงใช้ Ubuntu
lancaster Fri, 13/04/2012 - 18:49
อยากรู้จริงทำไมถึงใช้ Ubuntu กับ XFS
หรือว่าลงไปแต่แรก + เปลี่ยนไม่ทันแล้ว - -
XFS เหมาะกับ EC2 ที่สุดฮับ
nuuneoi Fri, 13/04/2012 - 19:56
In reply to อยากรู้จริงทำไมถึงใช้ Ubuntu by lancaster
XFS เหมาะกับ EC2 ที่สุดฮับ เป็น Recommended FS เลยหละ
พอคาดเดาได้ว่า Molo ใช้ EC2?
PaPaSEK Fri, 13/04/2012 - 19:59
In reply to XFS เหมาะกับ EC2 ที่สุดฮับ by nuuneoi
พอคาดเดาได้ว่า Molo ใช้ EC2?
ครับ
nuuneoi Fri, 13/04/2012 - 20:20
In reply to พอคาดเดาได้ว่า Molo ใช้ EC2? by PaPaSEK
ครับ เลยไม่มีตังค์จ่ายอยู่ทุกวันนี้
งิ้ง..... คนที่ชอบโมโลฯ
PaPaSEK Fri, 13/04/2012 - 20:47
In reply to ครับ by nuuneoi
งิ้ง..... คนที่ชอบโมโลฯ ตอนนี้น่าจะเริ่มเข้าใจแล้วนะครับ
ถ้าใช้กับ server จริงนี่ xfs
lancaster Sat, 14/04/2012 - 05:22
In reply to XFS เหมาะกับ EC2 ที่สุดฮับ by nuuneoi
ถ้าใช้กับ server จริงนี่ xfs พังง่ายจนน่ากลัวเลยฮะ
EBS ของ Amazon เป็น XFS หนะ
nuuneoi Sat, 14/04/2012 - 14:46
In reply to ถ้าใช้กับ server จริงนี่ xfs by lancaster
EBS ของ Amazon เป็น XFS หนะ ถ้าเราไปใช้อย่างอื่น จะมีปัญหาเรื่อง File Consistency ตอน Restore ข้อมูล
ดังนั้น Service ใหญ่ๆที่จำเป็นต้องยิง Snapshot เรื่อยๆ XFS เป็นสิ่งที่ "ต้อง" ทำเลยหละบน Amazon AWS
อยากรู้ด้วยคน
mementototem Fri, 13/04/2012 - 20:02
In reply to อยากรู้จริงทำไมถึงใช้ Ubuntu by lancaster
อยากรู้ด้วยคน
Scale ดีมากเลยนะ
khajochi Fri, 13/04/2012 - 19:43
Scale ดีมากเลยนะ ตอนเปิดเวอร์ชัน Android นี่ก็ลื่นมาก ทั้งที่มีคนสมัครใหม่หลายล้าน
ลองคำนวณราคาเล่นๆดู
nuuneoi Fri, 13/04/2012 - 19:46
ลองคำนวณราคาเล่นๆดู แล้วจะรู้ว่าทุนสำคัญขนาดไหน
(เดิมทีใช้ Apache + mod_wsgi
Be1con Fri, 13/04/2012 - 21:57
(เดิมทีใช้ Apache + mod_wsgi แต่เปลืองพลังซีพียูมากไป
ขาดวงเล็บไปอีก 1 ตัวครับ
เซิร์ฟเวอร์
iStyle Sat, 14/04/2012 - 00:59
เซิร์ฟเวอร์ น่าจะใช้ภาษาอังกฤษให้เข้าชุดกับกัวข้ออันอื่น ยิ่งมันเด้งไปอยู่ข้าง thumbnail แล้วมองไม่เหมือนหัวข้อไปใหญ่ = ='
ใหญ่มากเลย
btoy Sun, 15/04/2012 - 11:48
ใหญ่มากเลย