YARP Proxying gRPC (Proxy gRPC qua YARP)
Nguồn: YARP Proxying gRPC
Giới thiệu
gRPC là một framework Remote Procedure Call (RPC - Gọi thủ tục từ xa) hiệu suất cao, không phụ thuộc vào ngôn ngữ lập trình. Nó được xây dựng trên nền HTTP/2 và có thể được proxy thông qua YARP. Mặc dù YARP không cần biết về các gRPC message, bạn cần đảm bảo rằng giao thức HTTP phù hợp được bật. gRPC yêu cầu HTTP/2 và các gRPC call sẽ thất bại nếu YARP không được cấu hình đúng để gửi và nhận các HTTP/2 request.
Cấu hình giao thức đến của YARP
gRPC yêu cầu HTTP/2 cho hầu hết các kịch bản. HTTP/1.1 và HTTP/2 được bật theo mặc định trên các ASP.NET Core server (front end của YARP) nhưng chúng yêu cầu https (TLS) cho HTTP/2 nên YARP cần lắng nghe trên một URL https://.
HTTP/2 qua http (không có TLS) chỉ được hỗ trợ trên Kestrel và yêu cầu cài đặt cụ thể. Để biết thêm thông tin, xem gRPC services with ASP.NET Core.
Đây là cách cấu hình Kestrel để sử dụng HTTP/2 qua http (không có TLS):
{
"Kestrel": {
"Endpoints": {
"http": {
"Url": "http://localhost:5000",
"Protocols": "Http2"
}
}
}
}Cấu hình giao thức đi của YARP
YARP tự động thương lượng HTTP/1.1 hoặc HTTP/2 cho các proxy request đi, nhưng chỉ cho https (TLS). HTTP/2 qua http (không có TLS) yêu cầu cài đặt bổ sung. Lưu ý rằng các giao thức đi độc lập với các giao thức đến. Ví dụ: https có thể được sử dụng cho kết nối đến và http cho kết nối đi, điều này được gọi là TLS termination. Để biết chi tiết cấu hình, xem YARP HTTP Client Configuration.
Sau đây là cách cấu hình proxy request đi để sử dụng HTTP/2:
"cluster1": {
"HttpRequest": {
"Version": "2",
"VersionPolicy": "RequestVersionExact"
},
"Destinations": {
"cluster1/destination1": {
"Address": "http://localhost:6000/"
}
}
},gRPC-Web
gRPC-Web là một định dạng wire-format (định dạng truyền dữ liệu) thay thế cho gRPC tương thích với HTTP/1.1.
application/grpc- gRPC qua HTTP/2 là cách gRPC thường được sử dụng.application/grpc-web- gRPC-Web sửa đổi giao thức gRPC để tương thích với HTTP/1.1. gRPC-Web có thể được sử dụng ở nhiều nơi hơn. gRPC-Web có thể được sử dụng bởi các ứng dụng trình duyệt và trong các mạng không có hỗ trợ đầy đủ cho HTTP/2. Hai tính năng gRPC nâng cao không được hỗ trợ: client streaming và bidirectional streaming.
gRPC-Web có thể được proxy bởi cấu hình mặc định của YARP mà không cần bất kỳ cân nhắc đặc biệt nào.