ทุกครั้งที่ Facebook ออกมาเปิดตัวโครงการ Open Source เกี่ยวกับระบบ Network ทีไร ก็มักเป็นประเด็นที่น่าสนใจเสมอ โดยในครั้งนี้ทาง Facebook ได้ออกมาเปิด Open Source ให้กับโครงการ Open/R ซึ่งเป็นเทคโนโลยีเสริมสำหรับการทำ Network Routing Platform สำหรับระบบ Software-Defined Networking ที่ทาง Facebook เองก็ได้ใช้งานจริงอยู่ภายใน Backbone และ Data Center ของตนเองแล้ว
Open/R นี้เดิมทีถูกออกแบบมาสำหรับใช้งานในโครงการ Terragraph ซึ่งเป็นระบบเครือข่าย Wireless Backhaul Network แต่เมื่อพัฒนาไปได้ระยะหนึ่งทาง Facebook ก็เห็นว่าเทคโนโลยีสามารถนำมาปรับใช้ในระบบเครือข่ายส่วนอื่นๆ ได้ ทำให้สุดท้ายแล้ว Facebook ก็ตัดสินใจพัฒนา Open/R ต่อจนสามารถรองรับได้ทั้ง WAN, Data Center Fabric และ Wireless Mesh อีกทั้งยังรองรับการทำงานบน Software ที่หลากหลาย ไม่ว่าจะเป็น FBOSS, Arista EOS, Juniper JunOS, Linux Routing และอื่นๆ ด้วยเหตุนี้ Open/R จึงสามารถถูกนำไปใช้งานได้บน Switch Hardware ได้อย่างกว้างขวาง
แนวคิดหลักๆ ของ Open/R นั้นคือการทำหน้าที่เป็นระบบสำหรับการกระจายค่า State ทางด้านระบบเครือข่ายไปยังอุปกรณ์เครือข่ายทั้งหมดที่เกี่ยวข้อง เพื่อให้ Application ใหม่ๆ สามารถถูกเพิ่มเข้าไปในระบบเครือข่ายและทำการเชื่อมต่อกันได้โดยง่าย โดยมี Northbound Interface สำหรับเชื่อมต่อการทำงานเข้ากับ Network Controller ภายนอกได้ และมีความสามารถอย่างเช่นการทำ Automatic IP Prefix Allocation, RTT-based Cost Metrics, Graceful Restart, Fast Convergence และยังสามารถทำ Drain/Undrain Operation ได้ รวมถึงยังมีฟีเจอร์ที่คล้ายคลึงกับ IS-IS และ OSPF โดยมีฟีเจอร์ที่น่าสนใจดังนี้
- รองรับ IPv6 เป็น Default แต่สามารถปรับแต่งให้ทำงานด้วย IPv4 ได้
- ทำ Prefix Allocation และ IP Configuration ได้หลาย Node พร้อมๆ กันจากการเลือก Prefix
- ทำ Graceful Restart ได้ ทำให้สามารถอัปเดตระบบได้โดยไม่เกิด Downtime ในการส่งข้อมูลเครือข่ายเลย
- ทำ Drain/Undrain สำหรับ Node และ Link ได้
- ประเมินและควบคุมค่า Link RTT ได้แบบ Dynamic
- กำหนดค่า Metric Value ที่ต้องการได้เอง ทั้งแบบ Static และ Dynamic
- ตรวจสอบการทำงานของเครือข่ายได้
- มี API สำหรับเชื่อมต่อไปยัง Centralized Controller ได้
- มี Python Library สำหรับจัดการ Process สำคัญๆ ใน Open/R ได้
สำหรับสถาปัตยกรรมภายใน Open/R มีแบ่งส่วนย่อยต่างๆ ดังนี้

- KV-STORE เป็นระบบ Replicated Key-value Store เพื่อให้สามารถทำการสื่อสารได้แบบกระจายตัว และทำการสำเนาค่า State ของระบบเครือข่ายได้
- Spark ทำการค้นหาอุปกรณ์ที่เชื่อมต่อระหว่างกันภายในระบบเครือข่ายด้วยการใช้ Link-Local Multicast
- LinkMonitor ทำการตรวจสอบการทำงานของ System Interface ผ่านทาง Platform, ทำการบริหารจัดการ Spark Session และทำการกระจายข้อมูลของ Neighbor ที่ถูกค้นพบและถูกบันทึกอยู่ภายใน KV-STORE
- PrefixManager ทำ Automatic Prefix Suballocation เพื่อให้สามารถทำการกำหนดค่าต่างๆ ได้แบบ Ad Hoc
- Decision ประมวลผลข้อมูล Routing โดยอ้างอิงจากข้อมูล Topology ที่เรียนรู้มาจาก KV-STORE
- FIB ทำหน้าที่เป็น Proxy สำหรับ Programming Computed Routes ผ่านทาง Platform และจัดการดูแลเรื่อง Forwarding State
- Platform รองรับการทำ Route Programming และดูแล Interface Discovery Logic สำหรับ Hardware Platform เป้าหมาย
นอกจากนี้ Facebook ยังได้สร้าง Emulation Tool เอาไว้ที่ https://github.com/facebook/openr/tree/master/openr/docs/Emulator.md ซึ่งจะทำการสร้าง Linux Container จำนวนหลายพันชุดขึ้นมาจำลองระบบเครือข่ายเสมือนขนาดใหญ่ที่เชื่อมต่อกัน พร้อมให้ทดสอบการกำหนดค่าและใช้งานเครือข่ายขนาดใหญ่ได้ด้วยการใช้ Open/R ก่อนจะทำการ Deploy ลงระบบจริง
ผู้ที่สนใจสามารถศึกษารายละเอียดของโครงการ Open/R ได้ที่ https://github.com/facebook/openr ครับ
ที่มา: https://code.facebook.com/posts/291641674683314/open-r-open-routing-for-modern-networks/