gRPC là gì? Kiến trúc, Truyền phát và Thương lượng API
API Thu thập Dữ liệu Toàn cầu không rác thu thập nội dung web công khai được phép và có thể hiển thị JavaScript khi cần gRPC trong một phản hồi thực.
TL;DR
- gRPC có một vai trò giao thức chính xác. gRPC là một framework gọi thủ tục từ xa mã nguồn mở, trong đó một máy khách gọi một phương thức dịch vụ kiểu trên một quy trình khác thông qua mã máy khách và máy chủ được tạo ra.
- gRPC phải được đọc ở đúng lớp. Vận chuyển, đại diện, chính sách trình duyệt và ủy quyền ứng dụng vẫn là những mối quan tâm riêng biệt.
- Các trung gian có thể thay đổi những gì mà một ứng dụng quan sát. Cổng, bộ nhớ đệm, giá trị mặc định của trình duyệt và thư viện máy khách có thể thêm xử lý giữa các byte nguồn và dữ liệu đã phân tích.
- Xác thực cần bằng chứng nội dung. Một trạng thái hoặc trường riêng lẻ không chứng minh rằng đại diện công khai mong đợi đã đến.
- Bảo mật phụ thuộc vào phạm vi và xác thực. Cú pháp giao thức không bao giờ cấp quyền truy cập vào một tài nguyên hoặc tin tưởng vào một giá trị do người gọi cung cấp.
gRPC là gì?
gRPC là một framework gọi thủ tục từ xa mã nguồn mở, trong đó một máy khách gọi một phương thức dịch vụ kiểu trên một quy trình khác thông qua mã máy khách và máy chủ được tạo ra. Một hợp đồng dịch vụ thường được viết trong một tệp .proto, Protocol Buffers mã hóa các thông điệp, và HTTP/2 chuyển các cuộc gọi giữa các điểm cuối. Hình ảnh gọi địa phương là một mô hình lập trình; mỗi cuộc gọi vẫn vượt qua một ranh giới mạng với độ trễ, thất bại một phần, ủy quyền và các mối quan tâm về khả năng tương thích.
Định nghĩa hữu ích bao gồm cả cơ chế và ranh giới của nó. gRPC ảnh hưởng đến một phần cụ thể của một sự trao đổi, trong khi các trách nhiệm bên cạnh vẫn thuộc về HTTP, trình duyệt, phương tiện vận chuyển được chọn, ứng dụng, hoặc mô hình dữ liệu của máy chủ. Giữ cho các lớp đó riêng biệt giúp các báo cáo lỗi có thể tái hiện và ngăn chặn một thay đổi cấu hình bị nhầm lẫn với một quyết định kiểm soát truy cập.
Đối với các nhà phát triển API, câu hỏi đầu tiên là ai tạo ra giá trị hoặc hành vi. Câu hỏi tiếp theo là ai diễn giải nó. Câu hỏi cuối cùng là kết quả quan sát nào chứng minh rằng sự diễn giải đã hoạt động. Ba câu trả lời đó biến một thuật ngữ trong từ điển thành một hợp đồng giao diện có thể kiểm tra.
Cách gọi gRPC vượt qua mạng
Một định nghĩa dịch vụ đặt tên cho các phương thức và gán kiểu tin nhắn yêu cầu và phản hồi. Trình biên dịch Protocol Buffer và một plugin gRPC cụ thể cho ngôn ngữ biến định nghĩa đó thành các stub máy khách và giao diện máy chủ. Mã ứng dụng gọi stub, trong khi mã được tạo serial hóa yêu cầu, định hình cuộc gọi, gửi siêu dữ liệu và khôi phục phản hồi bằng ngôn ngữ của người gọi.
HTTP/2 cung cấp cho gRPC một phương tiện vận chuyển đa luồng với các luồng, kiểm soát dòng chảy, nén tiêu đề và kết nối lâu dài. Nhiều cuộc gọi có thể chia sẻ một kết nối mà không được đại diện là một hàng đợi yêu cầu HTTP/1.1. Lựa chọn vận chuyển đó giúp với lưu lượng dịch vụ đồng thời, nhưng các thời hạn ứng dụng, cân bằng tải và giới hạn năng lực vẫn cần thiết kế rõ ràng.
gRPC hỗ trợ các cuộc gọi đơn, cuộc gọi truyền phát máy chủ, cuộc gọi truyền phát máy khách và truyền phát hai chiều. Các cuộc gọi đơn gần tương ứng với một yêu cầu và phản hồi thông thường. Các phương thức truyền phát giữ mở một luồng tin nhắn có trật tự theo một hoặc cả hai hướng, điều này hữu ích khi kết quả đến dần dần hoặc cả hai bên cần trao đổi các cập nhật.
Mã trạng thái và siêu dữ liệu đi kèm truyền đạt kết quả của các cuộc gọi. Một kết nối vận chuyển có thể thành công trong khi phương thức từ xa trả về một thất bại ở cấp độ ứng dụng, vì vậy việc giám sát nên ghi lại trạng thái gRPC, tên phương thức, thời gian đã trôi qua và siêu dữ liệu phản hồi đã chọn, thay vì coi một kết nối HTTP/2 mở là bằng chứng về thành công.
Đọc Hợp đồng Dịch vụ gRPC
Các thuật ngữ sau đây phân tách các thành phần thường được gộp lại thành một nhãn. Hãy đọc chúng như là các giao diện giữa các bên tham gia thay vì là trang trí trong một dấu vết mạng.
Dịch vụ
Một tập hợp có tên của các phương thức có thể gọi từ xa. Máy chủ thực hiện dịch vụ, và máy khách nhận được một stub được tạo cho nó.
phương thức RPC
Một hợp đồng kết hợp một kiểu yêu cầu với một kiểu phản hồi hoặc hình dạng luồng. Tên phương thức trở thành một phần của giao diện công khai.
Tin nhắn
Một bản ghi Protocol Buffer có kiểu được làm từ các trường được đánh số. Các số trường, không phải thứ tự thuộc tính mã nguồn, xác định các giá trị trên mạch.
Siêu dữ liệu
Thông tin khóa-giá trị được gửi trước hoặc sau dữ liệu tin nhắn. Nó thường mang bối cảnh xác thực, định danh theo dõi, và chi tiết phản hồi.
Hạn chót
Giới hạn của người gọi về thời gian chờ. Sự phát tán hạn chót ngăn chặn công việc phía dưới tiến hành sau khi kết quả không còn hữu ích.
Kênh
Trừu tượng phía máy khách quản lý các kết nối đến một mục tiêu. Một kênh có thể được tái sử dụng qua các cuộc gọi thay vì mở một kết nối mới cho mỗi lần gọi phương thức.
Tại sao gRPC quan trọng trong việc thu thập dữ liệu web
gRPC có thể thay đổi những gì các byte đến, cách mà các byte đó được diễn giải, hoặc liệu mã trình duyệt có thể quan sát kết quả hay không. Một quy trình làm việc thu thập nên xác định hiệu ứng đó trước khi thay đổi công cụ. Ghi lại URL đã yêu cầu, URL cuối cùng, trạng thái phản hồi, loại đại diện, các trường giao thức liên quan, và một dấu hiệu nội dung mong đợi. Hồ sơ gọn gàng đó phân biệt một trang đúng với một thông điệp truy cập, màn hình đồng ý, mục tiêu chuyển hướng, khung ứng dụng trống, hoặc mã hóa không tương thích.
HTTP trực tiếp là con đường tiếp nhận đơn giản nhất khi dữ liệu cần thiết tồn tại trong một phản hồi được máy chủ-rendered mở. Một trình duyệt trở nên liên quan khi nội dung được phê duyệt phụ thuộc vào việc thực thi JavaScript, trạng thái được quản lý bởi trình duyệt, điều hướng, hoặc chính sách bảo mật của trình duyệt. Hai con đường không nên bị ép phải trông giống hệt nhau: trình duyệt quản lý cookie, nén, chuyển hướng, CORS, và lưu trữ theo quy tắc nền tảng, trong khi một máy khách trực tiếp phơi bày một tập hợp các giá trị mặc định khác.
Tính liên tục của phiên làm việc rất quan trọng bất cứ khi nào một phản hồi thiết lập trạng thái cho yêu cầu tiếp theo. Giữ cho một chuỗi được ủy quyền bên trong một ngữ cảnh khách hàng giới hạn, bảo tồn địa điểm và nguồn gốc mạng cần thiết, và tránh trộn lẫn trạng thái từ các công việc không liên quan. Một proxy thay đổi nguồn gốc mạng; nó không sao chép tiêu đề, giải mã đại diện, thực thi kịch bản, hoặc cấp quyền truy cập vào nội dung bị hạn chế.
Phân tích bắt đầu chỉ sau khi xác thực đại diện. Xác nhận máy chủ cuối cùng, danh tính chính, nơi có sẵn, loại phương tiện, trạng thái giải mã và dấu hiệu kinh doanh cần thiết trước khi trích xuất các trường. Thứ tự này ngăn chặn một bộ phân tích biến một tài liệu lỗi thành các bản ghi trống mà có vẻ thành công về mặt kỹ thuật.
Các trung gian xứng đáng được chú ý rõ ràng. Một mạng phân phối nội dung có thể chọn một biến thể đã mã hóa, một cổng có thể trả lời OPTIONS, một bộ nhớ đệm có thể tái sử dụng một phản hồi đã được thỏa thuận, và một máy chủ ứng dụng có thể thiết lập cookie hoặc các trường ủy quyền. So sánh chỉ mã ứng dụng với đầu ra trang cuối cùng bỏ qua lớp có thể đã đưa ra quyết định.
Scrapeless Universal Scraping API có liên quan khi một nhóm cần quản lý việc truy xuất nội dung công khai được phép, bao gồm các trang được render bằng JavaScript. Hợp đồng mua bán vẫn nên xác định mục tiêu, các trường cho phép, đại diện mong đợi, dấu hiệu chấp nhận và các điều kiện dừng. Khả năng sản phẩm không thay thế các điều khoản nguồn, đánh giá quyền riêng tư hoặc xác thực cấp ứng dụng.
Nơi gRPC Phù Hợp Nhất
gRPC chiếm một vị trí trong kiến trúc khi nó thay đổi hành vi của sản phẩm cụ thể, yêu cầu tương thích hoặc quyết định chẩn đoán. Những trường hợp sử dụng này mô tả công việc trước tiên và tính năng giao thức thứ hai.
Gọi dịch vụ nội bộ
Các đội có thể chia sẻ một lược đồ giữa các dịch vụ và tạo ra các khách hàng nhất quán cho nhiều ngôn ngữ triển khai.
Giao hàng kết quả từng bước
Phát trực tuyến máy chủ có thể gửi các bản ghi khi chúng có sẵn thay vì chờ đợi một thân lớn cuối cùng.
Các mặt phẳng telemetry và điều khiển
Các luồng hai chiều có thể mang theo các thay đổi trạng thái đang diễn ra trong khi vẫn giữ hợp đồng kiểu rõ ràng.
Cuộc gọi từ di động đến backend
Thông điệp ngắn gọn có thể giảm số byte chuyển giao, với điều kiện chiến lược nền tảng khách và cổng được lên kế hoạch.
Hệ thống đa ngôn ngữ
Một hợp đồng .proto có thể giảm bớt việc dịch viết tay giữa các ngôn ngữ được hỗ trợ bởi công cụ gRPC.
Sự tiến hóa API nghiêm ngặt
Các trường tin nhắn được đánh số và các quy tắc tương thích cung cấp cho các nhóm một cách tiếp cận có kỷ luật để thêm các trường mà không cần diễn giải lại các trường cũ.
gRPC So Sánh Với JSON và REST-Style HTTP APIs
gRPC mạnh mẽ nhất khi cả hai bên có thể chia sẻ một sơ đồ và sử dụng các trình tạo mã được hỗ trợ. Một API JSON qua HTTP dễ dàng hơn để kiểm tra với trình duyệt thông thường và các công cụ dòng lệnh, và nó phù hợp với các tích hợp công khai nơi người tiêu dùng đánh giá sự tách rời lỏng lẻo. Sự lựa chọn này là một quyết định hợp đồng và hệ sinh thái, không phải là một bảng xếp hạng tốc độ phổ quát.
| Kích thước | gRPC | Khái niệm liên quan hoặc thay thế |
|---|---|---|
| Hợp đồng | Sơ đồ dịch vụ và tin nhắn đã nhập | Đường dẫn tài nguyên và các sơ đồ kiểu phương tiện |
| Định dạng dây | Thường thì Giao thức Buffers | Thường là JSON, nhưng HTTP cho phép các định dạng khác. |
| Truyền phát | Được tích hợp vào hình thức phương pháp | Có thể thông qua một số cơ chế HTTP riêng biệt |
| Truy cập trình duyệt | Thường cần một cổng hoặc khách hàng định hướng trình duyệt | Hỗ trợ fetch gốc cho các điểm cuối HTTP thông thường |
| Gỡ lỗi | Tốt nhất với các công cụ nhận thức gRPC và phản chiếu khi được kích hoạt | Có thể đọc được bằng các công cụ HTTP thông thường |
Sự so sánh chỉ hữu ích nếu nó duy trì ranh giới của các lớp. Hai cơ chế có thể đồng tồn tại trong một yêu cầu, và việc thay thế một cơ chế không tự động thay thế cơ chế kia. Ghi lại hành vi đã chọn theo các tham số đầu vào, đầu ra quan sát được, trạng thái thất bại và quyền sở hữu.
Những sai lầm thiết kế gRPC phổ biến
- Đối xử với một cuộc gọi từ xa như cuộc gọi địa phương. Công việc từ xa có thể hết giờ, bị hủy hoặc hoàn thành sau khi người gọi ngừng chờ. Tên phương thức không nên che giấu hành vi tốn kém hoặc thay đổi trạng thái.
- Bỏ qua thời hạn. Một thời hạn vắng mặt có thể để công việc chờ đợi sau khi giá trị kinh doanh của nó đã hết hạn. Đặt ra những giới hạn thực tế và lan truyền chúng qua các cuộc gọi tiếp theo.
- Thay đổi số trường. Một trường đã được đổi tên có thể giữ số của nó, nhưng việc tái sử dụng một số đã bị loại bỏ có thể khiến các thông điệp cũ và mới không đồng nhất. Dự trữ các định danh đã bị loại bỏ trong sơ đồ.
- Chọn phát trực tuyến theo mặc định. Một luồng tiêu tốn tài nguyên kết nối và ứng dụng trong suốt vòng đời của nó. Sử dụng phát trực tuyến khi trao đổi gia tăng thay đổi hành vi sản phẩm.
- Giả định khả năng tương thích của trình duyệt. Mã lấy thông thường của trình duyệt không phơi bày mọi hành vi vận chuyển gRPC. Lập kế hoạch gRPC-Web hoặc một cổng HTTP khi trình duyệt là khách hàng.
- Ghi log nội dung tin nhắn một cách không phân biệt. Các tải trọng có kiểu có thể chứa thông tin xác thực hoặc dữ liệu cá nhân. Ưu tiên phương thức, trạng thái, thời gian và các định danh đã được phê duyệt trong các nhật ký hoạt động.
Hầu hết các lỗi trở nên dễ chẩn đoán hơn sau khi loại bỏ những giả định về những gì thư viện hoặc trình duyệt đã thực hiện tự động. Ghi lại một dấu vết tối thiểu, xóa bỏ bí mật và thay đổi một biến có kiểm soát tại một thời điểm. Mục tiêu là một lời giải thích ổn định về đại diện đã trả lại, chứ không phải là một bộ sưu tập các điều chỉnh đầu không liên quan.
Danh sách kiểm tra đánh giá gRPC thực tiễn
Chuỗi này hoạt động như một đánh giá thiết kế trước khi ra mắt và như một chẩn đoán sản xuất sau khi hành vi thay đổi. Nó giữ bằng chứng giao thức liên kết với kết quả ứng dụng.
- Viết hợp đồng dịch vụ trước khi chọn một wrapper của framework, và xem xét mỗi phương thức là đơn hoặc thực sự cần một luồng.
- Liệt kê mọi ngôn ngữ gọi và runtime, sau đó xác nhận hỗ trợ chính thức và quyền sở hữu mã cho từng ngôn ngữ.
- Định nghĩa thời hạn, hành vi hủy bỏ, kỳ vọng về tin nhắn tối đa, và ánh xạ trạng thái như một phần của hợp đồng API.
- Thử nghiệm tiến hóa sơ đồ với một khách hàng cũ và một máy chủ mới, sau đó đảo ngược cặp để phơi bày các giả định tương thích.
- Quyết định cách mà các trình duyệt, đối tác bên ngoài và công cụ gỡ lỗi sẽ tiếp cận dịch vụ; thêm một cổng chỉ khi ranh giới đó là thực.
- Đo lường hành vi gọi đầu cuối dưới độ đồng song đại diện, bao gồm thời gian hạ nguồn và chi phí tuần tự hóa.
- Tài liệu hóa các khóa metadata nào được phép và ngăn các bí mật hoặc đầu vào người dùng không kiểm soát từ việc vào các dấu vết và nhật ký.
Kết thúc đánh giá bằng cách lưu một mẫu nhỏ đã được chấp nhận và một mẫu đã bị từ chối với cùng các quy tắc xóa mờ. Các thay đổi trong tương lai có thể được so sánh với danh tính trang đã biết, các trường kỳ vọng và nội dung đã giải mã thay vì chỉ dựa vào bộ nhớ hoặc ảnh chụp màn hình.
Bảo mật, Metadata và Khả năng Quan sát
Bảo mật vận chuyển bảo vệ các byte trong quá trình chuyển giao, nhưng nó không quyết định ai có thể gọi một phương thức. Xác thực bên đối tác, ủy quyền cho hoạt động được yêu cầu, và xác minh từng thông điệp tại ranh giới dịch vụ. Các loại được tạo ra ngăn chặn nhiều lỗi hình dạng; chúng không thay thế xác thực kinh doanh.
Metadata xứng đáng nhận được cùng một đánh giá như tiêu đề trong bất kỳ giao thức nào khác. Các giá trị xác thực nên sử dụng đường dẫn thông tin xác thực đã được phê duyệt của nền tảng, và các giá trị theo dõi nên được giới hạn. Một máy chủ không được giả định rằng metadata là đáng tin cậy chỉ vì một thư viện khách hàng đã tạo ra yêu cầu.
Thông tin theo dõi gRPC hữu ích tách sức khỏe kết nối khỏi sức khỏe phương thức. Ghi lại độ trễ cấp phương thức, trạng thái, hành vi hủy bỏ, cạn kiệt thời hạn, và các băng đáp ứng. Điều này làm cho một phụ thuộc chậm trở nên rõ ràng mà không cần ghi lại các nội dung nhạy cảm.
Các tiêu chuẩn định nghĩa gRPC
giới thiệu chính thức về gRPC xác định các dịch vụ, các stubs đã được tạo ra, và Protocol Buffers. Nguồn chính này cố định từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi thực thi vẫn cần được quan sát trong khách hàng và triển khai đã chọn.
hướng dẫn các khái niệm cốt lõi của gRPC miêu tả hình dạng phương thức đơn và phát trực tuyến. Nguồn chính này cố định từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi thực thi vẫn cần được quan sát trong khách hàng và triển khai đã chọn.
cụ thể hóa HTTP/2 xác định vận chuyển đa truy cập được sử dụng bởi gRPC. Nguồn chính này cố định từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi thực thi vẫn cần được quan sát trong khách hàng và triển khai đã chọn.
tổng quan về Protocol Buffers giải thích ngôn ngữ sơ đồ và định dạng tin nhắn nhị phân. Nguồn chính này cố định từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi thực thi vẫn cần được quan sát trong khách hàng và triển khai đã chọn.
Quyết định gRPC trong một Câu
Chọn gRPC khi một hợp đồng chia sẻ có kiểu, các khách hàng đã được tạo ra, và phát trực tuyến hạng nhất giải quyết các vấn đề cụ thể giữa các dịch vụ; chọn một đại diện HTTP đơn giản hơn khi việc kiểm tra mở và khả năng tiếp cận khách hàng rộng rãi quan trọng hơn.
Đưa quy tắc đó vào một bài kiểm tra chấp nhận. Nêu rõ bên nào gửi tín hiệu, bên nào diễn giải nó, bên trung gian nào có thể thay đổi con đường, và dấu hiệu nội dung nào chứng minh thành công. Điều này làm cho gRPC trở thành một phần của hệ thống có thể quan sát được thay vì một nhãn gắn vào sau một thất bại.
Sẵn sàng xác thực phản hồi Web công cộng?
Sử dụng Scrapeless Universal Scraping API để lấy nội dung công cộng đã được phê duyệt và kiểm tra hợp đồng đại diện được mô tả trong hướng dẫn này.
Đăng ký ngay hôm nay và nhận được $5 tín dụng miễn phí — không yêu cầu thẻ tín dụng.
Nhận $5 tín dụng của bạn →Câu hỏi thường gặp
gRPC có giống với Protocol Buffers không?
Không. gRPC là framework RPC và mô hình gọi, trong khi Protocol Buffers thường cung cấp định nghĩa giao diện và mã hóa tin nhắn của nó. Các mối quan tâm khác như vận chuyển HTTP/2, xử lý trạng thái, thời hạn và mã dịch vụ đã được tạo thuộc về gRPC chứ không phải chỉ thuộc về định dạng tuần tự hóa.
gRPC có luôn sử dụng HTTP/2 không?
Các triển khai gRPC phổ biến sử dụng ngữ nghĩa HTTP/2 cho vận chuyển của chúng. Các biến thể hướng trình duyệt và các cổng có thể phơi bày các cạnh khác nhau, vì vậy sơ đồ kiến trúc nên phân biệt lượt nhảy gRPC nguyên bản với bất kỳ giao diện HTTP nào đã được dịch.
Một trình duyệt có thể gọi dịch vụ gRPC trực tiếp không?
Một trình duyệt thường cần hỗ trợ gRPC-Web hoặc một cổng HTTP vì các API mạng thông thường của trình duyệt không phơi bày toàn bộ vận chuyển gRPC nguyên bản. Cổng trở thành một phần của hợp đồng công cộng và nên được giám sát riêng biệt.
gRPC có luôn nhanh hơn JSON qua HTTP không?
Không. Kích thước payload và serialize có thể ủng hộ gRPC, nhưng hiệu suất từ đầu đến cuối cũng phụ thuộc vào công việc dịch vụ, điều kiện mạng, tái sử dụng kết nối, kích thước thông điệp và triển khai của khách hàng. Đo lường quy trình làm việc thực tế trước khi đưa ra tuyên bố chung.
Các API gRPC nên phát triển như thế nào?
Các API gRPC nên thêm các trường tương thích, giữ nguyên số trường hiện có, giữ lại các định danh đã bị xóa, và thử nghiệm cặp client-server cũ và mới. Hành vi và ngữ nghĩa trạng thái của phương pháp cần xem xét tính tương thích cùng với tệp .proto.