Node Thumbnail

ข่าวนี้เก่าไปหลายเดือน แต่น่าจะเป็นประโยชน์สำหรับคนที่อยากรู้ว่าบริการยอดฮิตอย่าง 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

  • 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 ได้อย่างไร

Get latest news from Blognone

Comments

By: Charin Tapang
ContributorAndroidRed HatUbuntu
on 13 April 2012 - 16:34 #407796
Charin Tapang's picture

ใช้ Ubuntu ด้วย!


Charin Tapaeng on G+

By: kimminwoo
AndroidRed HatUbuntuWindows
on 13 April 2012 - 16:49 #407801

เครื่องที่รัน PostgresQL ทุกเครื่องจะต่อแบบ

SQL ตัวใหญ่ครับ


It is Signature = ="

By: nextman13
AndroidBlackberryUbuntuWindows
on 13 April 2012 - 16:52 #407802

ใช้ python ด้วย


โปรแกรมที่ยังไม่มี bug คือโปรแกรมที่ยังไม่ได้เขียน

By: nrml
ContributorIn Love
on 13 April 2012 - 17:00 #407803
nrml's picture

แต่เหมือนจะล่มบ่อยมาก

By: mr_tawan
ContributoriPhoneAndroidWindows
on 13 April 2012 - 17:05 #407804
mr_tawan's picture

ทำกันสิบสามคน แต่ดูแล service เยอะขนาดนี้ ... ทำงานกันได้ยังไงหว่า 555


  • 9tawan.net บล็อกส่วนตัวฮับ
By: untilate
ContributorAndroidWindows
on 13 April 2012 - 17:07 #407805

Route69

By: platalay
iPhoneWindows PhoneAndroidWindows
on 13 April 2012 - 18:05 #407818

ผมอยากรู้ค่าใช้จ่ายแต่ละเดือน

By: best
iPhoneAndroid
on 13 April 2012 - 18:20 #407822

เหมือนเคยได้ยินว่า molome ก็ใช้ Amazon EC2 แต่ไม่รู้รายละเอียด
คิดอีกมุมหนึ่ง Amazon มีตลาด server ที่ดูดีกว่า 2เจ้าใหญ่อีกนะ

By: jonathanz on 13 April 2012 - 19:35 #407838 Reply to:407822

เว็บนอกใหญ่ๆ ส่วนใหญ่ผมเห็นใช้ Amazon กันเยอะเลย

By: Ton-Or
ContributorAndroidCyberbeingRed Hat
on 14 April 2012 - 00:30 #407963 Reply to:407838
Ton-Or's picture

web นอกพวกนั้น ต้องมาดูงานที่บ้านเราน่ะฮะ
เครื่องประกอบ ไม่ถึง 10k เปิดทิ้งได้เป็นปี คนดูแลวุฒิแค่ ปวส โครตเทพ!!!

เห็นเป็นแบบนี้หลายเจ้านะครับไม่เจาะจง ...


Ton-Or

By: czynet
iPhoneRed HatUbuntu
on 14 April 2012 - 10:47 #408049 Reply to:407963

เปิดทิ้งไว้เป็นปี มีคนเข้าใช้ปะคับ 555 (แซวเล่นนะครับ)

By: Ton-Or
ContributorAndroidCyberbeingRed Hat
on 14 April 2012 - 19:37 #408163 Reply to:408049
Ton-Or's picture

555 แบบมีคนเข้าไป เสียบ usb sata บ่อยๆ ลืมนึกถึงไปเลย เออ เหะ ฮ่าๆ


Ton-Or

By: lancaster
ContributoriPhoneAndroid
on 13 April 2012 - 18:49 #407829
lancaster's picture

อยากรู้จริงทำไมถึงใช้ Ubuntu กับ XFS

หรือว่าลงไปแต่แรก + เปลี่ยนไม่ทันแล้ว - -

By: nuuneoi on 13 April 2012 - 19:56 #407847 Reply to:407829

XFS เหมาะกับ EC2 ที่สุดฮับ เป็น Recommended FS เลยหละ

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 13 April 2012 - 19:59 #407850 Reply to:407847
PaPaSEK's picture

พอคาดเดาได้ว่า Molo ใช้ EC2?

By: nuuneoi on 13 April 2012 - 20:20 #407855 Reply to:407850

ครับ เลยไม่มีตังค์จ่ายอยู่ทุกวันนี้

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 13 April 2012 - 20:47 #407856 Reply to:407855
PaPaSEK's picture

งิ้ง..... คนที่ชอบโมโลฯ ตอนนี้น่าจะเริ่มเข้าใจแล้วนะครับ

By: lancaster
ContributoriPhoneAndroid
on 14 April 2012 - 05:22 #408019 Reply to:407847
lancaster's picture

ถ้าใช้กับ server จริงนี่ xfs พังง่ายจนน่ากลัวเลยฮะ

By: nuuneoi on 14 April 2012 - 14:46 #408104 Reply to:408019

EBS ของ Amazon เป็น XFS หนะ ถ้าเราไปใช้อย่างอื่น จะมีปัญหาเรื่อง File Consistency ตอน Restore ข้อมูล

ดังนั้น Service ใหญ่ๆที่จำเป็นต้องยิง Snapshot เรื่อยๆ XFS เป็นสิ่งที่ "ต้อง" ทำเลยหละบน Amazon AWS

By: mementototem
ContributorJusci's WriterAndroidWindows
on 13 April 2012 - 20:02 #407851 Reply to:407829
mementototem's picture

อยากรู้ด้วยคน


Jusci - Google Plus - Twitter - FSN

By: khajochi
WriteriPhoneIn Love
on 13 April 2012 - 19:43 #407841
khajochi's picture

Scale ดีมากเลยนะ ตอนเปิดเวอร์ชัน Android นี่ก็ลื่นมาก ทั้งที่มีคนสมัครใหม่หลายล้าน


แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com

By: nuuneoi on 13 April 2012 - 19:46 #407844

ลองคำนวณราคาเล่นๆดู แล้วจะรู้ว่าทุนสำคัญขนาดไหน

By: Be1con
ContributorWindows PhoneWindowsIn Love
on 13 April 2012 - 21:57 #407879
Be1con's picture

(เดิมทีใช้ Apache + mod_wsgi แต่เปลืองพลังซีพียูมากไป

ขาดวงเล็บไปอีก 1 ตัวครับ


< Code | Design | Life | Blogger | Beyond >

By: iStyle
ContributoriPhoneAndroidSymbian
on 14 April 2012 - 00:59 #407973
iStyle's picture

เซิร์ฟเวอร์ น่าจะใช้ภาษาอังกฤษให้เข้าชุดกับกัวข้ออันอื่น ยิ่งมันเด้งไปอยู่ข้าง thumbnail แล้วมองไม่เหมือนหัวข้อไปใหญ่ = ='


May the Force Close be with you. || @nuttyi

By: btoy
ContributorAndroidWindows
on 15 April 2012 - 11:48 #408259
btoy's picture

ใหญ่มากเลย


..: เรื่อยไป