Hãy thực hiện cách tiếp cận thực dụng.
Tất cả những giới hạn này là những thứ được mã hóa cứng và được thiết kế trong thế kỷ qua khi phần cứng chậm và đắt tiền. Bây giờ chúng ta đang ở trong năm 2016, một máy nướng bánh mì trung bình có thể xử lý nhiều yêu cầu hơn các giá trị mặc định.
Các thiết lập mặc định thực sự nguy hiểm. Có hàng trăm người dùng trên một trang web là không có gì ấn tượng.
worker_ process
Một cài đặt liên quan, hãy giải thích nó trong khi chúng ta đang ở trong chủ đề.
nginx là bộ cân bằng tải:
- 1 công nhân để cân bằng tải HTTP.
- 1 công nhân trên mỗi lõi để cân bằng tải HTTPS.
nginx là máy chủ web:
Điều này là khó khăn.
Một số ứng dụng / khung / phần mềm trung gian (ví dụ: php-fpm) được chạy bên ngoài nginx. Trong trường hợp đó, 1 nginx worker là đủ vì thường là ứng dụng bên ngoài đang xử lý nặng và ăn tài nguyên.
Ngoài ra, một số ứng dụng / khung / phần mềm trung gian chỉ có thể xử lý một yêu cầu tại một thời điểm và nó đang phản tác dụng để quá tải chúng.
Nói chung, 1 công nhân luôn là một đặt cược an toàn.
Mặt khác, bạn có thể đặt một nhân viên cho mỗi lõi nếu bạn biết bạn đang làm gì. Tôi coi tuyến đường đó là một tối ưu hóa và tư vấn kiểm tra và đo điểm chuẩn phù hợp.
worker_connections
Tổng số lượng kết nối là worker_process * worker_connections
. Một nửa trong chế độ cân bằng tải.
Bây giờ chúng ta đang đến phần máy nướng bánh mì. Có nhiều giới hạn hệ thống bị đánh giá thấp nghiêm trọng:
- ulimits là 1k tệp mở tối đa cho mỗi quá trình trên linux (mềm 1k, cứng 4k trên một số bản phân phối)
- giới hạn systemd là tương tự như ulimits.
- nginx mặc định là 512 kết nối cho mỗi công nhân.
- Có thể có nhiều hơn: SELinux, sysctl, giám sát (mỗi phiên bản + phiên bản hơi khác nhau)
1k worker_connections
Mặc định an toàn là đặt 1k ở mọi nơi.
Nó đủ cao để có nhiều hơn hầu hết các trang web nội bộ và chưa biết sẽ gặp phải. Nó đủ thấp để không đạt bất kỳ giới hạn hệ thống nào khác.
10k worker_connections
Rất phổ biến khi có hàng ngàn khách hàng, đặc biệt là đối với một trang web công cộng. Tôi đã ngừng đếm số lượng trang web tôi thấy đã ngừng hoạt động vì giá trị mặc định thấp.
Mức tối thiểu chấp nhận được cho sản xuất là 10k. Giới hạn hệ thống liên quan phải được tăng lên để cho phép nó.
Không có thứ gọi là giới hạn quá cao (giới hạn đơn giản là không có hiệu lực nếu không có người dùng). Tuy nhiên, giới hạn quá thấp là một điều rất thực tế dẫn đến việc người dùng bị từ chối và một trang web chết.
Hơn 10k
10k là tốt và dễ dàng.
Chúng tôi có thể đặt giới hạn 1000kk tùy ý (rốt cuộc chỉ là giới hạn) nhưng điều đó không có ý nghĩa thực tế nhiều, chúng tôi không bao giờ có lưu lượng truy cập đó và dù sao cũng không thể thực hiện được.
Hãy giữ 10k như một thiết lập hợp lý. Các dịch vụ sẽ (và thực sự có thể làm) nhiều hơn sẽ yêu cầu điều chỉnh và điểm chuẩn đặc biệt.
Kịch bản đặc biệt: Sử dụng nâng cao
Đôi khi, chúng tôi biết rằng máy chủ không có nhiều tài nguyên và chúng tôi mong đợi các đột biến mà chúng tôi không thể làm được gì nhiều. Chúng tôi thà từ chối người dùng hơn là thử. Trong trường hợp đó, đặt giới hạn kết nối hợp lý và định cấu hình các thông báo lỗi và xử lý.
Đôi khi, các máy chủ phụ trợ đang hoạt động tốt và tốt nhưng chỉ lên đến một số tải , bất cứ điều gì nhiều hơn và mọi thứ đi về phía nam một cách nhanh chóng. Chúng tôi thà làm chậm hơn là máy chủ gặp sự cố. Trong trường hợp đó, hãy định cấu hình xếp hàng với các giới hạn nghiêm ngặt, hãy để nginx đệm tất cả nhiệt trong khi các yêu cầu đang được rút hết ở tốc độ giới hạn.