47 คะแนน โดย GN⁺ 2023-09-18 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • ตั้งแต่ 2010/10 ถึง 2011/11 ใช้เวลาประมาณ 1 ปีในการเติบโตจากผู้ใช้ 0 คนเป็น 14 ล้านคน โดยมีวิศวกรเพียง 3 คน
  • ยึดตามหลักการ 3 ข้อ
    • ทำให้เรียบง่ายที่สุด (Keep things very simple.)
    • อย่าสร้างสิ่งที่มีอยู่แล้วขึ้นมาใหม่ (Don’t re-invent the wheel.)
    • ใช้เทคโนโลยีที่ผ่านการพิสูจน์แล้วและมีความเสถียรเมื่อเป็นไปได้ (Use proven, solid technologies when possible.)

มาดูสแตกแบบง่าย ๆ จากมุมมองของผู้ใช้

  • โครงสร้างพื้นฐานช่วงแรกอยู่บน AWS EC2 พร้อม Ubuntu Linux
  • แอป Instagram เปิดตัวบน iOS ก่อนเท่านั้น และเนื่องจากเป็นช่วงก่อนประกาศ Swift จึงมีความเป็นไปได้สูงว่าใช้ Objective-C + UIKit
  • ใช้ Amazon Elastic Load Balancer และ NGINX 3 อินสแตนซ์เพื่อทำ load balancing
  • แบ็กเอนด์
    • แอปพลิเคชันเซิร์ฟเวอร์พัฒนาด้วย Python โดยใช้ Django และ WSGI server อย่าง Gunicorn
    • ใช้ Fabric เพื่อรันคำสั่งเดียวกันพร้อมกันบนหลายอินสแตนซ์ ทำให้ deploy โค้ดได้ภายในไม่กี่วินาที
    • รันเครื่อง CPU ประสิทธิภาพสูงขนาด Extra-Large จำนวน 25 เครื่อง ทั้งหมดเป็นแบบ stateless จึงเพิ่มได้ง่ายเมื่อจำเป็น
  • ที่เก็บข้อมูลทั่วไป
    • มี photo ID ที่เกี่ยวข้อง รูปภาพจริงของ ID นั้น และข้อมูลผู้ใช้เกี่ยวกับรูปภาพ
    • แอปพลิเคชันเซิร์ฟเวอร์ดึงข้อมูลจาก PostgreSQL
    • ใช้ pgbouncer สำหรับทำ pooling ระหว่าง Django และ PostgreSQL
    • Instagram ใช้ ID ที่สามารถเรียงตามเวลาได้: 41 บิตมิลลิวินาที + 13 บิต shard ID + 10 บิตลำดับเพิ่มอัตโนมัติ
  • ที่เก็บรูปภาพ: S3 และ Cloudfront
  • การแคช: Redis และ Memcached
    • เก็บการแมปคีย์ 300 ล้านรายการในพื้นที่ไม่ถึง 5GB ด้วยการแฮชอย่างชาญฉลาด
    • และอีก 2 ปีต่อมา Facebook ก็เผยแพร่งานวิจัยเกี่ยวกับวิธีสเกล Memcached เพื่อรองรับคำขอหลายพันล้านครั้งต่อวินาที
  • ทั้ง Postgres และ Redis ทำงานในโหมด Master-Replica และสำรองข้อมูลต่อเนื่องด้วย Amazon EBS snapshot
  • Push Notification และ Async Task: ใช้ pyapns สำหรับการแจ้งเตือน และ Gearman เป็น task queue
  • ใช้ Sentry ซึ่งเป็นโอเพนซอร์ส Django app เพื่อติดตามข้อผิดพลาดแบบเรียลไทม์, ใช้ Munin สำหรับเมตริกระดับระบบทั้งหมด, และใช้ Pingdom กับ PagerDuty สำหรับมอนิเตอร์บริการภายนอก

3 ความคิดเห็น

 
botplaysdice 2023-09-19

ช่วงแรกๆ ของ Instagram (ตอนที่ดื้อดึงรองรับแค่ iPhone เท่านั้น) ให้ความรู้สึกเหมือนเป็นแอปฟิลเตอร์ภาพเก๋ๆ แอปหนึ่งเท่านั้นเองนะครับ แต่ไม่เคยคิดเลยว่าจะประสบความสำเร็จถล่มทลายได้ขนาดนี้ (จินตนาการของผมมีได้แค่นั้นจริงๆ ;;;)

 
princox 2023-09-18

ในบรรดาการเปรียบเทียบผลิตภัณฑ์ที่เคยมีประสบการณ์จนถึง Exit ผมจำได้ว่า Instagram อยู่ในสถานะที่มูลค่าเอ็กซิตต่อคนค่อนข้างสูงมาก คิดว่ามีหลายอย่างที่น่าเรียนรู้ครับ

 
GN⁺ 2023-09-18
ความคิดเห็นจาก Hacker News
  • บทความเกี่ยวกับวิธีที่ Instagram มีผู้ใช้ 14 ล้านคนได้ด้วยวิศวกรเพียงสามคน
  • มีการถกเถียงกันเรื่องภาษาที่บทความเหมือนจะสื่อว่า Instagram เขียนด้วย Objective-C และ UIKit
  • ความคิดเห็นบางส่วนชื่นชมความเรียบง่ายของเทคโนโลยีสแต็กของ Instagram และเสนอว่าหลายบริษัทน่าจะได้ประโยชน์จากแนวทางคล้ายกัน
  • ความสำคัญของการคัดเลือกสมาชิกทีมถูกเน้นย้ำในความเห็นหนึ่งที่ว่า "ถ้าเลือกคนได้เหมาะสม คุณต้องการแค่ไม่กี่คน แต่ถ้าไม่ใช่ คุณจะต้องการทุกคน"
  • มีความสงสัยว่า Instagram ทำอย่างไรจึงอัปเดตฟีดของผู้ใช้หลายล้านคนได้ทันที ซึ่งถูกมองว่าเป็นงานที่ท้าทายยิ่งกว่าการขยายการอ่านในระบบกระจาย
  • มีการคาดเดาว่า Instagram น่าจะขยายระบบได้ไกลแค่ไหนหากใช้เทคโนโลยียุคปัจจุบัน โดยคำนึงถึง Django, Postgres, Redis และความก้าวหน้าด้านความเร็วฮาร์ดแวร์
  • บทความนี้จุดประกายการถกเถียงเรื่องขนาดของทีมวิศวกรรม โดยบางคนเข้าใจได้ยากว่าทำไมบางองค์กรที่มีเพียงแอป CRUD พื้นฐานจึงต้องการวิศวกรนับพันคน
  • ผู้อ่านบางส่วนรู้สึกได้รับแรงบันดาลใจและอยากสร้าง Instagram เวอร์ชันของตัวเอง
  • มีการกล่าวถึงว่าในช่วงแรกของ Instagram มีเพียงฟรอนต์เอนด์เดียวคือแอป iOS และมีฟีเจอร์น้อยกว่าแพลตฟอร์มโซเชียลมีเดียสมัยใหม่
  • มีการแชร์ประสบการณ์จากคนวงในเมื่อไม่นานมานี้เกี่ยวกับการพัฒนาแอป Threads ของ Meta บนโครงสร้างพื้นฐานของ Instagram พร้อมเน้นถึงความสำเร็จของแอปและขนาดของทีมที่เกี่ยวข้อง