CreateYourVPN Academy
คอร์ส: ทุกอย่างทำงานอย่างไร

เส้นทางและการกระจายโหลด

เส้นทางคืออะไรใน CreateYourVPN, วิธีสร้างมันภายในหนึ่งนาที, ทำไมเส้นทางว่างจึงมีประโยชน์ และระบบกระจายผู้ใช้ไปยังเซิร์ฟเวอร์ต่าง ๆ อย่างไร

เส้นทางคือสะพานเชื่อมระหว่างโครงสร้างพื้นฐานของคุณกับสิ่งที่ผู้ใช้เห็น คุณจัดการเซิร์ฟเวอร์และอินบาวด์ (inbound) ในขณะที่ผู้ใช้เห็นรายการ "เซิร์ฟเวอร์" สั้น ๆ ในแอปของตัวเอง — และแต่ละรายการในลิสต์นั้นแท้จริงแล้วคือเส้นทางหนึ่งเส้นทาง

เส้นทาง = หนึ่งบรรทัดในแอปของผู้ใช้

เส้นทาง (route) คือกลุ่มของอินบาวด์ (inbound) ที่รวมอยู่ภายใต้ชื่อเดียวในการสมัครสมาชิกของไคลเอนต์ กฎนั้นเรียบง่าย:

หนึ่งเส้นทางที่ไม่ว่าง = หนึ่งรายการในลิสต์เซิร์ฟเวอร์ของผู้ใช้

เส้นทางหนึ่งอาจมีอินบาวด์ (inbound) เดียว — หรือมากถึงสิบตัวบนเซิร์ฟเวอร์ต่างเครื่องกันก็ได้ ผู้ใช้จะไม่มีวันเห็นสิ่งนี้: พวกเขาเลือก "🇺🇸 USA" ส่วนจะไปลงเอยที่เซิร์ฟเวอร์ไหนกันแน่นั้น ตัวกระจายโหลด (load balancer) จะเป็นผู้ตัดสินใจ — รายละเอียดอยู่ด้านล่าง

ในขณะเดียวกัน ชื่อที่ผู้ใช้เห็นคือชื่อของ อินบาวด์ (inbound) ที่ถูกเลือก: ตั้งชื่ออินบาวด์ (inbound) ของคุณให้ชัดเจน ("🇺🇸 New York", "🇺🇸 Dallas") แล้วนั่นคือสิ่งที่ผู้ใช้จะเห็นเป๊ะ ๆ

เมื่อคุณเชื่อมต่อเซิร์ฟเวอร์แรก ระบบจะสร้างเส้นทางเริ่มต้นให้เองโดยอัตโนมัติ และใส่อินบาวด์ (inbound) ตัวแรกเข้าไปในนั้น — นี่คือเหตุผลที่ทุกอย่างทำงานได้ ทันทีโดยไม่ต้องตั้งค่าอะไรเลย เส้นทางจะมีประโยชน์เมื่อคุณต้องการมากกว่านั้น: หลายประเทศ เส้นทาง "สำหรับสตรีมมิง" โดยเฉพาะ และอื่น ๆ

สร้างเส้นทาง

บนหน้าคลัสเตอร์ ในส่วน "เส้นทาง" คลิก "เส้นทางใหม่" ตัวช่วยตั้งค่ามีสามส่วน:

  1. ไคลเอนต์เห็นเส้นทางนี้อย่างไร — ชื่อ (เช่น 🇺🇸 USA) และธง นี่คือ "ป้ายชื่อ" ของเส้นทาง
  2. อัลกอริทึมการกระจายโหลด — "โหลดน้อยที่สุดตามทราฟฟิก" (ค่าเริ่มต้น) หรือ "Round-robin" ความแตกต่างจะอธิบายด้านล่าง
  3. อินบาวด์ (inbound) ในพูล — อินบาวด์ (inbound) ตัวไหนที่อยู่ในเส้นทางนี้ ส่วนนี้ไม่บังคับ: คุณสามารถสร้างเส้นทางว่างแล้วเติมเข้าไปทีหลังด้วยการลาก

