Cloudflare đã chuyển từ NGINX sang proxy Pingora của chính nó được viết bằng Rust

Cloudflare đã thông báo chuyển đổi mạng phân phối nội dung của mình sang sử dụng proxy Pingora, được viết bằng ngôn ngữ Rust. Proxy mới thay thế cấu hình dựa trên máy chủ NGINX bằng tập lệnh Lua và xử lý hơn một nghìn tỷ yêu cầu mỗi ngày. Cần lưu ý rằng việc chuyển đổi sang proxy chuyên dụng không chỉ cho phép triển khai các tính năng mới và tăng tính bảo mật nhờ hoạt động an toàn của bộ nhớ mà còn dẫn đến tăng đáng kể hiệu suất và tiết kiệm tài nguyên - giải pháp dựa trên Pingora không yêu cầu sử dụng của Lua và do đó tiêu thụ ít tài nguyên CPU hơn 70% và bộ nhớ ít hơn 67% trong khi xử lý cùng một lượng lưu lượng.

Trong một thời gian dài, một hệ thống ủy quyền lưu lượng truy cập giữa người dùng và máy chủ cuối dựa trên tập lệnh NGINX và Lua đã đáp ứng nhu cầu của Cloudflare, nhưng khi mạng phát triển và độ phức tạp của nó tăng lên, một giải pháp phổ quát hóa ra là không đủ, cả về mặt hiệu suất và do những hạn chế trong khả năng mở rộng và triển khai các cơ hội mới cho khách hàng. Đặc biệt, có những thách thức trong việc bổ sung chức năng ngoài cổng đơn giản và bộ cân bằng tải. Ví dụ: nếu máy chủ không xử lý được yêu cầu thì cần phải gửi lại yêu cầu đến máy chủ khác, cung cấp cho yêu cầu đó một bộ tiêu đề HTTP khác.

Thay vì kiến ​​trúc phân tách các yêu cầu thành các quy trình xử lý riêng biệt, Pingora sử dụng mô hình đa luồng, trong các trường hợp sử dụng Cloudflare (mức độ tập trung lưu lượng truy cập cao từ các trang web khác nhau với sự thay đổi thống kê lớn) cho thấy sự phân bổ tài nguyên hiệu quả hơn giữa các lõi CPU. Đặc biệt, việc nginx liên kết các yêu cầu không cân bằng với các quy trình dẫn đến tải không cân bằng trên các lõi CPU, dẫn đến các yêu cầu tiêu tốn nhiều tài nguyên và việc chặn I/O làm chậm quá trình xử lý các yêu cầu khác. Ngoài ra, việc ràng buộc nhóm kết nối với các quy trình xử lý không cho phép sử dụng lại các kết nối đã được thiết lập từ các quy trình xử lý khác, điều này làm giảm hiệu quả khi có một số lượng lớn các quy trình xử lý.

NGINX:

Cloudflare đã chuyển từ NGINX sang proxy Pingora của chính nó được viết bằng Rust

Pingora:

Cloudflare đã chuyển từ NGINX sang proxy Pingora của chính nó được viết bằng Rust

Việc triển khai Pingora giúp giảm số lượng cài đặt kết nối mới xuống 160 lần và tăng tỷ lệ yêu cầu được sử dụng lại từ 87.1% lên 99.92%. Ngoài việc giảm kết nối lại và sử dụng lõi CPU hiệu quả hơn, cải thiện hiệu suất của proxy mới chủ yếu là do loại bỏ các trình xử lý Lua chậm được sử dụng với nginx.

Ngôn ngữ Rust được chọn để đạt hiệu suất cao kết hợp với sự sẵn có của các công cụ đảm bảo hoạt động an toàn với bộ nhớ. Có đề cập rằng mặc dù có các kỹ sư có trình độ cao của Cloudflare và xem xét mã viết bằng ngôn ngữ C nhưng không thể tránh khỏi các lỗi dẫn đến vấn đề về bộ nhớ (ví dụ: lỗ hổng trong trình phân tích cú pháp HTML). Đối với mã mới, nó nói về các trường hợp phân tích lỗi trong Pingora, nguyên nhân hóa ra không phải do sự cố trong ứng dụng mà do lỗi trong nhân Linux và lỗi phần cứng.

Ngoài ra, chúng ta có thể lưu ý bình luận của Linus Torvalds, được phát biểu tại hội nghị Thượng đỉnh Nguồn mở Châu Âu diễn ra những ngày này, liên quan đến việc đưa hỗ trợ ngôn ngữ Rust vào nhân Linux. Các bản vá để phát triển trình điều khiển thiết bị bằng ngôn ngữ Rust không có trong kernel 6.0, nhưng theo Linus, rất có thể chúng sẽ được chấp nhận vào kernel 6.1; anh ấy sẽ không trì hoãn việc tích hợp. Là động lực để bổ sung hỗ trợ cho Rust, ngoài tác động tích cực đến bảo mật, Linus còn nêu cơ hội để tăng sự quan tâm đến việc làm việc dựa trên cốt lõi của những người tham gia mới, điều này rất quan trọng trong bối cảnh những người già đang già đi.

Nguồn: opennet.ru

Thêm một lời nhận xét