Cloudflare đã xuất bản bản phát hành khung Pingora 0.4, được thiết kế để phát triển các dịch vụ mạng an toàn, hiệu suất cao bằng ngôn ngữ Rust. Proxy được xây dựng bằng Pingora đã được sử dụng trong mạng phân phối nội dung Cloudflare thay vì Nginx trong hơn hai năm và xử lý hơn 40 triệu yêu cầu mỗi giây. Mã được viết bằng Rust và được xuất bản theo giấy phép Apache 2.0.
Các tính năng chính của Pingora:
- Hỗ trợ HTTP/1 và HTTP/2 (HTTP/3 trong các gói), cũng như khả năng tạo các dịch vụ bằng giao thức riêng hoặc UDP/TCP.
- Hỗ trợ xử lý yêu cầu đa luồng ở chế độ không đồng bộ.
- Khả năng đính kèm trình xử lý và bộ lọc gọi lại cho phép bạn quản lý các giai đoạn xử lý yêu cầu khác nhau cũng như sửa đổi, chuyển hướng, chặn và ghi nhật ký các yêu cầu và phản hồi.
- Ủy quyền gRPC và WebSocket.
- Cân bằng tải có thể kết nối.
- Khả năng thay đổi cấu hình mà không cần khởi động lại.
- Hỗ trợ cập nhật mã ứng dụng mà không làm đứt kết nối.
- Phương tiện chuyển tải trong trường hợp có sự cố (chuyển đổi dự phòng).
- Tích hợp với các hệ thống giám sát và ghi nhật ký khác nhau (Syslog, Prometheus, Sentry, OpenTelemetry).
- Hỗ trợ mã hóa TLS (sử dụng OpenSSL, BoringSSL hoặc Rustls).
- Các gói Rust được tạo sẵn để tạo proxy HTTP, làm việc với các giao thức mạng, phân tích tiêu đề HTTP, tính toán và giới hạn lưu lượng, cân bằng tải, làm việc với bảng băm phân tán Ketama, duy trì bộ đệm trong RAM và xử lý thời gian chờ không đồng bộ.
Trong số những thay đổi trong phiên bản mới:
- Hỗ trợ ban đầu cho thư viện mật mã Rustls bằng cách sử dụng các nhà cung cấp mật mã dựa trên aws-lc-rs và thư viện vòng dựa trên BoringSSL.
- Hỗ trợ thử nghiệm cho nền tảng Windows.
- Chế độ TLS giả, có thể được sử dụng trong các tình huống không thể sử dụng triển khai TLS thực.
- Đã thêm hỗ trợ cho mô-đun gRPC-web để chuyển đổi các yêu cầu của máy khách gRPC-web thành các yêu cầu tới người phục vụ gRPC.
- Cung cấp khả năng xử lý các kết nối H2C (HTTP/2 qua TCP trần, không mã hóa) và các kết nối HTTP/1 trên cùng một cổng mạng.
- Đã thêm khả năng kết nối việc triển khai hàm connect() của riêng bạn để thay đổi hành vi khi thiết lập kết nối mạng, chẳng hạn như để đặt các tùy chọn bổ sung cho ổ cắm hoặc mô phỏng lỗi trong quá trình thử nghiệm.
- Cung cấp khả năng bỏ qua các phản hồi thông tin khi ủy quyền, chẳng hạn như các phản hồi có tiêu đề "Mong đợi: 100-tiếp tục".
- Đã thêm hỗ trợ để giải nén các phản hồi được nén bằng gzip.
- Thực hiện kế toán trạng thái phụ trợ cho mục đích giám sát.
- Đã thêm khả năng liên kết với một loạt các cổng cục bộ.
Nguồn: opennet.ru