อินบาวด์ (inbound) หนึ่งตัวสามารถเป็นส่วนหนึ่งของเส้นทางเดียวเท่านั้น หากคุณเลือกอินบาวด์ (inbound) ที่ถูกใช้โดยเส้นทางอื่นอยู่แล้ว มันจะถูกย้ายไปยังเส้นทางใหม่ นี่คือวิธีที่ระบบรับประกันว่าทราฟฟิกของแต่ละจุดเข้า จะถูกควบคุมด้วยชุดกฎเพียงชุดเดียวเท่านั้น

แผนภาพโทโพโลยี: มองเห็นเส้นทางในภาพเดียว

บนหน้าคลัสเตอร์ เส้นทางจะแสดงอยู่บนแผนภาพแบบสด: เซิร์ฟเวอร์พร้อมอินบาวด์ (inbound) ของมันอยู่ทางซ้าย กล่องเส้นทางอยู่ทางขวา อินบาวด์ (inbound) สามารถ ลากด้วยเมาส์ ได้: จับอินบาวด์ (inbound) แล้วปล่อยลงในเส้นทางอื่น — เสร็จเรียบร้อย นอกจากนี้ยังมีโซน "ยังไม่ได้กำหนด" — ปล่อยอินบาวด์ (inbound) ลงตรงนั้นเพื่อถอดมันออกจากเส้นทางทั้งหมด

กล่องเส้นทางเองก็สามารถจัดเรียงใหม่ได้เช่นกัน (ด้วยที่จับสำหรับลาก หรือลูกศร) — นี่เป็นเพียงการจัดลำดับเชิงภาพเพื่อความสะดวกของคุณเท่านั้น

เส้นทางว่าง

เส้นทางที่ไม่มีอินบาวด์ (inbound) แม้แต่ตัวเดียวจะถูกวาดด้วยเส้นประ และไม่มี "ท่อ" เชื่อมไปยังโหนดกระจายข้อมูล — เป็นสัญญาณบอกว่า ผู้ใช้มองไม่เห็นมัน เส้นทางว่างเป็นตัวยึดตำแหน่งที่มีประโยชน์: สร้าง "🇯🇵 Japan" ไว้ล่วงหน้า แล้วเมื่อมีเซิร์ฟเวอร์ญี่ปุ่นปรากฏขึ้น ก็แค่ลากอินบาวด์ (inbound) เข้าไป — เส้นทางก็จะมีชีวิตขึ้นมาทันที

สถานการณ์ตรงกันข้ามก็ถูกไฮไลต์เช่นกัน: หากคุณมีอินบาวด์ (inbound) ที่อยู่นอกเส้นทางใด ๆ แผงควบคุมจะเตือนคุณ — "มีอินบาวด์ (inbound) ที่ยังไม่ได้อยู่ในเส้นทางใด — ไคลเอนต์ยังมองไม่เห็น"

การกระจายโหลด: ใครจะไปลงเอยที่เซิร์ฟเวอร์ไหน

เมื่อผู้ใช้ร้องขอการเชื่อมต่อ ระบบจะเลือกอินบาวด์ (inbound) หนึ่งตัว จากพูลสำหรับแต่ละเส้นทาง — แบบสด ๆ โดยอิงจากเมทริกล่าสุดของเซิร์ฟเวอร์ (ตัวเดียวกับในบทที่ 3) มีอัลกอริทึมสองแบบ:

"โหลดน้อยที่สุดตามทราฟฟิก" (ค่าเริ่มต้น)

ระบบจะดูว่าแต่ละเซิร์ฟเวอร์เหลือ แบนด์วิดท์ว่างต่อผู้ใช้หนึ่งคน เท่าไร: โดยนำความจุของช่องสัญญาณ ลบด้วยทราฟฟิกปัจจุบัน แล้วหารด้วยจำนวนผู้ใช้ที่เชื่อมต่ออยู่ เซิร์ฟเวอร์ที่มีพื้นที่ว่างมากที่สุดจะเป็นผู้ชนะ นี่คือการกระจายโหลดที่ยุติธรรม "ตามโหลดจริง": เซิร์ฟเวอร์ที่อ่อนแอและอิ่มตัวจะไม่ได้รับผู้ใช้ใหม่ แม้ว่าในทางทฤษฎีจะมีคนอยู่บนเซิร์ฟเวอร์นั้นน้อยกว่าก็ตาม

