Tổng quan về YARP
Nguồn: Overview of YARP
Giới thiệu về YARP
YARP (Yet Another Reverse Proxy — Một Reverse Proxy Nữa) là một thư viện reverse proxy (proxy ngược) có khả năng tùy chỉnh cao dành cho .NET. Nó được thiết kế để cung cấp một khung proxy mạnh mẽ, linh hoạt, có thể mở rộng, bảo mật và dễ sử dụng. YARP giúp các nhà phát triển tạo ra các giải pháp reverse proxy mạnh mẽ và hiệu quả phù hợp với nhu cầu cụ thể của họ.
Reverse proxy làm gì
Một reverse proxy là một máy chủ nằm giữa các thiết bị client và các máy chủ backend. Nó chuyển tiếp các yêu cầu của client đến máy chủ backend thích hợp và sau đó trả phản hồi của máy chủ về cho client. Reverse proxy cung cấp một số lợi ích:
- Routing (Định tuyến): Hướng các yêu cầu đến các máy chủ backend khác nhau dựa trên các quy tắc được định nghĩa trước, chẳng hạn như các mẫu URL hoặc tiêu đề yêu cầu. Ví dụ: các yêu cầu
/images,/api, và/dbcó thể được định tuyến đến máy chủ hình ảnh, api, và cơ sở dữ liệu. - Load Balancing (Cân bằng tải): Phân phối lưu lượng đến trên nhiều máy chủ backend để tránh quá tải một máy chủ cụ thể. Việc phân phối tăng hiệu suất và độ tin cậy.
- Scalability (Khả năng mở rộng): Bằng cách phân phối lưu lượng trên nhiều máy chủ, reverse proxy giúp mở rộng ứng dụng để xử lý nhiều người dùng và tải cao hơn. Các máy chủ backend có thể được mở rộng (thêm hoặc bỏ) mà không ảnh hưởng đến client.
- SSL/TLS Termination (Kết thúc SSL/TLS): Tải trọng quá trình mã hóa và giải mã TLS từ các máy chủ backend, giảm khối lượng công việc của chúng.
- Connection abstraction, decoupling and control over URL-space (Trừu tượng hóa kết nối, tách biệt và kiểm soát không gian URL): Các yêu cầu đến từ client bên ngoài và phản hồi đi ra từ backend là độc lập. Sự độc lập này cho phép sự khác biệt về:
- Phiên bản HTTP, ví dụ: HTTP/1.1, HTTP/2, HTTP/3. Proxy có thể nâng cấp hoặc hạ cấp phiên bản HTTP.
- Thời gian tồn tại kết nối, cho phép có kết nối dài hạn ở backend trong khi duy trì kết nối client ngắn.
- Kiểm soát Không gian URL: Các URL đến có thể được biến đổi trước khi chuyển tiếp đến backend. Điều này trừu tượng hóa các URL bên ngoài khỏi cách chúng được ánh xạ tới các dịch vụ nội bộ. Các điểm cuối dịch vụ nội bộ có thể thay đổi mà không ảnh hưởng đến các URL bên ngoài.
- Security (Bảo mật): Các điểm cuối dịch vụ nội bộ có thể được ẩn khỏi sự tiếp xúc bên ngoài, bảo vệ chống lại một số loại tấn công mạng như tấn công DDoS.
- Caching (Bộ nhớ đệm): Các tài nguyên được yêu cầu thường xuyên có thể được lưu vào bộ nhớ đệm để giảm tải trên các máy chủ backend và cải thiện thời gian phản hồi.
- Versioning (Phân phiên): Các phiên bản khác nhau của API có thể được hỗ trợ bằng cách sử dụng các ánh xạ URL khác nhau.
- Simplified maintenance (Bảo trì đơn giản hóa): Reverse proxy có thể xử lý SSL/TLS Termination và các tác vụ khác, đơn giản hóa cấu hình và bảo trì các máy chủ backend. Ví dụ: chứng chỉ SSL và các chính sách bảo mật có thể được quản lý ở cấp độ reverse proxy thay vì trên từng máy chủ riêng lẻ.
Cách reverse proxy xử lý HTTP
Reverse proxy xử lý các yêu cầu và phản hồi HTTP theo cách sau:
- Nhận yêu cầu: Reverse proxy lắng nghe trên các cổng và điểm cuối được chỉ định cho các yêu cầu HTTP đến từ client.
- Kết thúc kết nối: Các kết nối HTTP đến được kết thúc tại proxy và các kết nối mới được sử dụng cho các yêu cầu đi đến các đích.
- Định tuyến yêu cầu: Dựa trên các quy tắc và cấu hình định tuyến được định nghĩa trước, reverse proxy xác định máy chủ backend nào, hoặc cụm máy chủ nào, sẽ xử lý yêu cầu.
- Chuyển tiếp yêu cầu: Reverse proxy chuyển tiếp yêu cầu của client đến máy chủ backend thích hợp, biến đổi đường dẫn và tiêu đề khi cần thiết.
- Connection pooling (Nhóm kết nối): Các kết nối đi ra được nhóm lại để giảm chi phí kết nối và tận dụng tối đa việc tái sử dụng HTTP 1.1 và các yêu cầu song song với HTTP/2 và HTTP/3.
- Xử lý phản hồi: Máy chủ backend xử lý yêu cầu và gửi phản hồi trở lại reverse proxy.
- Trả về phản hồi: Reverse proxy nhận phản hồi từ máy chủ backend và chuyển tiếp nó trở lại cho client, thực hiện bất kỳ biến đổi phản hồi cần thiết nào.
Quá trình này đảm bảo rằng client tương tác với reverse proxy thay vì trực tiếp với các máy chủ backend, cung cấp các lợi ích về cân bằng tải, bảo mật, phân phiên và nhiều hơn nữa.
Tại sao chọn YARP thay vì các proxy khác
YARP cung cấp một số lợi ích độc đáo khiến nó trở thành lựa chọn hấp dẫn cho các nhà phát triển:
- Customization (Tùy chỉnh): YARP có khả năng tùy chỉnh cao, cho phép các nhà phát triển điều chỉnh proxy theo nhu cầu cụ thể của họ với nỗ lực tối thiểu.
- Integration with .NET (Tích hợp với .NET): Được xây dựng trên ASP.NET Core, YARP tích hợp liền mạch với hệ sinh thái .NET, khiến nó trở thành lựa chọn lý tưởng cho các nhà phát triển .NET.
- Extensibility (Khả năng mở rộng): YARP cung cấp một tập hợp phong phú các điểm mở rộng, cho phép các nhà phát triển thêm logic và tính năng tùy chỉnh khi cần, sử dụng code C# quen thuộc.
- Scalability (Khả năng mở rộng quy mô): Tùy chọn mở rộng direct forwarding (chuyển tiếp trực tiếp) cho phép YARP mở rộng để hỗ trợ tên miền và backend scaling không khả thi với hầu hết các reverse proxy.
- Active development (Phát triển tích cực): YARP được bảo trì tích cực và phát triển bởi Microsoft, đảm bảo nó luôn được cập nhật với các công nghệ và thực tiễn tốt nhất mới nhất.
- Comprehensive maintained documentation (Tài liệu toàn diện được bảo trì): YARP đi kèm với tài liệu và ví dụ phong phú, giúp dễ dàng bắt đầu và triển khai các tính năng nâng cao.
- Open source (Mã nguồn mở): YARP và tài liệu YARP là mã nguồn mở. Các đóng góp, đánh giá và phản hồi đều được chào đón.