Cloudflare แชร์การออกแบบ Load Balancer แบบใหม่เลิกใช้ NAT แต่หันไปทำ tunnel ยิงเข้าเซิร์ฟเวอร์แทน

by lew
13 June 2020 - 11:45

Cloudflare เขียนบล็อกเล่าถึงประสบการณ์อัพเกรด load balancer แบบใหม่ จากเดิมอาศัย TCP proxy และ NAT ซ้อนกันไปมาหลายชั้น โดยระบุว่าช่วงหลังสถาปัตยกรรมแบบนี้ไม่เหมาะกับบริการที่เปลี่ยนไป ทำให้ต้องออกแบบใหม่ แล้วหันไปทำ tunnel จาก load balancer ไปยังเซิร์ฟเวอร์แทน

เงื่อนไขการเปลี่ยนสถาปัตยกรรมของ Cloudflare ระบุว่า ต้องการให้เซิร์ฟเวอร์เห็นไอพีต้นทางที่ถูกต้อง โดยไม่ต้องใช้ท่าเฉพาะสำหรับโปรโตคอล เช่น X-Forwarded-For ใน HTTP หรือ PROXY TCP, ทราฟิกต้องวิ่งบนอุปกรณ์เน็ตเวิร์คเดิมที่ติดตั้งไปแล้วได้, เครื่องมือต้องพร้อมใช้งานมีการทดสอบมาเป็นอย่างดีแล้ว, ไม่เพิ่มการสื่อสารระหว่าง load balancer และเซิร์ฟเวอร์เพิ่มเติมซึ่งจะทำให้ระบบซับซ้อนเกินไป, และกระบวนการย้ายไปยังระบบใหม่ทำได้ง่าย

การออกแบบใหม่นี้อาศัย IP Virtual Server (IPVS) สร้าง tunnel จาก load balancer ไปยังเซิร์ฟเวอร์ โดยใช้โปรโตคอล Foo-Over-UDP (fou) หุ้มทราฟิกด้วย IP/UDP อีกชั้นทำให้ load balancer เลือกเซิร์ฟเวอร์ได้ตามที่ต้องการ ขณะที่กระบวนการเลือกเซิร์ฟเวอร์ใช้ Maglev ที่เสนอโดยกูเกิล (กูเกิลเองใช้เป็นการภายในมาตั้งแต่ปี 2008) และอยู่ในเคอร์เนลลินุกซ์ตั้งแต่เวอร์ชั่น 4.18 ขณะที่ต้องมีการปรับขนาด MTU เน็ตเวิร์คภายในเพื่อให้เติม header ของ IP/UDP ที่เพิ่มมาโดยไม่เกิด fragment

ทาง Cloudflare ระบุข้อจำกัดการทำงานทุกวันนี้ เช่น iptables ไม่มี API โดยตรงทำให้ agent ของเซิร์ฟเวอร์ยังต้องคอนฟิกเครื่องด้วยการรันคำสั่ง iptables อยู่ ทำให้อนาคตน่าจะย้ายไปใช้ nftables แทน และอาจจะเปลี่ยนไปใช้ Lightweight Tunnels แทน Foo-Over-UDP ในอนาคต

ที่มา - Cloudflare

Blognone Jobs Premium