Tại sao nên migrate (di chuyển) từ WCF sang ASP.NET Core gRPC
Bài viết này cung cấp tóm tắt về lý do tại sao ASP.NET Core gRPC là lựa chọn phù hợp cho các nhà phát triển Windows Communication Foundation (WCF) muốn di chuyển sang kiến trúc và nền tảng hiện đại.
So sánh với WCF
Mặc dù việc triển khai và cách tiếp cận khác nhau đối với gRPC, nhưng trải nghiệm phát triển và sử dụng dịch vụ với gRPC sẽ trực quan đối với các nhà phát triển WCF. WCF và gRPC đều là các framework (khung) RPC (remote procedure call - gọi thủ tục từ xa) với cùng mục tiêu:
- Cho phép viết code như thể client và server đang ở trên cùng một nền tảng.
- Cung cấp API mạng di động đơn giản.
Cả hai nền tảng đều chia sẻ yêu cầu khai báo và triển khai giao diện, mặc dù quy trình khai báo giao diện khác nhau. Nhiều loại lời gọi RPC mà gRPC hỗ trợ ánh xạ tốt sang các ràng buộc có sẵn cho dịch vụ WCF. Để biết thêm thông tin và ví dụ, xem Migrate a WCF solution to gRPC.
Lợi ích của gRPC
gRPC cung cấp framework tốt hơn so với các cách tiếp cận khác vì những lý do sau.
Hiệu suất
gRPC sử dụng HTTP/2. So với HTTP/1.1, HTTP/2:
- Là giao thức nhị phân nhỏ hơn, nhanh hơn.
- Hiệu quả hơn cho máy tính để phân tích cú pháp.
- Hỗ trợ multiplexing (ghép kênh) nhiều request trên một kết nối duy nhất. Multiplexing cho phép gửi nhiều request qua một kết nối mà không có request nào chặn nhau. Trong HTTP/1.1, việc chặn này được gọi là "head-of-line (HOL) blocking" (chặn đầu hàng).
gRPC sử dụng Protobuf, định dạng nhị phân hiệu quả, để tuần tự hóa thông báo. Các thông báo Protobuf:
- Nhanh để tuần tự hóa và giải tuần tự hóa.
- Sử dụng ít băng thông hơn so với các định dạng dựa trên văn bản.
gRPC là giải pháp tốt cho các thiết bị di động và mạng có hạn chế băng thông.
Khả năng tương tác
Có các công cụ và thư viện gRPC cho tất cả các ngôn ngữ lập trình và nền tảng chính, bao gồm .NET, Java, Python, Go, C++, Node.js, Swift, Dart, Ruby và PHP. Nhờ định dạng wire nhị phân Protobuf và việc tạo code hiệu quả cho mỗi nền tảng, các nhà phát triển có thể xây dựng các ứng dụng đa nền tảng, hiệu năng cao.
Tính dễ sử dụng và năng suất
gRPC là giải pháp RPC toàn diện. Nó hoạt động nhất quán trên nhiều ngôn ngữ và nền tảng. Nó cũng cung cấp công cụ tuyệt vời, với nhiều code boilerplate (code mẫu) được tạo tự động. Giống như WCF, gRPC tự động tạo thông báo và client có kiểu dữ liệu mạnh (strongly typed client). Thời gian của nhà phát triển được giải phóng để tập trung vào logic kinh doanh.
Streaming (truyền dữ liệu liên tục)
gRPC có streaming hai chiều đầy đủ, cung cấp chức năng tương tự như các dịch vụ full duplex (song công hoàn toàn) của WCF. gRPC streaming có thể hoạt động qua các kết nối internet thông thường, load balancer (cân bằng tải) và service mesh (lưới dịch vụ).
Deadlines (thời hạn), timeouts (thời gian chờ) và cancellation (hủy bỏ)
gRPC cho phép client chỉ định thời gian tối đa cho một RPC để hoàn thành. Nếu deadline được chỉ định bị vượt quá, máy chủ có thể hủy hoạt động độc lập với client. Deadlines và cancellations có thể được truyền qua các lời gọi gRPC tiếp theo để giúp thực thi giới hạn sử dụng tài nguyên. Client có thể dừng hoạt động khi deadline bị vượt quá, hoặc sớm hơn nếu cần. Ví dụ, client có thể dừng hoạt động do tương tác của người dùng.
Bảo mật
gRPC có thể sử dụng TLS và HTTP/2 để cung cấp kết nối được mã hóa đầu cuối giữa client và máy chủ. Hỗ trợ xác thực chứng chỉ client tăng cường thêm bảo mật và tin cậy giữa client và máy chủ.
gRPC như là con đường di chuyển cho WCF
Có hai con đường được khuyến nghị để hiện đại hóa ứng dụng WCF:
- gRPC được xây dựng trên các công nghệ hiện đại và đã nổi lên như lựa chọn phổ biến nhất trong cộng đồng nhà phát triển cho các ứng dụng RPC. Bắt đầu từ .NET Core 3.0, các nền tảng .NET hiện đại có hỗ trợ tuyệt vời cho gRPC. Di chuyển dịch vụ WCF sang sử dụng gRPC giúp cung cấp các tính năng RPC, hiệu suất và khả năng tương tác cần thiết trong các ứng dụng hiện đại.
- CoreWCF là nỗ lực của cộng đồng để mang lại hỗ trợ cho việc lưu trữ dịch vụ WCF trên .NET. CoreWCF chỉ hỗ trợ một tập hợp con các tính năng của WCF, và các ứng dụng .NET Framework di chuyển để sử dụng nó sẽ cần thay đổi code và kiểm thử để thành công. CoreWCF là lựa chọn tốt nếu ứng dụng phải duy trì khả năng tương thích với các client hiện có gọi dịch vụ WCF.
Bắt đầu
Để được hướng dẫn chi tiết về việc xây dựng dịch vụ gRPC trong ASP.NET Core cho các nhà phát triển WCF, xem ASP.NET Core gRPC for WCF Developers.