- วัฒนธรรมวิศวกรรมของ Meta เน้นการลงมือทำอย่างรวดเร็ว การเปิดกว้างทางเทคโนโลยี การทำวิจัยในสภาพแวดล้อมโปรดักชัน และโครงสร้างพื้นฐานที่ใช้ร่วมกัน
- เพื่อนำไปสู่การเพิ่มผลิตภาพของนักพัฒนา บริษัทได้นำการปรับใช้แบบต่อเนื่องมาใช้ และเปิดทางให้นักพัฒนาจำนวนมากขึ้นเขียนฟังก์ชันเซิร์ฟเวอร์เลสแทนโค้ดบริการแบบดั้งเดิม
- เพื่อลดต้นทุนฮาร์ดแวร์ บริษัทใช้การออกแบบฮาร์ดแวร์-ซอฟต์แวร์ร่วมกันในระดับดาต้าเซ็นเตอร์ และปรับทรัพยากรให้เหมาะสมแบบอัตโนมัติข้ามดาต้าเซ็นเตอร์ทั่วโลก แทนการจำกัดไว้ที่แต่ละคลัสเตอร์
- กลยุทธ์ AI ของ Meta คือการออกแบบร่วมกันทั้งสแตก ตั้งแต่ PyTorch ไปจนถึง AI accelerator เครือข่าย และโมเดล ML อย่าง Llama
# [วัฒนธรรมวิศวกรรม]
ลงมือทำอย่างรวดเร็ว (Move Fast)
- Meta ยังคงรักษาวัฒนธรรม "ลงมือทำอย่างรวดเร็ว" ที่เน้น ความคล่องตัวและการทำซ้ำอย่างรวดเร็ว
- สนับสนุนอย่างมากต่อ การปรับใช้แบบต่อเนื่อง (Continuous Deployment) เพื่อปล่อยโค้ดล่าสุดขึ้นโปรดักชันให้เร็วที่สุดเท่าที่ทำได้
- วิศวกรผลิตภัณฑ์เขียน ฟังก์ชันเซิร์ฟเวอร์เลสแบบ stateless โดยใช้ภาษาอย่าง PHP, Python, Erlang
- สามารถเปลี่ยนลำดับความสำคัญได้โดยไม่ต้องผ่านกระบวนการวางแผนที่ยาวนาน และแก้ปัญหาที่ไม่แน่นอนได้ผ่านการลงมือทำแบบวนซ้ำ
- แนวทางนี้ทำให้ ตอบสนองต่อตลาดได้รวดเร็ว และเปิดตัวผลิตภัณฑ์ได้อย่างฉับไว
การเปิดกว้างทางเทคโนโลยี (Technology Openness)
- ความเปิดกว้างภายใน: ใช้แนวทาง Monorepo โดยเก็บโค้ดของทุกโปรเจกต์ไว้ในรีโพซิทอรีเดียว
- ค้นหาโค้ด นำกลับมาใช้ซ้ำ และทำงานร่วมกันระหว่างทีมได้ง่าย
- ในโปรเจกต์ส่วนใหญ่ ไม่มีข้อจำกัดด้านความเป็นเจ้าของโค้ดที่เข้มงวด ทำให้นักพัฒนาสามารถมีส่วนร่วมได้อย่างอิสระ
- ความเปิดกว้างภายนอก: แบ่งปันโปรเจกต์ ฮาร์ดแวร์และซอฟต์แวร์โอเพนซอร์ส อย่างแข็งขัน
- เปิดเผยดีไซน์ฮาร์ดแวร์ผ่าน Open Compute Project
- ดูแลโปรเจกต์ซอฟต์แวร์โอเพนซอร์สหลากหลาย เช่น PyTorch, Llama, Presto, RocksDB, Cassandra
- แบ่งปันเทคโนโลยีโครงสร้างพื้นฐานผ่าน งานวิจัยตีพิมพ์
การทำวิจัยในโปรดักชัน (Research in Production)
- Meta ทำวิจัยในสภาพแวดล้อมการปฏิบัติการจริง โดยไม่มีห้องปฏิบัติการวิจัยระบบเฉพาะทาง
- ทีมที่พัฒนาระบบโปรดักชันเป็นผู้เขียนงานวิจัยด้วยตนเอง เพื่อ แก้ปัญหาจริงและนำเสนอโซลูชันที่ผ่านการพิสูจน์ในสภาพแวดล้อมการปฏิบัติการขนาดใหญ่
- แนวทางนี้มี ความเป็นภาคปฏิบัติ และ ตอบโจทย์เกณฑ์สำคัญของงานวิจัยระบบที่ประสบความสำเร็จ
โครงสร้างพื้นฐานร่วม (Common Infrastructure)
- แทนที่จะให้แต่ละทีม เลือกเทคโนโลยีสแตกได้อย่างอิสระ Meta ให้ความสำคัญกับ มาตรฐานร่วมและการปรับให้เหมาะสมในระดับโลก
- ฮาร์ดแวร์:
- เซิร์ฟเวอร์ทั้งหมดถูกจัดสรรมาจาก พูลเซิร์ฟเวอร์ส่วนกลาง
- สำหรับ เวิร์กโหลดประมวลผลที่ไม่ใช่ AI บริษัทมีเซิร์ฟเวอร์เพียงประเภทเดียว (โดยพื้นฐานคือ 1 CPU, 256GB DRAM) เพื่อลดความซับซ้อนของประเภทเซิร์ฟเวอร์
- ซอฟต์แวร์:
- เดิมใช้คีย์-แวลูสโตร์หลายแบบ เช่น Cassandra, HBase, ZippyDB แต่ปัจจุบัน รวมศูนย์เป็น ZippyDB
- การปรับใช้ซอฟต์แวร์ การจัดการคอนฟิก service mesh การทดสอบประสิทธิภาพ ฯลฯ ถูก รวมเข้ากับเครื่องมือส่วนกลาง
- นิยมใช้คอมโพเนนต์ที่นำกลับมาใช้ซ้ำได้:
- สร้าง ห่วงโซ่การนำคอมโพเนนต์กลับมาใช้ซ้ำ ที่ประกอบด้วย Tectonic file system → ZippyDB (จัดเก็บเมทาดาทา) → Shard Manager (จัดการ data sharding) → ServiceRouter (ค้นหา shard และกำหนดเส้นทางคำขอ) → Delos (ระบบจัดเก็บข้อมูลความเชื่อถือสูง)
- ใช้ คอมโพเนนต์แบบโมดูลาร์ที่นำกลับมาใช้ซ้ำได้ แทน ระบบแบบ monolithic อย่าง HDFS เพื่อเพิ่มความสามารถในการขยายสูงสุด
กรณีศึกษาทางวัฒนธรรม: การพัฒนาแอป Threads (Culture Case Study: The Threads App)
- กรณีการพัฒนาแอป Threads แสดงให้เห็นวัฒนธรรมวิศวกรรมของ Meta ได้อย่างชัดเจน
- ทำงานด้านเทคนิคเสร็จภายในเวลาเพียง 5 เดือน และหลังจาก แจ้งล่วงหน้า 2 วัน ทีมโครงสร้างพื้นฐานก็เตรียมพร้อมสำหรับการปรับใช้ในโปรดักชันเสร็จสิ้น
- ในบริษัทขนาดใหญ่ส่วนมาก แค่เขียนเอกสารแผนโครงการภายในสองวันก็ยังยาก แต่ Meta สร้าง war room เพื่อแก้ปัญหาแบบเรียลไทม์และตอบสนองอย่างรวดเร็ว
- ผลลัพธ์คือ ทะลุผู้ใช้ 100 ล้านคนภายใน 5 วันหลังเปิดตัว กลายเป็นแอปที่เติบโตเร็วที่สุดในประวัติศาสตร์
- Threads สามารถขยายตัวได้อย่างรวดเร็วด้วยการนำโครงสร้างพื้นฐานเดิมมาใช้ซ้ำ:
- Python backend ของ Instagram
- โครงสร้างพื้นฐานร่วมของ Meta (ฐานข้อมูล social graph, คีย์-แวลูสโตร์, แพลตฟอร์มเซิร์ฟเวอร์เลส, แพลตฟอร์ม ML, การจัดการคอนฟิกแอปมือถือ ฯลฯ)
- ความเปิดกว้างภายใน: ใช้ monorepo เพื่อนำบางส่วนของโค้ด Instagram มาใช้ซ้ำและเร่งความเร็วการพัฒนา
- ความเปิดกว้างภายนอก: ตั้งเป้าความสามารถในการทำงานร่วมกับแอปอื่นผ่าน ActivityPub
- การแบ่งปันประสบการณ์การพัฒนา: เปิดเผยประสบการณ์การพัฒนาและการปรับใช้อย่างรวดเร็วต่อสาธารณะ
# [โฟลว์คำขอของผู้ใช้แบบ end-to-end (End-to-End User Request Flow)]
- เพื่อดูเทคโนโลยีโครงสร้างพื้นฐานของ Meta ในเชิงลึก จึงอธิบาย กระบวนการทั้งหมดที่คำขอของผู้ใช้ถูกประมวลผล
- ผลิตภัณฑ์ของ Meta ได้รับการรองรับโดย โครงสร้างพื้นฐานบริการที่ใช้ร่วมกัน ซึ่งรวมถึงคอมโพเนนต์หลักหลากหลายส่วน
การกำหนดเส้นทางคำขอ (Request Routing)
- การแมป DNS แบบไดนามิก (Dynamic DNS Mapping)
- เมื่อผู้ใช้เข้าถึง
facebook.comเซิร์ฟเวอร์ DNS ของ Meta จะส่งคืนที่อยู่ IP ของ PoP (Point of Presence) ที่ใกล้ที่สุด แบบไดนามิก - PoP คือเอดจ์ดาต้าเซ็นเตอร์ขนาดเล็ก ที่ช่วยกระจายโหลดเครือข่ายจากตำแหน่งที่ใกล้ผู้ใช้
- PoP รักษา การเชื่อมต่อ TCP ระยะยาวกับดาต้าเซ็นเตอร์ของ Meta เพื่อลดเวลาในการตั้งค่าการเชื่อมต่อ TCP และเพิ่มประสิทธิภาพเครือข่าย
- มี PoP หลายร้อยแห่งกระจายอยู่ทั่วโลก จึงมอบ เวลาแฝงเครือข่ายที่สั้น ให้กับผู้ใช้ส่วนใหญ่ได้
- เมื่อผู้ใช้เข้าถึง
- การแคชคอนเทนต์แบบสแตติก (Static-Content Caching)
- คอนเทนต์แบบสแตติก เช่น รูปภาพและวิดีโอ สามารถแคชไว้ที่ PoP และให้บริการได้โดยตรง
- นอกจากนี้ Meta ยังดำเนินการ CDN (Content Delivery Network) และร่วมมือกับ ISP (ผู้ให้บริการอินเทอร์เน็ต) เพื่อสร้างไซต์ CDN
- หากคำขอของผู้ใช้คือ
facebook.com/image.jpgMeta จะเขียนใหม่เป็นCDN109.meta.com/image.jpgเพื่อให้คอนเทนต์จากไซต์ CDN ที่อยู่ใกล้ - หาก CDN ไม่มีคอนเทนต์ดังกล่าว คำขอจะถูกส่งต่อไปยัง PoP → load balancer ของดาต้าเซ็นเตอร์ → ระบบจัดเก็บข้อมูล
- การกำหนดเส้นทางคำขอคอนเทนต์แบบไดนามิก (Dynamic-Content Request Routing)
- คำขอคอนเทนต์แบบไดนามิก เช่น News Feed จะถูก ส่งต่อจาก PoP ไปยังดาต้าเซ็นเตอร์
- เครื่องมือวิศวกรรมทราฟฟิก จะเลือกดาต้าเซ็นเตอร์ที่เหมาะสมที่สุดโดยพิจารณาจากความจุของดาต้าเซ็นเตอร์และเวลาแฝงของเครือข่าย
- ทราฟฟิกจาก PoP ไปยังดาต้าเซ็นเตอร์จะถูกส่งผ่าน WAN ส่วนตัว (private WAN) ของ Meta
- ทราฟฟิกระหว่างดาต้าเซ็นเตอร์ มีมากกว่าทราฟฟิกระหว่างผู้ใช้กับ PoP อย่างมาก เนื่องจากการทำสำเนาข้อมูลและการโต้ตอบระหว่างไมโครเซอร์วิส
โทโพโลยีของโครงสร้างพื้นฐาน (Infrastructure Topology)
- โครงสร้างพื้นฐานระดับโลกของ Meta ประกอบด้วย องค์ประกอบโครงสร้างพื้นฐานหลายชั้น
- องค์ประกอบแต่ละส่วนทำหน้าที่เฉพาะ และดำเนินงานในขนาดดังนี้:
- ภูมิภาคดาต้าเซ็นเตอร์ (Region): มีภูมิภาคดาต้าเซ็นเตอร์ทั่วโลก ราว 10 แห่ง และแต่ละภูมิภาคสามารถรองรับเซิร์ฟเวอร์ได้สูงสุด 1 ล้านเครื่อง
- PoP (Point of Presence, ดาต้าเซ็นเตอร์ฝั่งเอดจ์): มี PoP มากกว่า 100 แห่ง โดยแต่ละ PoP โดยทั่วไปมี เซิร์ฟเวอร์ 100~1,000 เครื่อง ทำหน้าที่ประมวลผลทราฟฟิกใกล้กับผู้ใช้เพื่อลดเวลาแฝง
- ไซต์ CDN: มี ไซต์ CDN มากกว่า 1,000 แห่ง โดยทั่วไปมี เซิร์ฟเวอร์มากกว่า 10 เครื่อง และบางไซต์ขนาดใหญ่มี เซิร์ฟเวอร์มากกว่า 100 เครื่อง ทำหน้าที่แคชคอนเทนต์แบบคงที่ (เช่น รูปภาพ วิดีโอ ฯลฯ) เพื่อให้ส่งมอบได้รวดเร็ว
- ดาต้าเซ็นเตอร์ (Datacenter): ในแต่ละภูมิภาคดาต้าเซ็นเตอร์มี ดาต้าเซ็นเตอร์หลายแห่ง และ แต่ละดาต้าเซ็นเตอร์สามารถรองรับเซิร์ฟเวอร์ได้มากกว่า 100,000 เครื่อง
- MSB (เมนสวิตช์บอร์ด, Main Switchboard): ภายในดาต้าเซ็นเตอร์มี MSB ได้สูงสุด 12 ชุด และ แต่ละ MSB รับผิดชอบเซิร์ฟเวอร์ 10,000~20,000 เครื่อง ทำหน้าที่กระจายพลังงานไฟฟ้า และเป็นโดเมนความขัดข้องหลักภายในดาต้าเซ็นเตอร์ หาก MSB ขัดข้อง เซิร์ฟเวอร์ได้สูงสุด 20,000 เครื่องอาจดับลง
- เครือข่ายเอดจ์:
- PoP เชื่อมต่อกับระบบอัตโนมัติบนอินเทอร์เน็ต (AS) หลายแห่ง และใช้ BGP (Border Gateway Protocol) เพื่อเลือกเส้นทางที่เหมาะสมที่สุด
- เครือข่ายดาต้าเซ็นเตอร์:
- เซิร์ฟเวอร์เชื่อมต่อกันด้วย โทโพโลยี Clos แบบ 3 ชั้น
- ออกแบบมาเพื่อป้องกันความแออัดของเครือข่าย และมอบ แบนด์วิดท์สูงสุดระหว่างเซิร์ฟเวอร์
- เครือข่ายระดับภูมิภาค:
- ดาต้าเซ็นเตอร์เชื่อมต่อกันผ่าน fabric aggregator เพื่อให้สื่อสารกับ WAN ได้
- ใช้ โทโพโลยี Fat-Tree เพื่อให้ขยายระบบได้แบบค่อยเป็นค่อยไป
การประมวลผลคำขอ (Request Processing)
- การประมวลผลออนไลน์ (Online Processing)
- คำขอของผู้ใช้จะถูกกระจายผ่าน load balancer ไปยัง ฟังก์ชันฟรอนต์เอนด์แบบ serverless (FrontFaaS) หลายหมื่นตัว
- ฟังก์ชันฟรอนต์เอนด์สามารถเรียกใช้ บริการแบ็กเอนด์ หลายตัว และอาจเรียกใช้ บริการ ML inference (เช่น การแนะนำโฆษณา การแนะนำคอนเทนต์ในนิวส์ฟีด) ได้ด้วย
- ระหว่างการทำงาน ฟังก์ชันฟรอนต์เอนด์จะเพิ่มอีเวนต์ลงใน event queue เพื่อให้ ฟังก์ชัน serverless แบบอิงเหตุการณ์ (XFaaS) ทำงานแบบอะซิงโครนัส
- อัตราส่วนเซิร์ฟเวอร์ของฟังก์ชันฟรอนต์เอนด์ต่อฟังก์ชันแบบอิงเหตุการณ์อยู่ที่ประมาณ 5:1
- การประมวลผลออฟไลน์ (Offline Processing)
- ระบบประมวลผลออฟไลน์ทำหน้าที่ สนับสนุนระบบออนไลน์ และดำเนินการวิเคราะห์ข้อมูลกับการฝึกแมชชีนเลิร์นนิง
- ฟังก์ชันฟรอนต์เอนด์และบริการแบ็กเอนด์จะจัดเก็บข้อมูลล็อกหลากหลายประเภทไว้ใน data warehouse
- การฝึก ML: ใช้ข้อมูลล็อกเพื่ออัปเดตโมเดลแมชชีนเลิร์นนิง
- stream processing: อัปเดตหัวข้อที่ถูกพูดถึงมากที่สุดในเว็บไซต์แล้วบันทึกลงฐานข้อมูลและแคช
- batch analytics: ใช้ Spark และ Presto เพื่ออัปเดตระบบแนะนำเพื่อน
- การรันฟังก์ชัน serverless แบบอิงเหตุการณ์: การอัปเดตข้อมูลทำหน้าที่เป็น event trigger เพื่อรันฟังก์ชัน serverless โดยอัตโนมัติ
# [การเพิ่มประสิทธิภาพการทำงานของนักพัฒนา (Boosting Developer Productivity)]
- โครงสร้างพื้นฐานแบบใช้ร่วมกันของ Meta มีเป้าหมายเพื่อ เพิ่มประสิทธิภาพการทำงานของนักพัฒนาให้สูงสุด
- เพื่อการนี้ Meta จึง ใช้การปรับใช้อย่างต่อเนื่อง (Continuous Deployment) และฟังก์ชัน serverless อย่างเต็มขีดสุด
การปรับใช้อย่างต่อเนื่อง (Continuous Deployment)
- Meta ได้รับการปรับให้เหมาะสมเพื่อให้ สามารถ deploy การเปลี่ยนแปลงของโค้ดและคอนฟิกูเรชัน (Configuration) ได้อย่างรวดเร็ว
- สามารถ deploy ฟีเจอร์ใหม่และการแก้บั๊กได้ทันที ทำให้รับฟีดแบ็กได้รวดเร็วและปรับปรุงซ้ำได้อย่างต่อเนื่อง
- การเปลี่ยนแปลงคอนฟิกูเรชัน (Configuration Changes)
- เครื่องมือจัดการคอนฟิกูเรชัน ของ Meta ทำการ deploy การเปลี่ยนแปลงแบบเรียลไทม์มากกว่า 100,000 รายการเข้าสู่ production ทุกวัน
- มีการอัปเดตคอนฟิกโดยอัตโนมัติใน บริการมากกว่า 10,000 รายการและเซิร์ฟเวอร์หลายล้านเครื่อง
- งานหลากหลาย เช่น load balancing, การ rollout ฟีเจอร์, A/B testing และการป้องกันโอเวอร์โหลด ถูกดำเนินการโดยอัตโนมัติ
- การเปลี่ยนแปลงคอนฟิกจะ ผ่านการรีวิวและ commit ลง code repository เช่นเดียวกับการเปลี่ยนแปลงโค้ด และการเปลี่ยนแปลงจะ กระจายไปทั่วทั้งระบบภายในไม่กี่วินาที
- การเปลี่ยนแปลงโค้ด (Code Changes)
- เครื่องมือ deploy ของ Meta ดูแล deployment pipeline มากกว่า 30,000 รายการ เพื่อ จัดการการอัปเดตซอฟต์แวร์
- 97% ของบริการใช้การ deploy แบบอัตโนมัติเต็มรูปแบบ ทำให้อัปเดตได้โดยไม่ต้องมีการแทรกแซงด้วยมือ:
- 55% ใช้ การปรับใช้อย่างต่อเนื่องเต็มรูปแบบ (CD) ทำให้การเปลี่ยนแปลงโค้ดถูกนำขึ้น production โดยอัตโนมัติ
- 42% ถูก deploy อัตโนมัติตามตารางเวลาคงที่ (รายวันหรือรายสัปดาห์)
- ฟังก์ชัน serverless ฝั่งฟรอนต์เอนด์ (FrontFaaS) ทำงานอยู่บนเซิร์ฟเวอร์มากกว่า 500,000 เครื่อง และนักพัฒนามากกว่า 10,000 คนทำ code commit หลายพันครั้งต่อวัน
- แม้อยู่ในสภาพแวดล้อมที่มีความเปลี่ยนแปลงสูงเช่นนี้ ฟังก์ชัน serverless ทั้งหมดก็ยังมีเวอร์ชันใหม่ถูก deploy ขึ้น production ทุก 3 ชั่วโมง
- การอัปเดตซอฟต์แวร์เครือข่ายและโครงสร้างพื้นฐาน
- Private WAN ของ Meta รักษา network plane แบบขนานหลายชุดไว้ ทำให้ สามารถทดสอบอัลกอริทึมเครือข่ายใหม่ได้อย่างอิสระ
- ซอฟต์แวร์ของ network switch ก็ได้รับการอัปเดตบ่อยครั้งเช่นกัน และใช้ฟีเจอร์ "Warm Boot" ของสวิตช์ เพื่อ อัปเดตซอฟต์แวร์ได้โดยไม่ต้องหยุดทราฟฟิกเครือข่าย
- เนื่องจาก โค้ดที่อัปเดตบ่อยและการเปลี่ยนแปลงคอนฟิกเพิ่มความเสี่ยงของการหยุดชะงักระดับไซต์ Meta จึงลงทุนอย่างมากในด้านการทดสอบ การ deploy แบบค่อยเป็นค่อยไป และ health check
- มีการรณรงค์ภายในองค์กรเพื่อเพิ่มระบบอัตโนมัติของการ deploy โค้ดจาก 12% เป็น 97%
- ทำ การทดสอบ Canary แบบอัตโนมัติ สำหรับการเปลี่ยนแปลงคอนฟิกทั้งหมดเพื่อรับประกันความเสถียร
ฟังก์ชัน Serverless (Serverless Functions)
- ฟังก์ชัน Serverless (หรือ FaaS, Function-as-a-Service) เป็นอีกหนึ่งองค์ประกอบสำคัญที่ช่วยเพิ่มผลิตภาพของนักพัฒนา
- ต่างจากบริการแบ็กเอนด์แบบดั้งเดิม ฟังก์ชัน Serverless จะไม่เก็บสถานะและใช้งานผ่านอินเทอร์เฟซของฟังก์ชันแบบเรียบง่าย
- การเรียกใช้ฟังก์ชันแต่ละครั้งจะทำงานอย่างอิสระ และจัดการสถานะผ่านฐานข้อมูลภายนอกหรือระบบแคช
- ข้อดีของฟังก์ชัน Serverless
- นักพัฒนาเพียงแค่ เขียนตรรกะของผลิตภัณฑ์โดยไม่ต้องจัดการโครงสร้างพื้นฐาน
- มีการ ดีพลอยโค้ดและปรับขยายอัตโนมัติตามการเปลี่ยนแปลงของโหลด (Auto-Scaling) โดยอัตโนมัติ
- ป้องกันการสิ้นเปลืองฮาร์ดแวร์ และไม่จำเป็นให้นักพัฒนาจัดสรรทรัพยากรเกินความจำเป็น
- แพลตฟอร์ม Serverless ของ Meta
- ในบรรดา นักพัฒนามากกว่า 10,000 คนของ Meta จำนวนนักพัฒนาที่เขียนฟังก์ชัน Serverless มีมากกว่านักพัฒนาที่เขียนโค้ดบริการแบบดั้งเดิมอยู่ 50%
- IDE สำหรับการพัฒนา Serverless ของ Meta รองรับการเข้าถึงฐานข้อมูลโซเชียลกราฟและระบบแบ็กเอนด์หลากหลายแบบได้อย่างง่ายดาย และ มีการทดสอบการรวมต่อเนื่อง (CI) เพื่อให้รับฟีดแบ็กได้อย่างรวดเร็ว
- แพลตฟอร์ม Serverless ของ Meta: FrontFaaS และ XFaaS
- FrontFaaS: ฟังก์ชัน Serverless ฝั่งฟรอนต์เอนด์ที่พัฒนาด้วย PHP ทำงานอยู่บนเซิร์ฟเวอร์มากกว่า 500,000 เครื่อง
- คงรันไทม์ PHP ไว้ตลอดเวลา จึง รองรับคำขอได้ทันทีโดยไม่มีปัญหา cold start
- เมื่อโหลดของเซิร์ฟเวอร์ตํ่า จะใช้ การปรับขยายอัตโนมัติ เพื่อปลดบางเซิร์ฟเวอร์ออกและนำไปใช้งานอื่น
- XFaaS: ฟังก์ชัน Serverless แบบ event-driven ที่ทำงานแบบอะซิงโครนัส
- ใช้สำหรับ จัดการงานเบื้องหลัง ที่ไม่จำเป็นต้องตอบสนองทันที
- เพื่อหลีกเลี่ยงงานที่มีโหลดสูง ระบบจะหน่วงเวลาการทำงาน ใช้ global load balancing และใช้ quota-based throttling
- FrontFaaS: ฟังก์ชัน Serverless ฝั่งฟรอนต์เอนด์ที่พัฒนาด้วย PHP ทำงานอยู่บนเซิร์ฟเวอร์มากกว่า 500,000 เครื่อง
- นวัตกรรม Serverless ของ Meta
- ใช้แนวทาง Serverless เป็นกระบวนทัศน์การพัฒนาหลักมาตั้งแต่ช่วงปลายทศวรรษ 2000
- ความแตกต่างจากแพลตฟอร์ม Serverless บน public cloud:
- public cloud ใช้ virtual machine หนึ่งเครื่องต่อหนึ่งฟังก์ชันเพื่อการแยกส่วนที่เข้มงวด
- ขณะที่ Meta ออกแบบให้หลายฟังก์ชันสามารถรันพร้อมกันได้ภายใน Linux process เดียว เพื่อเพิ่มประสิทธิภาพการใช้ฮาร์ดแวร์ให้สูงสุด
# [การลดต้นทุนฮาร์ดแวร์ (Reducing Hardware Costs)]
- โครงสร้างพื้นฐานแบบใช้ร่วมกันของ Meta ไม่ได้มีบทบาทสำคัญแค่ในการเพิ่มผลิตภาพของนักพัฒนาเท่านั้น แต่ยังช่วย ลดต้นทุนฮาร์ดแวร์ ด้วย
- เพื่อให้ทำเช่นนั้นได้ Meta ใช้ กลยุทธ์เพิ่มประสิทธิภาพการใช้ฮาร์ดแวร์ให้สูงสุดผ่านการปรับซอฟต์แวร์ให้เหมาะสม
การดำเนินงานดาต้าเซ็นเตอร์ทั่วโลกเสมือนเป็นคอมพิวเตอร์เครื่องเดียว (All Global Datacenters as a Computer)
- ในสภาพแวดล้อมคลาวด์แบบเดิม ผู้ใช้ต้องกำหนดจำนวน replica ของบริการ ภูมิภาคที่ดีพลอย และรายละเอียดอื่น ๆ ด้วยตนเอง
- วิธีการจัดการแบบแมนนวลเช่นนี้ก่อให้เกิดปัญหาอย่าง การสิ้นเปลืองทรัพยากร โหลดไม่สมดุล และการย้ายงานระหว่างดาต้าเซ็นเตอร์ที่ไม่เพียงพอ
- Meta พัฒนาจากแนวทางเดิมอย่าง "ดาต้าเซ็นเตอร์เป็นคอมพิวเตอร์เครื่องหนึ่ง" (DaaC, Datacenter as a Computer) ไปสู่การทำ Global-DaaC ที่ "ทำให้ดาต้าเซ็นเตอร์ทั่วโลกทำงานเสมือนเป็นคอมพิวเตอร์เครื่องเดียว"
- คุณลักษณะหลักของ Global-DaaC:
- ผู้ใช้เพียงแค่ส่งคำขอสำหรับการดีพลอยระดับโลก จากนั้นโครงสร้างพื้นฐานจะ ตัดสินใจจำนวน replica ที่เหมาะสม พื้นที่ดีพลอย ประเภทฮาร์ดแวร์ และการกำหนดเส้นทางทราฟฟิกโดยอัตโนมัติ
- สามารถเปลี่ยนตำแหน่งของบริการตามความจำเป็น และ ปรับตัวตามการเปลี่ยนแปลงของอุปทานและโหลดได้
- ต่างจาก public cloud ตรงที่ Meta รันแอปพลิเคชันทั้งหมดด้วยตนเอง จึง ย้ายเวิร์กโหลดได้ยืดหยุ่นกว่า
- วิธีการนำ Global-DaaC ไปใช้
- ทำให้การจัดสรรทรัพยากรเป็นอัตโนมัติในระดับโลก ระดับภูมิภาค และระดับเซิร์ฟเวอร์รายเครื่อง:
- เครื่องมือจัดการความจุระดับโลก: ใช้ RPC tracing วิเคราะห์การพึ่งพาระหว่างบริการ และกำหนดการจัดสรรความจุที่เหมาะสมที่สุดด้วย mixed-integer programming (MIP)
- เครื่องมือจัดการความจุระดับภูมิภาค: จัดสรรทรัพยากรเซิร์ฟเวอร์รายดาต้าเซ็นเตอร์เพื่อสร้าง virtual cluster
- เครื่องมือจัดการคอนเทนเนอร์: จัดวางคอนเทนเนอร์ภายใน virtual cluster และ กระจายการวางข้ามหลายดาต้าเซ็นเตอร์เพื่อให้ได้มาซึ่ง fault tolerance
- เทคนิคการจัดการเคอร์เนล: แชร์และแยกทรัพยากรหน่วยความจำและ I/O ระหว่างคอนเทนเนอร์อย่างเหมาะสม
- ทำให้การจัดสรรทรัพยากรเป็นอัตโนมัติในระดับโลก ระดับภูมิภาค และระดับเซิร์ฟเวอร์รายเครื่อง:
- กรณีการใช้งานของ Global-DaaC
- ฐานข้อมูลและบริการแบบมีสถานะ:
- แต่ละคอนเทนเนอร์โฮสต์ data shard หลายตัวเพื่อเพิ่มประสิทธิภาพให้สูงสุด
- Global Service Placer(GSP) จะกำหนดจำนวน replica ของ shard และภูมิภาคสำหรับการจัดวางที่เหมาะสมที่สุด
- จากนั้นเฟรมเวิร์กการทำ sharding จะ จัดสรร shard ให้กับคอนเทนเนอร์และย้ายแบบไดนามิก ตามข้อมูลดังกล่าว
- เวิร์กโหลดแมชชีนเลิร์นนิง (ML):
- งาน ML inference จัดการ model replica ในลักษณะเดียวกับ data shard
- การฝึก ML (training) จำเป็นต้องวางข้อมูลและ GPU ไว้ในดาต้าเซ็นเตอร์เดียวกัน
- ระบบจะรับการจัดสรรความจุ GPU ระดับโลก และ ตัวจัดตารางการฝึก ML จะทำการจำลองข้อมูลและการจัดวาง GPU ที่เหมาะสมที่สุด
- ฐานข้อมูลและบริการแบบมีสถานะ:
การออกแบบฮาร์ดแวร์-ซอฟต์แวร์ร่วมกัน (Hardware and Software Co-Design)
- การนำการออกแบบฮาร์ดแวร์-ซอฟต์แวร์ร่วมกัน (Co-Design) มาใช้ในระดับเซิร์ฟเวอร์เดี่ยวนั้นเป็นเรื่องปกติ แต่ Meta ได้ ขยายแนวทางนี้ไปสู่ระดับโลก และ เอาชนะข้อจำกัดของฮาร์ดแวร์ต้นทุนต่ำด้วยการปรับแต่งซอฟต์แวร์
- ความทนทานต่อความขัดข้องต้นทุนต่ำ (Low-Cost Fault Tolerance)
- Public cloud มอบฮาร์ดแวร์ที่มีความพร้อมใช้งานสูง แต่ Meta เลือกใช้ แนวทางแก้ไขความขัดข้องด้วยซอฟต์แวร์ เพื่อให้ สามารถใช้ฮาร์ดแวร์ที่มีต้นทุนต่ำกว่าได้
- ความแตกต่างหลัก:
- แร็กเซิร์ฟเวอร์ (Rack) ของ public cloud ใช้แหล่งจ่ายไฟคู่และสวิตช์ ToR (Top-of-Rack) แบบคู่ แต่ Meta ใช้ แหล่งจ่ายไฟเดี่ยวและสวิตช์ ToR เดี่ยว
- เครื่องเสมือน (VM) ของ public cloud ใช้ block storage ที่เชื่อมต่อผ่านเครือข่าย จึงทำ live migration ได้ ขณะที่ คอนเทนเนอร์ของ Meta ใช้ local SSD ต้นทุนต่ำ
- กลยุทธ์รับมือความขัดข้องด้วยซอฟต์แวร์:
- เครื่องมือจัดสรรทรัพยากร: กระจายคอนเทนเนอร์ของบริการและ data shard ไปยัง fault domain อื่นภายในดาต้าเซ็นเตอร์
- โปรโตคอลการทำงานร่วมกัน: เปิดให้แอปพลิเคชันเข้ามามีส่วนร่วมในการจัดการ lifecycle ของคอนเทนเนอร์ เพื่อ ป้องกันไม่ให้ replica ของ data shard หยุดพร้อมกัน
- การรับประกันความทนทานข้ามหลายดาต้าเซ็นเตอร์: ออกแบบให้บริการยังคงทำงานได้แม้ทั้งภูมิภาคจะหยุดทำงาน และมีการทดสอบใช้งานจริงเป็นประจำเพื่อตรวจสอบความน่าเชื่อถือ
- การลดต้นทุนของ routing proxy (Eliminating Routing Proxy Costs)
- Service mesh แบบเดิมใช้ sidecar proxy ในการกำหนดเส้นทางคำขอ RPC แต่ Meta จัดการคำขอ RPC 99% ด้วยการกำหนดเส้นทางแบบ client-server โดยตรง
- แนวทางนี้ช่วยประหยัด proxy server ได้ราว 100,000 เครื่อง
- อย่างไรก็ตาม มีความท้าทายที่ต้อง คอมไพล์และแจกจ่ายไลบรารี routing ไปยังบริการมากกว่า 10,000 รายการ แต่ Meta แก้ปัญหานี้ได้ด้วย เครื่องมือ deploy ซอฟต์แวร์และจัดการการตั้งค่า
- การใช้ tiered storage และ local SSD (Tiered Storage and Local SSDs)
- แยกประเภทสตอเรจตามความถี่ในการเข้าถึงข้อมูลและข้อกำหนดด้าน latency เพื่อเพิ่มประสิทธิภาพด้านต้นทุนสูงสุด:
- Hot Data: จัดเก็บในหน่วยความจำและ SSD (เช่น ฐานข้อมูล social graph)
- Warm Data: จัดเก็บใน distributed file system ที่ใช้ HDD เป็นฐาน (เช่น วิดีโอ รูปภาพ และข้อมูลล็อก)
- Cold Data: จัดเก็บในเซิร์ฟเวอร์ HDD ความจุสูง (เช่น วิดีโอความละเอียดสูงรุ่นเก่า)
- คงไว้ในโหมดพลังงานต่ำเพื่อ ลดต้นทุน
- การใช้ local SSD:
- เวิร์กโหลดบางประเภท ให้ประสิทธิภาพดีกว่า remote storage แบบใช้ร่วมกัน เมื่อใช้ local SSD
- แต่ก็มี ความเสี่ยงที่การใช้งาน SSD จะต่ำลงจากการกระจายโหลดที่ไม่สมดุล
- Meta ใช้ common sharding framework เพื่อ แก้ปัญหาความไม่สมดุลและเพิ่มประสิทธิภาพการใช้ SSD สูงสุด
- แยกประเภทสตอเรจตามความถี่ในการเข้าถึงข้อมูลและข้อกำหนดด้าน latency เพื่อเพิ่มประสิทธิภาพด้านต้นทุนสูงสุด:
การออกแบบฮาร์ดแวร์ภายในองค์กร (In-House Hardware Design)
- Meta ออกแบบดาต้าเซ็นเตอร์ เซิร์ฟเวอร์ สวิตช์เครือข่าย และชิป AI เอง เพื่อประสิทธิภาพด้านต้นทุนและพลังงาน
- เนื่องจาก พลังงานเป็นทรัพยากรที่จำกัดที่สุดในดาต้าเซ็นเตอร์ จึงมีการใช้เครื่องมืออัตโนมัติเพื่อปรับการใช้พลังงานให้เหมาะสม
- ลดต้นทุนและการใช้พลังงานผ่านการออกแบบฮาร์ดแวร์-ซอฟต์แวร์ร่วมกัน:
- ปรับการใช้ SRAM ของชิป AI ให้เหมาะสม
- ถอดอุปกรณ์ทำความเย็นแบบอัดอากาศออกจากดาต้าเซ็นเตอร์
- พัฒนาทั้งสวิตช์เครือข่ายและซอฟต์แวร์เอง ทำให้ อัปเดตได้อย่างสม่ำเสมอ และเผยแพร่ดีไซน์ฮาร์ดแวร์ส่วนใหญ่แบบโอเพนซอร์สผ่าน Open Compute Project
# [การออกแบบระบบที่ขยายได้ (Designing Scalable Systems)]
- ในโครงสร้างพื้นฐานแบบ hyperscale การออกแบบระบบที่ขยายได้ เป็นองค์ประกอบสำคัญ
- distributed system (BGP, BitTorrent, DHT เป็นต้น) ที่ออกแบบมาสำหรับสภาพแวดล้อมอินเทอร์เน็ตมีความสามารถในการขยายสูง แต่ ในสภาพแวดล้อมดาต้าเซ็นเตอร์ คอนโทรลเลอร์แบบรวมศูนย์อาจให้ทั้ง scalability และประสิทธิภาพที่สูงกว่า
การเลิกใช้คอนโทรลเลอร์แบบกระจายศูนย์ (Deprecating Decentralized Controllers)
- Meta เลือกเปลี่ยนจาก คอนโทรลเลอร์แบบกระจายศูนย์เดิมไปเป็นคอนโทรลเลอร์แบบรวมศูนย์
- ยกเว้น สวิตช์เครือข่ายที่ยังคงใช้ BGP แต่ถูกออกแบบให้ คอนโทรลเลอร์กลางสามารถรีเซ็ตเส้นทางได้เมื่อเกิดความแออัดของทราฟฟิกหรือ link failure
- คอนโทรลเลอร์แบบรวมศูนย์ ให้การกระจายโหลดที่ดีกว่าและตอบสนองต่อความขัดข้องได้เร็วกว่า จึงเหมาะกับสภาพแวดล้อมดาต้าเซ็นเตอร์มากกว่า
ตัวอย่างการเปลี่ยนระบบกระจายศูนย์เดิมให้เป็นแบบรวมศูนย์
- Private WAN
- เดิมใช้ RSVP-TE (การตั้งค่าเส้นทางแบบกระจายศูนย์) แต่เปลี่ยนเป็นระบบที่อิงคอนโทรลเลอร์กลาง
- คำนวณเส้นทางทราฟฟิกที่เหมาะสมที่สุดโดยอัตโนมัติ และ กำหนดเส้นทางสำรองล่วงหน้าเมื่อเกิดความขัดข้อง เพื่อให้กู้คืนได้รวดเร็ว
- Key-Value Store
- เปลี่ยนจากแนวทางเดิมที่ใช้ multihop routing บน DHT (distributed hash table) ไปเป็น sharding framework ที่ใช้คอนโทรลเลอร์กลาง
- คอนโทรลเลอร์กลาง ปรับการย้าย shard แบบไดนามิกเพื่อเพิ่มสมดุลโหลดให้เหมาะสมที่สุด
- การกระจายข้อมูลขนาดใหญ่
- เดิมใช้ BitTorrent (การดาวน์โหลด P2P แบบกระจายศูนย์) แต่เปลี่ยนเป็นระบบกระจายแบบรวมศูนย์ของ Meta ที่ชื่อ Owl
- กำหนดเส้นทางดาวน์โหลดข้อมูลจากศูนย์กลาง จึงให้ความเร็วดาวน์โหลดสูงกว่ามาก
- การกระจายเมทาดาทาขนาดเล็ก
- ในช่วงแรกใช้ โครงสร้างต้นไม้แบบกระจาย 3 ชั้น (พัฒนาด้วย Java) แต่เพราะปัญหาด้าน scalability จึงเปลี่ยนเป็นโครงสร้างต้นไม้แบบ P2P
- อย่างไรก็ตาม ประสิทธิภาพที่ไม่เสถียรของบางโหนดกลับลดประสิทธิภาพโดยรวมลง สุดท้ายจึง ย้อนกลับไปใช้สถาปัตยกรรม proxy server แบบรวมศูนย์ประสิทธิภาพสูงที่พัฒนาด้วย C++
กรณีศึกษา: service mesh ที่ขยายได้ (Scalable Service Mesh)
Meta ดำเนินการ service mesh ภายในของตนเองชื่อ ServiceRouter และ
ผ่านระบบนี้จึง พิสูจน์ให้เห็นถึงประสิทธิผลของสถาปัตยกรรมแบบรวมศูนย์ที่ขยายได้
- ปัญหาของสถาปัตยกรรม service mesh แบบเดิม
- service mesh ทั่วไปใช้ sidecar proxy L7 ให้แต่ละ service process กำหนดเส้นทางคำขอ RPC
- แต่ ในสภาพแวดล้อม hyperscale การให้คอนโทรลเลอร์กลางจัดการ sidecar proxy หลายล้านตัวโดยตรงนั้นไม่มีประสิทธิภาพ
- Meta จึงเปลี่ยนจากแนวทาง sidecar proxy ไปเป็นโครงสร้างที่ตัวบริการจัดการ routing เอง
- สถาปัตยกรรม ServiceRouter ของ Meta
- เมทาดาทา routing ถูกสร้างจากคอนโทรลเลอร์กลาง แต่ L7 router แต่ละตัวจะประกอบตาราง routing ขึ้นเอง
- ใช้ฐานข้อมูลที่อิง Paxos (RIB, Routing Information Base) เพื่อรองรับ scalability
- ทำ sharding ให้คอนโทรลเลอร์เพื่อกระจายโหลด และเปิดให้หลายคอนโทรลเลอร์คำนวณตาราง routing สำหรับบริการเฉพาะแบบขนานได้
- ชั้น distribution ใช้ RIB replica หลายพันชุด เพื่อรองรับคำขออ่านจาก L7 router หลายล้านตัว
- สุดท้าย L7 router แต่ละตัวสามารถกำหนดค่าได้อย่างอิสระโดยไม่ต้องให้คอนโทรลเลอร์กลางเข้ามาแทรกแซงโดยตรง
- วิธีที่ ServiceRouter ทำให้รองรับการขยายตัวได้
- ใช้คอนโทรลเลอร์แบบ stateless: คอนโทรลเลอร์ไม่จัดการ router ใดโดยตรง แต่เพียงเก็บรักษาข้อมูล routing ระดับ global
- ทำ sharding ให้คอนโทรลเลอร์: คอนโทรลเลอร์หลายตัวทำงานแยกจากกันและประมวลผลข้อมูล routing ของบริการต่างกันแบบขนานได้
- ตัดฟีเจอร์ที่ไม่จำเป็นออก: ตัดความสามารถในการจัดการ L7 router รายตัวออกจากคอนโทรลเลอร์ และออกแบบให้ router แต่ละตัวดูแลตัวเอง
- ผลลัพธ์และบทเรียน
- สถาปัตยกรรมที่ผสานคอนโทรลเลอร์แบบรวมศูนย์เข้ากับ data plane แบบกระจายศูนย์ ให้ scalability ที่ดีที่สุด
- เพิ่มประสิทธิภาพด้านต้นทุนการดำเนินงานและประสิทธิภาพระบบ ด้วยการตัด sidecar proxy ที่ไม่จำเป็นออก
- ด้วยการทำ sharding อย่างมีกลยุทธ์และการออกแบบแบบ stateless ทำให้สามารถจัดการ service routing หลายล้านรายการได้อย่างมีประสิทธิภาพ
# [แนวโน้มในอนาคต (Future Directions)]
- โครงสร้างพื้นฐาน hyperscale ของ Meta มีความซับซ้อนมาก แต่เอกสารนี้ได้ สรุปอินไซต์ทางเทคนิคที่สำคัญ ไว้ให้
- สุดท้ายนี้ จะแชร์มุมมองเกี่ยวกับ เทรนด์ในอนาคตของโครงสร้างพื้นฐาน hyperscale
AI (ปัญญาประดิษฐ์)
- เวิร์กโหลด AI ได้กลายเป็น เวิร์กโหลดที่มีสัดส่วนมากที่สุดในดาต้าเซ็นเตอร์ ไปแล้วในปัจจุบัน
- คาดว่าก่อนปี 2030 มากกว่าครึ่งของการใช้พลังงานในดาต้าเซ็นเตอร์จะถูกใช้กับเวิร์กโหลด AI
- AI มีแนวโน้มสูงที่จะเปลี่ยนโครงสร้างพื้นฐานแบบเดิมอย่างรากฐาน เนื่องจาก ต้องการเครือข่ายประสิทธิภาพสูงและใช้ทรัพยากรสูง
- ในอดีต โครงสร้างพื้นฐาน hyperscale พัฒนามาด้วยแนวทาง scale-out (การติดตั้งเซิร์ฟเวอร์ต้นทุนต่ำจำนวนมาก) แต่
คลัสเตอร์ AI ในอนาคตมีแนวโน้มจะเปลี่ยนไปสู่แนวทาง scale-up (สถาปัตยกรรมแบบซูเปอร์คอมพิวเตอร์)- ตัวอย่าง: ใช้ เครือข่ายอีเธอร์เน็ตที่ใช้ RDMA (Remote Direct Memory Access) เพื่อเพิ่มประสิทธิภาพสำหรับ การฝึกแมชชีนเลิร์นนิง (ML) ขนาดใหญ่
- Meta กำลังดำเนินการ co-design แบบ full-stack ที่ครอบคลุมตั้งแต่ PyTorch → โมเดล ML → ชิป AI → เครือข่าย → ดาต้าเซ็นเตอร์ → เซิร์ฟเวอร์ → สตอเรจ → พลังงานและระบบระบายความร้อน
ฮาร์ดแวร์เฉพาะโดเมน (Domain-Specific Hardware)
- ในช่วงทศวรรษ 2000 ฮาร์ดแวร์มีความเป็นมาตรฐานมากขึ้นเรื่อย ๆ แต่
ต่อจากนี้คาดว่าจะมีฮาร์ดแวร์เฉพาะทางเพิ่มขึ้นหลากหลายประเภท เช่น AI training/inference, virtualization, video encoding, encryption, compression และ hierarchical memory - บริษัท hyperscale สามารถออกแบบและกระจายฮาร์ดแวร์แบบปรับแต่งเฉพาะได้อย่างคุ้มค่าทางเศรษฐกิจผ่านการผลิตในปริมาณมาก
- อย่างไรก็ตาม ความหลากหลายของฮาร์ดแวร์ที่เพิ่มขึ้นนี้จะทำให้ software stack ซับซ้อนมากขึ้น และก่อให้เกิดความท้าทายในการจัดการสภาพแวดล้อมที่แตกต่างกัน
เอดจ์ดาต้าเซ็นเตอร์ (Edge Datacenters)
- จากการเพิ่มขึ้นของแอปพลิเคชัน Metaverse และ IoT จึง คาดว่าจะมีการขยายตัวของเอดจ์ดาต้าเซ็นเตอร์
- Cloud Gaming ประมวลผลกราฟิกเรนเดอร์บน เซิร์ฟเวอร์ GPU ในเอดจ์ดาต้าเซ็นเตอร์ แทนอุปกรณ์ของผู้ใช้ และ
จำเป็นต้องมีความหน่วงเครือข่ายต่ำกว่า 25ms - จากการเพิ่มขึ้นของแอปพลิเคชันที่ต้องการการตอบสนองแบบเรียลไทม์ มีความเป็นไปได้สูงที่ทั้งจำนวนและขนาดของเอดจ์ดาต้าเซ็นเตอร์จะเพิ่มขึ้นอย่างมาก
- เพื่อให้ดำเนินงานได้อย่างมีประสิทธิภาพ จำเป็นต้องขยาย Global-DaaC (แนวคิดการดำเนินงานดาต้าเซ็นเตอร์ทั่วโลกเสมือนเป็นคอมพิวเตอร์เครื่องเดียว) และปรับให้เหมาะสมเพื่อให้นักพัฒนาไม่ต้องกังวลกับการจัดการโครงสร้างพื้นฐานที่ซับซ้อน
การเพิ่มผลิตภาพของนักพัฒนา (Developer Productivity)
- ตลอด 20 ปีที่ผ่านมา เครื่องมืออัตโนมัติได้เพิ่มผลิตภาพของผู้ดูแลระบบอย่างมาก จน อัตราส่วนจำนวนเซิร์ฟเวอร์ต่อผู้ดูแลเพิ่มขึ้นอย่างรวดเร็ว
- แต่ การพัฒนาซอฟต์แวร์ยังคงใช้แรงงานเข้มข้น และการเพิ่มผลิตภาพยังค่อนข้างช้า
- ต่อจากนี้ คาดว่าผลิตภาพของนักพัฒนาจะเพิ่มขึ้นอย่างรวดเร็วจาก 2 ปัจจัย:
- การพัฒนาของเครื่องมือ สร้างโค้ดและดีบักด้วย AI
- การเกิดขึ้นของ serverless programming paradigm แบบบูรณาการเต็มรูปแบบที่เฉพาะโดเมน
- FrontFaaS ของ Meta เป็นตัวอย่างของการเขียนโปรแกรมแบบ serverless ลักษณะนี้ และ
คาดว่าในอนาคตจะเกิด programming paradigm ใหม่ที่ปรับให้เหมาะกับอุตสาหกรรมเฉพาะ เช่น การเงิน การแพทย์ เป็นต้น
บทสรุป
- นวัตกรรมโครงสร้างพื้นฐานที่มี AI เป็นศูนย์กลางจะเดินหน้าอย่างรวดเร็วในอีก 10 ปีข้างหน้า
- บริษัท hyperscale ควร แบ่งปันอินไซต์ของตน เพื่อช่วยให้ทั้งชุมชนพัฒนาได้เร็วขึ้นร่วมกัน
3 ความคิดเห็น
PoP นั้นคือ BGP4 หรือไม่ก็ TCP anycast แล้วคงไม่มีทางที่คนทั่วไปจะใช้งานมันได้ใช่ไหมครับ..? T_T
ผม/ฉันไม่ค่อยเข้าใจว่าคำอธิบายที่ว่า PoP คือ BGP4 หรือ TCP anycast นั้นหมายถึงอะไรกันแน่ แต่ถ้าหมายถึงว่ามีการดำเนินการ AS ของตัวเองหรือไม่ ก็ใช่ครับ/ค่ะ
โดยปกติบริการแบบ multi-region ทั่วไปมักจะใช้ anycast DNS ร่วมกับ geolocation-based balancing มากกว่า
ใช่ครับ/ค่ะ ตอนนี้ยังไม่มี หากคุณต้องการ PoP แบบ multi-region ก็สามารถใช้ผู้ให้บริการรายอื่นได้
ความคิดเห็นใน Hacker News
หลังพัฒนา Threads เสร็จ ทีมโครงสร้างพื้นฐานได้รับแจ้งล่วงหน้าเพียงสองวันเพื่อเตรียมพร้อมสำหรับการเปิดตัว องค์กรขนาดใหญ่ส่วนใหญ่มักใช้เวลามากกว่าสองวันแค่ในการจัดทำแผนโครงการที่เกี่ยวข้องกับหลายสิบทีมที่พึ่งพากัน แต่ที่ Meta พวกเขาตั้ง war room ข้ามหลายไซต์ได้อย่างรวดเร็วเพื่อให้ทีมอินฟรากับทีมผลิตภัณฑ์ช่วยกันแก้ปัญหาแบบเรียลไทม์ แอปนี้มีผู้ใช้ถึง 100 ล้านคนภายใน 5 วันหลังเปิดตัว กลายเป็นแอปที่เติบโตเร็วที่สุดในประวัติศาสตร์
ความสามารถในการคงความเร็วในการปล่อยผลิตภัณฑ์ได้นั้นน่าประทับใจ ต้องใช้ความพยายามมากเพื่อไม่ให้ระบบราชการเพิ่มขึ้น และไม่ให้ฝ่ายกฎหมายหรือแผนกอื่น ๆ สร้างขั้นตอนอนุมัติที่เป็นคอขวด หรือไม่ก็ต้องมีความสามารถในการใช้ war room เพื่อเร่งงานให้เสร็จอย่างรวดเร็ว
ตอนอยู่ที่ FB ผมได้สัมผัสว่าอินฟรานั้นแข็งแกร่งแค่ไหน วิศวกรผลิตภัณฑ์สร้างโปรเจ็กต์ขนาดใหญ่ได้ภายในไม่กี่วัน ผมเคยเป็น tech lead ให้หลายทีม และบางทีมที่พูดถึงที่นี่คือทีม HBase และ ZippyDB
เจ๋งมากที่มีการพูดถึง ZippyDB ต่อสาธารณะเป็นครั้งแรก และก็ดีมากที่มีการพูดถึงการเพิ่มประสิทธิภาพของนักพัฒนา มีการ push บริการ 10,000 รายการหรือทำทุกคอมมิตกันทุกวัน
หลังออกจาก FB ผมหาอะไรที่คล้ายกันไม่ได้เลย เลยกำลังสร้างอินฟราที่ตัวเองต้องการขึ้นมาในรูปแบบสตาร์ตอัป Batteries Included
เสียดายที่คอมเมนต์เหล่านี้เต็มไปด้วยความประชดประชันและปฏิกิริยาเชิงลบ หลายคนเกลียด Meta แต่บทความจริงสำหรับผมนั้นชวนทึ่งมาก ผมไม่เคยรู้เลยว่าโครงสร้างพื้นฐานที่ค้ำจุนโลกดิจิทัลสมัยใหม่นั้นกว้างใหญ่และซับซ้อนเพียงใด การได้อ่านบทความนี้และเห็นสเกลของมันน่าทึ่งมาก
บริษัทอาจแย่ในหลายด้าน แต่ทุกอย่างที่อยู่ในบทความสำหรับผมนั้นน่าทึ่ง
ผมไม่ใช่วิศวกรแบบพวกคุณ ดังนั้นบทความนี้อาจเป็นข่าวเก่าสำหรับพวกคุณ แต่ผมอดไม่ได้ที่จะพูดว่า "ว้าว"
ถ้าเอาบทความนี้ไปให้คนเขียนนิยายวิทยาศาสตร์ในอดีตดู พวกเขาก็คงรู้สึกทึ่งเหมือนกัน
น่าทึ่งจริง ๆ เทคโนโลยีอันยอดเยี่ยมและน่าประทับใจทั้งหมดนี้ รวมถึงวิศวกรที่เก่งที่สุดในโลก ถูกใช้เพียงเพื่อยัดโฆษณาให้เข้าตาผู้คนมากขึ้นเท่านั้น เฮ้อ
น่าสนใจที่มีการอธิบาย PHP เว็บฟรอนต์เอนด์ว่าเป็นสถาปัตยกรรม "serverless" หรือ "function as a service" ดูเหมือนจะเป็นเรื่องของมุมมอง มันคือบริการที่มีโค้ดเบสเดียวซึ่งมีหลายเอนด์พอยต์ถูก deploy อยู่ จากมุมมองของผู้ดูแลเอนด์พอยต์มันอาจเป็น "serverless" แต่เหมือน abstraction ทั้งหลาย มันมีจุดที่รายละเอียดภายในรั่วออกมา
ในสภาพแวดล้อมของดาต้าเซ็นเตอร์ ผมชอบคอนโทรลเลอร์แบบรวมศูนย์เพราะความเรียบง่ายและความสามารถในการตัดสินใจคุณภาพสูง ในหลายกรณี แนวทางแบบไฮบริดที่รวม control plane แบบรวมศูนย์เข้ากับ data plane แบบกระจาย ดูจะเหมาะสมที่สุด
แนวทางนี้ดูเหมือนเป็นหนึ่งในดีไซน์ที่เหมาะสมที่สุดสำหรับ software networking (service mesh) และ storage (การดำเนินงานฐานข้อมูล) ขององค์กรที่มีจำนวนเซิร์ฟเวอร์มหาศาล สิ่งที่น่าทึ่งคือเครือข่าย IP ไม่ได้พึ่งพา BGP เป็นหลักแต่กลับใช้โมเดลเดียวกัน
คาดว่าจะใช้ local caching เพื่อลดภาระของ L7 router และปรับปรุง latency ของการ query ฐานข้อมูล ไคลเอนต์สามารถทำ cache invalidation และ query กลับไปที่ service mesh ได้อีกครั้งหลังหมดเวลา timeout ที่สมเหตุสมผล
ฟังก์ชัน serverless ที่พัฒนาอย่างรวดเร็วรวมกับ continuous deployment และการที่ใครก็ได้แก้ไขได้ทั้งโค้ดเบส ฟังดูเหมือนฝันร้ายแบบดิสโทเปีย ปริมาณ logging ที่ต้องใช้เพื่อดีบักและตามหาบั๊กคงมหาศาลสุด ๆ
การใช้ Erlang เพื่อเขียนฟังก์ชัน serverless ดูเหมือนจะหลีกเลี่ยงข้อดีสำคัญทั้งหมดที่ BEAM มอบให้ได้
วิศวกรผลิตภัณฑ์ส่วนใหญ่เขียนโค้ดเป็นฟังก์ชัน serverless แบบ stateless โดยใช้ PHP, Python และ Erlang ซึ่งมีข้อดีด้านความเรียบง่าย ประสิทธิภาพการทำงาน และความเร็วในการทำซ้ำ
เพื่อเพิ่มผลิตภาพของนักพัฒนา Meta นำ continuous deployment มาใช้แบบทั่วทั้งองค์กร และทำให้นักพัฒนาจำนวนมากขึ้นสามารถเขียนฟังก์ชัน serverless ได้ แทนที่จะเขียนโค้ดบริการแบบดั้งเดิม
สำหรับงานคอมพิวต์ที่ไม่ใช่ AI พวกเขามีเซิร์ฟเวอร์ให้เพียงชนิดเดียว ติดตั้ง CPU แบบเดียวและ DRAM ปริมาณเท่ากันเสมอ (เดิม 64GB ตอนนี้ 256GB) ผมสงสัยว่านี่เป็นเรื่องปกติทั้งอุตสาหกรรมหรือเป็นเรื่องปกติเฉพาะที่ Meta
เมื่อรูปภาพไม่ได้ถูกแคชไว้ที่ CDN109 หากผู้ใช้ร้องขอ CDN109 จะส่งคำขอไปยัง PoP ที่อยู่ใกล้เคียง จากนั้น PoP จะส่งคำขอไปยัง load balancer ในภูมิภาคดาต้าเซ็นเตอร์ และ load balancer จะไปดึงรูปจากระบบจัดเก็บข้อมูล
เวลาร้องขอรูปขนาด 1MB บนการเชื่อมต่อที่ช้า การส่งรูป 1MB ด้วย latency 100ms จะไม่เร็วกว่าการผ่านหลายรอบของการรับส่งข้อมูลและ latency ที่เพิ่มขึ้นเรื่อย ๆ หรือ?
ถ้าสมมติว่าคำขอวิ่งผ่านระบบของ Meta สุดท้ายมันก็จะไปถึงดาต้าเซ็นเตอร์เดียวกันอยู่ดี และสมมติว่าไม่มีเทคโนโลยี FTL
การเปรียบเทียบกับ hyperscaler แบบตรงไปตรงมานั้นน่าสนใจเป็นพิเศษ ผมสงสัยว่านี่คือการเตรียมพร้อมเพื่อเปิดตัว public cloud ของตัวเองหรือไม่ อยากให้ใครสักคนจาก Meta มาแสดงความเห็น