Trong bất kỳ cài đặt mặc định nào, Apache 2 đều tắt keepAlive, nhưng nhìn vào một máy chủ khác, mô-đun keepAlive đã được bật.
Vì vậy, làm thế nào để tôi biết nếu keepAlive phù hợp với tôi? Tôi có thể tìm thấy một số ví dụ tốt về cấu hình này ở đâu?
Trong bất kỳ cài đặt mặc định nào, Apache 2 đều tắt keepAlive, nhưng nhìn vào một máy chủ khác, mô-đun keepAlive đã được bật.
Vì vậy, làm thế nào để tôi biết nếu keepAlive phù hợp với tôi? Tôi có thể tìm thấy một số ví dụ tốt về cấu hình này ở đâu?
Câu trả lời:
Đã có 2 câu trả lời hay, nhưng vấn đề thực tế có lẽ quan trọng nhất vẫn chưa được đề cập.
Trước hết, OP có thể muốn đọc 2 câu trả lời trước và bài đăng trên blog nhỏ này để hiểu những gì cần lưu ý. (Tác giả không nói chi tiết về TCPI / IP "càng nhanh" kết nối mở càng lâu. Đúng là các kết nối lâu dài được hưởng lợi từ việc mở rộng cửa sổ IP , nhưng hiệu quả không đáng kể trừ khi các tệp là lớn, hoặc sản phẩm có độ trễ băng thông lớn bất thường.)
Đối số lớn chống lại HTTP Keepalive khi sử dụng Apache là nó chặn các quy trình Apache. Tức là một khách hàng sử dụng thủ tục sẽ ngăn quá trình Apache của anh ta phục vụ bất kỳ khách hàng nào khác, cho đến khi khách hàng đóng kết nối hoặc hết thời gian chờ. Trong cùng một khoảng thời gian, cá thể Apache này có thể đã phục vụ nhiều kết nối khác.
Bây giờ, một cấu hình Apache rất phổ biến là MPM Prefork và trình thông dịch PHP / Perl / Python và mã ứng dụng trong ngôn ngữ được đề cập. Trong trường hợp này, mỗi quy trình Apache là "nặng" theo nghĩa là nó chiếm vài megabyte RAM (Apache được liên kết với trình thông dịch và mã ứng dụng). Điều này, cùng với việc chặn từng cá thể Apache được giữ lại, là không hiệu quả.
Một cách giải quyết chung là sử dụng 2 máy chủ Apache (cả hai trên cùng một máy chủ vật lý hoặc trên 2 máy chủ, nếu cần) với các cấu hình khác nhau:
Sau đó, bạn có thể mở rộng phân tách nội dung động và tĩnh này khi cần , ví dụ:
Một cách tiếp cận khác liên quan đến việc tránh chặn Apache là sử dụng bộ cân bằng tải với xử lý kết nối thông minh hơn, chẳng hạn như Perlbal .
.. và nhiều hơn nữa. :-)
Keepalives có thể tốt trong một số trường hợp, họ có thể rất xấu ở những người khác. Chúng làm giảm thời gian và nỗ lực thiết lập kết nối mới, nhưng chúng liên kết tài nguyên máy chủ trong suốt thời gian chờ. Ví dụ:
Như bạn có thể thấy, KeepAliveTimeout cũng sẽ đóng một vai trò lớn trong việc tối ưu hóa hiệu suất máy chủ của bạn.
Nhìn vào mô hình sử dụng của bạn và quyết định cho chính mình.
Bạn chắc chắn nên sử dụng KeepAlive On.
Xem:
http://httpd.apache.org/docs/2.0/mod/core.html#keepalive
Bằng cách đó, một kết nối TCP sẽ được trình duyệt sử dụng lại để gửi nhiều truy vấn. Thông thường một trang web có nhiều thành phần (trang HTML, mã javascript, hình ảnh). Miễn là các tài nguyên này nằm trong cùng một miền, do đó có thể được phục vụ bởi cùng một máy chủ, kết nối KeepAlive giúp tăng hiệu suất rất lớn do trình duyệt sẽ không phải thiết lập kết nối TCP mới.
Một trình duyệt thường mở khoảng 3 kết nối song song với một miền. Vì vậy, hãy nói rằng bạn có 18 đối tượng trong trang web của bạn. Trình duyệt sẽ mở 3 kết nối và nó sẽ tải xuống 6 đối tượng trong mỗi kết nối - sử dụng chế độ KeepAlive. Nếu không có KeepAlive, nó sẽ phải mở 18 kết nối TCP, rất chậm.
Hầu hết, hoặc tất cả các trình duyệt hiện đại đều tuân thủ HTTP / 1.1 vì vậy điều này sẽ chỉ hoạt động.
Một số proxy HTTP nhất định như Squid không tuân thủ HTTP / 1.1, nhưng dù sao họ cũng yêu cầu sử dụng kết nối KeepAlive.