Tôi đang xây dựng gói phân tích và yêu cầu dự án nêu rõ rằng tôi cần hỗ trợ 1 tỷ lượt truy cập mỗi ngày. Đúng, "tỷ". Nói cách khác, không dưới 12.000 lượt truy cập mỗi giây được duy trì và tốt nhất là một số phòng sẽ bùng nổ. Tôi biết tôi sẽ cần nhiều máy chủ cho việc này, nhưng tôi đang cố gắng đạt được hiệu suất tối đa từ mỗi nút trước khi "ném thêm phần cứng vào nó".
Ngay bây giờ, tôi đã hoàn thành phần theo dõi lượt truy cập và được tối ưu hóa tốt. Tôi gần như chỉ lưu các yêu cầu vào Redis (để xử lý sau với Hadoop). Ứng dụng này là Python / Django với gunicorn cho cổng.
Máy chủ Rackspace Ubuntu 10.04 2GB của tôi (không phải máy sản xuất) có thể phục vụ khoảng 1200 tệp tĩnh mỗi giây (được đánh dấu bằng Apache AB với một tài sản tĩnh duy nhất). Để so sánh, nếu tôi trao đổi liên kết tệp tĩnh với liên kết theo dõi của mình, tôi vẫn nhận được khoảng 600 yêu cầu mỗi giây - tôi nghĩ điều này có nghĩa là trình theo dõi của tôi được tối ưu hóa tốt, bởi vì nó chỉ chậm hơn 2 lần so với phục vụ cùng một tài sản tĩnh nhiều lần.
Tuy nhiên, khi tôi điểm chuẩn với hàng triệu lượt truy cập, tôi nhận thấy một vài điều -
- Không sử dụng đĩa - điều này được mong đợi, vì tôi đã tắt tất cả nhật ký Nginx và mã tùy chỉnh của tôi không làm gì ngoài việc lưu chi tiết yêu cầu vào Redis.
- Sử dụng bộ nhớ không liên tục - Có lẽ do quản lý bộ nhớ của Redis, việc sử dụng bộ nhớ của tôi sẽ dần dần tăng lên và sau đó giảm xuống, nhưng nó chưa bao giờ là nút cổ chai của tôi.
- Tải hệ thống dao động trong khoảng 2-4, hệ thống vẫn phản hồi trong cả các điểm chuẩn nặng nhất của tôi và tôi vẫn có thể xem thủ công http://mysite.com/tracking/pixel với độ trễ có thể nhìn thấy trong khi máy chủ (khác) của tôi thực hiện 600 yêu cầu mỗi thứ hai.
- Nếu tôi chạy thử nghiệm ngắn, giả sử 50.000 lượt truy cập (mất khoảng 2m), tôi nhận được 600 yêu cầu ổn định, đáng tin cậy mỗi giây. Nếu tôi chạy thử nghiệm dài hơn (đã thử tới 3,5m cho đến nay), r / s của tôi giảm xuống còn khoảng 250.
Những câu hỏi của tôi --
a. Có vẻ như tôi đang max máy chủ này chưa? Là tập tin tĩnh nginx hiệu suất 1.200 / s có thể so sánh với những gì người khác đã trải nghiệm?
b. Có điều chỉnh nginx phổ biến cho các ứng dụng khối lượng lớn như vậy? Tôi có các luồng công nhân được đặt thành 64 và các luồng công nhân gunicorn được đặt thành 8, nhưng điều chỉnh các giá trị này dường như không giúp ích hay làm hại tôi nhiều.
c. Có bất kỳ cài đặt cấp độ linux nào có thể giới hạn các kết nối đến của tôi không?
d. Điều gì có thể khiến hiệu suất của tôi giảm xuống 250r / giây trong các bài kiểm tra dài hạn? Một lần nữa, bộ nhớ không được tiết kiệm tối đa trong các thử nghiệm này và việc sử dụng ổ cứng là không.
Cảm ơn trước, tất cả :)
EDIT Đây là cấu hình nginx của tôi - http://pastie.org/1450749 - nó chủ yếu là vani, với chất béo rõ ràng được cắt bỏ.