Redis xử lý đa luồng
Redis thường được biết đến như một mô hình đơn quy trình, đơn luồng. Đây không phải là sự thật. Redis cũng chạy nhiều luồng phụ trợ để thực hiện các công việc dọn dẹp phụ trợ, chẳng hạn như làm sạch dữ liệu bẩn và đóng các bộ mô tả tệp. Trong Redis, luồng chính chịu trách nhiệm cho các tác vụ chính, bao gồm nhưng không giới hạn ở: nhận kết nối từ máy khách, xử lý các sự kiện đọc / ghi kết nối, phân tích cú pháp yêu cầu, xử lý lệnh, xử lý sự kiện hẹn giờ và đồng bộ hóa dữ liệu. Chỉ một lõi CPU chạy một quy trình và một luồng duy nhất. Show Đối với các gói nhỏ, máy chủ Redis có thể xử lý 80.000 đến 100.000 QPS. QPS lớn hơn vượt quá khả năng xử lý của máy chủ Redis. Một giải pháp phổ biến là phân vùng dữ liệu và sử dụng nhiều máy chủ trong kiến trúc phân tán. Tuy nhiên, giải pháp này cũng có nhiều điểm hạn chế. Ví dụ: quá nhiều máy chủ Redis để quản lý; một số lệnh áp dụng cho một máy chủ Redis không hoạt động trên các phân vùng dữ liệu; phân vùng dữ liệu không thể giải quyết vấn đề đọc / ghi điểm nóng; và độ lệch dữ liệu, phân phối lại và tăng / giảm quy mô trở nên phức tạp hơn. Do các hạn chế của quy trình đơn và luồng đơn, chúng tôi hy vọng rằng đa luồng có thể được tái tạo để sử dụng đầy đủ các ưu điểm của kiến trúc đa lõi SMP, do đó tăng thông lượng của một máy chủ Redis duy nhất. Để làm cho Redis đa luồng, cách đơn giản nhất để nghĩ đến là mọi luồng thực hiện cả I / O và xử lý lệnh. Tuy nhiên, vì cấu trúc dữ liệu được Redis xử lý rất phức tạp, nên đa luồng cần sử dụng các khóa để đảm bảo an toàn cho luồng. Xử lý không đúng mức độ chi tiết của khóa có thể làm giảm hiệu suất. Chúng tôi đề xuất rằng số lượng luồng I / O nên được tăng lên để cho phép một luồng I / O độc lập đọc / ghi dữ liệu trong các kết nối, phân tích cú pháp lệnh và trả lời gói dữ liệu, đồng thời vẫn để một luồng duy nhất xử lý các lệnh và thực thi sự kiện hẹn giờ. Bằng cách này, thông lượng của một máy chủ Redis duy nhất có thể được tăng lên. Quy trình đơn và mô hình luồng đơnƯu điểm
Nhược điểm
Mô hình đa luồng và triển khaiMô hình chủ đềCó ba loại chủ đề, cụ thể là:
Lợi ích của mô hình đa luồngTăng hiệu suất đọc / ghiKết quả kiểm tra căng thẳng chỉ ra rằng hiệu suất đọc / ghi có thể được cải thiện khoảng ba lần trong kịch bản gói nhỏ. Tăng tốc độ đồng bộ hóa Master / SlaveKhi cái chủ gửi dữ liệu đồng bộ hóa đến bộ phận phụ, dữ liệu sẽ được gửi trong luồng I / O. Khi đọc dữ liệu từ master, slave sẽ đọc toàn bộ dữ liệu từ luồng worker và dữ liệu gia tăng từ luồng I / O. Điều này có thể làm tăng tốc độ đồng bộ hóa một cách hiệu quả. Nhiệm vụ tiếp theoNhiệm vụ đầu tiên là tăng số luồng I / O và tối ưu hóa khả năng đọc / ghi I / O. Tiếp theo, chúng ta có thể chia nhỏ luồng worker để mỗi luồng hoàn thành việc đọc I / O, cũng như công việc của luồng worker. Đặt số luồng I / O
Cân nhắc
10 hữu ích 0 bình luận 22k xem chia sẻ |