CreateYourVPN Academy
Khóa học: Cách thức hoạt động

Tuyến và cân bằng tải

Tuyến trong CreateYourVPN là gì, cách tạo một tuyến trong một phút, tại sao tuyến trống lại hữu ích, và cách hệ thống phân bổ người dùng giữa các máy chủ.

Tuyến là cây cầu giữa hạ tầng của bạn và những gì người dùng nhìn thấy. Bạn quản lý máy chủ và inbound, trong khi người dùng chỉ thấy một danh sách ngắn gồm các "máy chủ" trong ứng dụng của họ — và mỗi mục trong danh sách đó thực ra là một tuyến.

Một tuyến = một dòng trong ứng dụng của người dùng

Tuyến là một nhóm các inbound được gộp dưới một tên chung trong đăng ký (subscription) của client. Quy tắc rất đơn giản:

Một tuyến không trống = một mục trong danh sách máy chủ của người dùng.

Một tuyến có thể chỉ chứa một inbound — hoặc tận mười inbound trên các máy chủ khác nhau. Người dùng không bao giờ thấy điều này: họ chọn "🇺🇸 USA", và họ vào chính xác máy chủ nào là do bộ cân bằng tải quyết định — sẽ nói kỹ hơn bên dưới.

Trong khi đó, cái tên mà người dùng nhìn thấy chính là tên của inbound được chọn: hãy đặt tên inbound của bạn thật rõ ràng ("🇺🇸 New York", "🇺🇸 Dallas") và đó chính xác là những gì người dùng sẽ thấy.

Khi bạn kết nối máy chủ đầu tiên, hệ thống sẽ tự tạo một tuyến mặc định và đặt inbound đầu tiên vào đó — đó là lý do mọi thứ hoạt động ngay lập tức mà không cần một cài đặt nào. Tuyến trở nên hữu ích khi bạn muốn nhiều hơn: nhiều quốc gia, một tuyến "streaming" riêng, v.v.

Tạo một tuyến

Trên trang cụm, trong phần "Tuyến", nhấp "Tuyến mới". Trình hướng dẫn có ba phần:

  1. Khách hàng thấy tuyến này như thế nào — tên (ví dụ 🇺🇸 USA) và một lá cờ. Đây là "biển hiệu" của tuyến.
  2. Thuật toán cân bằng tải — "Ít tải nhất theo lưu lượng" (mặc định) hoặc "Round-robin". Sự khác biệt được giải thích bên dưới.
  3. Inbound trong pool — những inbound nào thuộc về tuyến. Phần này là tùy chọn: bạn có thể tạo một tuyến trống và điền vào sau bằng cách kéo thả.

Một inbound chỉ có thể thuộc về một tuyến. Nếu bạn chọn một inbound đã được một tuyến khác lấy mất, nó sẽ chuyển sang tuyến mới. Đây là cách hệ thống đảm bảo rằng lưu lượng của mỗi điểm vào chỉ bị chi phối bởi đúng một bộ quy tắc.

Sơ đồ topology: nhìn thấy toàn bộ tuyến trong nháy mắt

Trên trang cụm, các tuyến được hiển thị trên một sơ đồ trực tiếp: máy chủ với inbound của chúng ở bên trái, các hộp tuyến ở bên phải. Inbound có thể được kéo bằng chuột: nắm lấy một inbound, thả nó vào một tuyến khác — xong. Còn có một khu vực "Chưa gán" — thả một inbound vào đó để tách nó khỏi tất cả các tuyến.

Bản thân các hộp tuyến cũng có thể được sắp xếp lại (dùng tay cầm kéo hoặc các mũi tên) — đó thuần túy là thứ tự trực quan cho tiện lợi của bạn.

Tuyến trống

Một tuyến không có bất kỳ inbound nào được vẽ với viền nét đứt và không có "đường ống" nối tới node phân phối — một gợi ý rằng người dùng không thể thấy nó. Tuyến trống là những chỗ trống tiện lợi: tạo trước "🇯🇵 Japan", và khi một máy chủ ở Nhật xuất hiện, kéo một inbound vào — tuyến sẽ hoạt động.

Tình huống ngược lại cũng được làm nổi bật: nếu bạn có inbound nằm ngoài mọi tuyến, bảng điều khiển sẽ cảnh báo bạn — "có (các) inbound không thuộc tuyến nào — client chưa thể thấy chúng".

Cân bằng tải: ai vào máy chủ nào

Khi một người dùng yêu cầu kết nối, với mỗi tuyến, hệ thống chọn một inbound từ pool — trực tiếp, dựa trên số liệu máy chủ mới nhất (chính là những số liệu từ bài 3). Có hai thuật toán:

"Ít tải nhất theo lưu lượng" (mặc định)

Hệ thống nhìn vào lượng băng thông dư mỗi người dùng mà mỗi máy chủ còn lại: nó lấy dung lượng kênh truyền, trừ đi lưu lượng hiện tại, rồi chia cho số người dùng đang kết nối. Máy chủ có khoảng trống lớn nhất sẽ thắng. Đây là cân bằng công bằng "theo tải thực tế": một máy chủ yếu, đã bão hòa sẽ không nhận thêm người dùng mới, ngay cả khi trên danh nghĩa nó có ít người hơn.

Hệ thống tự ước tính dung lượng kênh truyền — từ các đỉnh lưu lượng thực tế được quan sát (một đỉnh sẽ dần "nguội" nếu máy chủ không bị tải trong một thời gian).

"Round-robin"

Một quy tắc đơn giản: người dùng mới đi tới máy chủ hiện có ít người nhất — được điều chỉnh theo hệ số của máy chủ. Hệ số là một trọng số: một máy chủ với hệ số 2.0 được coi là "rộng gấp đôi" và sẽ nhận số người dùng gần gấp đôi so với máy hàng xóm có hệ số 1.0. Điều này cho phép bạn tải một cách công bằng các máy có kích thước khác nhau.

Nếu một máy chủ nào đó trong pool chưa có ước tính dung lượng (chẳng hạn, máy chủ vừa mới toanh và chưa từng thấy đỉnh lưu lượng nào), tuyến sẽ tự động chuyển sang round-robin một cách nhẹ nhàng — để các quyết định luôn được đưa ra dựa trên dữ liệu thực sự tồn tại.

Khi nào việc cân bằng lại diễn ra

Liên tục — và tự động. Việc chọn máy chủ được tính lại ở mỗi yêu cầu bằng số liệu mới nhất: nếu tải thay đổi, người dùng mới bắt đầu vào các máy chủ rảnh hơn. Đồng thời, hệ thống cố gắng giữ nguyên lựa chọn cho một người dùng nhất định khi các điều kiện là ngang nhau, để "máy chủ" của họ không bị nhảy qua nhảy lại.

Và còn một lớp an toàn nữa: các máy chủ mà hệ thống giám sát coi là không khả dụng sẽ bị loại khỏi việc lựa chọn — nói kỹ hơn ở bài 7.

Những điểm chính cần nhớ

  • Tuyến là "biển hiệu" cho một nhóm inbound; một tuyến không trống = một dòng trong ứng dụng của người dùng.
  • Một inbound chỉ thuộc về đúng một tuyến. Inbound nằm ngoài mọi tuyến là vô hình với client.
  • Tuyến trống hoàn toàn bình thường như một chỗ trống: một hộp nét đứt, ẩn với người dùng.
  • Hai thuật toán: theo băng thông dư (thông minh, mặc định) và round-robin có trọng số.
  • Cân bằng tải là trực tiếp: được tính lại ở mỗi kết nối dựa trên số liệu hiện tại.

Tiếp theo

On this page