Sản phẩm
Cloudflare Workers và Containers chính thức hỗ trợ kết nối TCP đầu vào và gRPC
(giờ Việt Nam)
Tóm tắt AI
Cloudflare ra mắt trình xử lý 'connect' mới, cho phép Workers nhận trực tiếp kết nối TCP từ Spectrum và hỗ trợ giao tiếp gRPC toàn phần với Durable Objects hoặc Containers.
Bản dịch AI

AI đang thay đổi cách con người tương tác với máy tính, và giọng nói đang trở thành một phần ngày càng quan trọng trong sự thay đổi đó. Các trợ lý thời gian thực, tính năng đọc chính tả hỗ trợ bởi AI và các giao diện giọng nói khác đòi hỏi khả năng giao tiếp có độ trễ thấp giữa client, các mô hình và các dịch vụ hỗ trợ. Nhiều nhà phát triển sử dụng gRPC, một framework Remote Procedure Call (RPC) được xây dựng trên HTTP/2 và TCP, cho cơ sở hạ tầng này.
Kể từ khi Workers ra mắt vào năm 2017, chúng tôi đã không ngừng mở rộng khả năng của chúng, bao gồm việc bổ sung khả năng mở các kết nối TCP đi và một hệ thống RPC gốc JavaScript được xây dựng trên Cap’n Proto. Và như một phần của Agents Week, chúng tôi đang mở rộng Workers theo hướng ngược lại, hỗ trợ các kết nối TCP đến và bổ sung các cách mới để chạy các ứng dụng gRPC trên Cloudflare.
Hôm nay, chúng tôi xin thông báo:
Chúng tôi đang giới thiệu tính năng này dưới dạng private beta — bạn có thể đăng ký tại đây.
Hãy cùng đi sâu vào từng mục dưới đây.
connect(socket) từ Worker của bạn đến Durable Objects và Containers
Runtime của Workers hiện cung cấp một trình xử lý connect chấp nhận một socket mà bạn có thể đọc và ghi vào đó:
Bạn có thể chuyển socket này từ một Worker sang một Worker khác, hoặc từ một Worker sang một Durable Object. Điều này cho phép Worker của bạn kiểm soát nơi một kết nối TCP đến được định tuyến:
Bạn có thể chuyển một socket từ một Durable Object sang Container của nó:
Và sau đó xử lý socket trong container:
Điều này mang lại cho bạn toàn quyền kiểm soát toàn bộ đường truyền từ client đến máy chủ của bạn đang chạy trong một container trên Cloudflare, mở ra cánh cửa cho giao tiếp full-duplex giữa client và máy chủ chạy bất kỳ chương trình nào, bằng bất kỳ ngôn ngữ nào, cho bất kỳ giao thức dựa trên TCP nào.
Để hiển thị socket TCP thô cho client, chúng tôi đang giới thiệu một loại ứng dụng Spectrum mới, nơi bạn chỉ định một Worker mà bạn muốn các kết nối TCP đến được định tuyến tới. Spectrum là proxy đầu vào của Cloudflare dành cho lưu lượng không phải HTTP, cho phép Cloudflare đứng trước bất kỳ ứng dụng TCP hoặc UDP nào.
gRPC hai chiều từ Cloudflare Containers
gRPC là một framework Remote Procedure Call (RPC) phổ biến và lâu đời, được Google phát hành lần đầu cách đây gần 10 năm, và hiện được sử dụng rộng rãi trên các ứng dụng di động, hệ thống phân tán và gần đây nhất là các ứng dụng AI giọng nói.
Các ứng dụng AI giọng nói thời gian thực đòi hỏi độ trễ thấp, đồng thời cả client và server phải có khả năng gửi tin nhắn cho nhau qua một kết nối duy nhất, bền vững. WebSockets và Durable Objects là những lựa chọn tuyệt vời cho việc này, và Cloudflare Agents SDK cung cấp @cloudflare/voice để giúp mọi thứ trở nên dễ dàng. Tuy nhiên, có rất nhiều phần mềm hiện nay đang sử dụng gRPC cho giao tiếp client-server thời gian thực.
Sử dụng các API được mô tả ở trên, giờ đây bạn có thể triển khai các máy chủ gRPC lên Cloudflare, được viết bằng bất kỳ ngôn ngữ nào, với sự hỗ trợ đầy đủ cho streaming hai chiều giữa client và server. Điều này cho phép bạn tận dụng mạng lưới hơn 330 địa điểm của Cloudflare và xử lý các yêu cầu gần với client hơn nhiều so với các giải pháp khác. Chúng tôi rất hào hứng về những cơ hội mà điều này mở ra cho các ứng dụng giọng nói độ trễ thấp và suy luận tại chỗ (colocated inference).
Ví dụ, đây là một máy chủ gRPC tối giản thực hiện phản hồi (echo) các tin nhắn nhận được về cho client:
Với điều này, gần như không có ứng dụng dựa trên gRPC nào mà bạn không thể triển khai lên Cloudflare, bất kể nó được viết bằng ngôn ngữ nào hay phụ thuộc vào các thư viện nào. Nhưng nếu bạn cần làm điều gì đó đơn giản hơn, chỉ cần phục vụ một máy chủ gRPC cơ bản hoặc kết nối từ một Worker đến một máy chủ gRPC đang chạy ở nơi khác thì sao?
Workers đóng vai trò là máy chủ và client gRPC với khả năng chuyển đổi gRPC sang gRPC-web — không cần container
gRPC-web là phiên bản gRPC tương thích với trình duyệt. Các trình duyệt web không hiển thị các tính năng HTTP/2 cấp thấp mà gRPC yêu cầu, và không có API Socket TCP thô nào được tích hợp sẵn trong trình duyệt web — đó là lý do tại sao API WebSocket tồn tại, và tại sao Workers đã hỗ trợ WebSockets từ năm 2021.
HTTP/2 chia nhỏ mỗi yêu cầu và phản hồi thành các thông điệp nhị phân nhỏ gọi là frames. Đây là cốt lõi của cách một kết nối HTTP/2 hoặc HTTP/3 duy nhất có thể thực hiện đa kênh (multiplex) — nhiều yêu cầu có thể được đan xen trên một kết nối. Mỗi frame có một ID luồng (stream ID), cho phép bên nhận lắp ráp lại thành yêu cầu hoặc phản hồi chính xác. gRPC phụ thuộc vào khả năng kiểm soát ở cấp độ luồng này để thực hiện streaming, hủy bỏ, kiểm soát luồng và trailers hiệu quả.
Các API nền tảng web như fetch không cung cấp khả năng kiểm soát này. Vậy làm thế nào để chúng ta có thể sử dụng gRPC từ Cloudflare Workers một cách đơn giản và dễ dàng — mà client không cần thực hiện bất kỳ thay đổi nào? Chúng tôi chuyển đổi gRPC đến thành gRPC-web, và chuyển đổi gRPC-web đi thành gRPC.
Chúng tôi thực sự đã sử dụng gRPC-web trong reverse proxy của Cloudflare từ năm 2020, khi chúng tôi viết về "Road to gRPC" trên blog của Cloudflare. Chúng tôi chuyển đổi các yêu cầu sang HTTP/1.1 để các thông điệp có thể được kiểm tra và các ứng dụng gRPC có thể hưởng lợi từ các tính năng bảo mật của Cloudflare, như quy tắc WAF và Bot Management.
Hiện tại, trong giai đoạn private beta và sắp triển khai cho tất cả mọi người, chúng tôi đang mở rộng điều này để với một tệp định nghĩa Protocol Buffer (protobuf) như thế này:
Bạn có thể viết một máy chủ gRPC unary trong một Worker chỉ với vài dòng mã, sử dụng gói mã nguồn mở @connectrpc/connect:
Bạn cũng có thể thực hiện các yêu cầu đi đến các máy chủ gRPC bên ngoài theo cách này, bằng cách sử dụng client được tích hợp trong @connectrpc/connect:
Mã của bạn sử dụng gRPC-web, nhưng khi giao tiếp với thế giới bên ngoài, nó sẽ tự động được dịch sang gRPC. Điều này có nghĩa là các client và server mà bạn đang phụ thuộc không cần phải thay đổi. Ví dụ, bạn có thể:
Điều gì tiếp theo cho Socket Workers và gRPC trên Cloudflare
Chúng tôi đang giới thiệu mọi thứ trong bài viết này dưới dạng private beta — bạn có thể đăng ký tại đây.
Tại Cloudflare, chúng tôi sử dụng Cap’n Proto, Cap’n Web và hệ thống RPC gốc JavaScript được tích hợp trong Cloudflare Workers thay vì gRPC. Và khi chúng tôi phát hành các tính năng, chúng tôi luôn hướng tới việc tự mình sử dụng chúng. Vì vậy, trong trường hợp này, trước tiên chúng tôi muốn làm việc chặt chẽ với một nhóm nhỏ các nhà phát triển đang sử dụng gRPC, và đảm bảo rằng chúng tôi đã hoàn thiện nó trước khi mở rộng cho tất cả mọi người.
Rộng hơn nữa, chúng tôi rất hào hứng khi tiếp tục đẩy mạnh giới hạn về các loại lưu lượng mà nền tảng Workers có thể phục vụ, vượt ra ngoài TCP và tiến tới các giao thức dựa trên UDP. Hãy tiếp tục cho chúng tôi biết bạn muốn xây dựng gì trên Workers, và chúng tôi sẽ tiếp tục đẩy mạnh giới hạn của những gì có thể thực hiện được.
Bài viết được AI dịch và tổng hợp tự động từ Cloudflare Blog. Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.