ระบบจะประเมินความจุของช่องสัญญาณด้วยตัวเอง — จากจุดพีคของทราฟฟิกจริงที่สังเกตได้ (จุดพีคจะค่อย ๆ "เย็นลง" หากเซิร์ฟเวอร์ไม่ได้ถูกโหลดมานานแล้ว)

"Round-robin"

กฎง่าย ๆ: ผู้ใช้ใหม่จะไปยังเซิร์ฟเวอร์ที่ตอนนี้มี คนน้อยที่สุด — โดยปรับตาม ค่าสัมประสิทธิ์ ของเซิร์ฟเวอร์ ค่าสัมประสิทธิ์คือน้ำหนัก: เซิร์ฟเวอร์ที่มีค่าสัมประสิทธิ์ 2.0 จะถูกมองว่า "จุคนได้มากกว่าเป็นสองเท่า" และจะได้รับผู้ใช้มากกว่าเซิร์ฟเวอร์ข้างเคียงที่มีค่า 1.0 ประมาณสองเท่า วิธีนี้ช่วยให้คุณโหลดเครื่องที่มีขนาดต่างกันได้อย่างยุติธรรม

หากเซิร์ฟเวอร์บางเครื่องในพูลยังไม่มีการประเมินความจุ (เช่น เซิร์ฟเวอร์ใหม่เอี่ยม ที่ยังไม่เคยเห็นจุดพีคของทราฟฟิกเลย) เส้นทางจะสลับกลับไปใช้ round-robin อย่างนุ่มนวล — เพื่อให้การตัดสินใจอิงจากข้อมูลที่มีอยู่จริงเสมอ

การกระจายโหลดใหม่เกิดขึ้นเมื่อไร

ตลอดเวลา — และเกิดขึ้นเอง การเลือกเซิร์ฟเวอร์จะถูกคำนวณใหม่ทุกครั้งที่มีการร้องขอ โดยใช้เมทริกล่าสุด: หากโหลดเปลี่ยนไป ผู้ใช้ใหม่จะเริ่มลงเอยบนเซิร์ฟเวอร์ที่ว่างกว่า ในขณะเดียวกัน ระบบจะพยายามคงตัวเลือกเดิมไว้สำหรับผู้ใช้คนหนึ่ง ๆ เมื่อสภาพการณ์เท่ากัน เพื่อไม่ให้ "เซิร์ฟเวอร์" ของพวกเขากระโดดไปมา

และยังมีมาตรการป้องกันอีกอย่างหนึ่ง: เซิร์ฟเวอร์ที่ระบบมอนิเตอร์เห็นว่าไม่พร้อมใช้งานจะถูกตัดออกจากการเลือก — อ่านรายละเอียดเพิ่มเติมได้ในบทที่ 7

สรุปสิ่งสำคัญ

  • เส้นทางคือ "ป้ายชื่อ" สำหรับกลุ่มของอินบาวด์ (inbound); เส้นทางที่ไม่ว่าง = หนึ่งบรรทัดในแอปของผู้ใช้
  • อินบาวด์ (inbound) หนึ่งตัวอยู่ในเส้นทางเดียวเท่านั้น อินบาวด์ (inbound) ที่อยู่นอกเส้นทางใด ๆ จะมองไม่เห็นสำหรับไคลเอนต์
  • เส้นทางว่างเป็นตัวยึดตำแหน่งที่ปกติดี: กล่องเส้นประ ซ่อนจากผู้ใช้
  • มีอัลกอริทึมสองแบบ: ตามแบนด์วิดท์ว่าง (แบบฉลาด เป็นค่าเริ่มต้น) และ round-robin พร้อมน้ำหนัก
  • การกระจายโหลดเป็นแบบสด: คำนวณใหม่ทุกครั้งที่มีการเชื่อมต่อโดยใช้เมทริกปัจจุบัน

บทถัดไป

On this page