Xin chào vì tôi là tác giả của trích dẫn này, tôi sẽ trả lời :-)
Có hai vấn đề lớn trên các trang web lớn: kết nối đồng thời và độ trễ. Kết nối đồng thời là do các máy khách chậm mất nhiều thời gian để tải xuống nội dung và do trạng thái kết nối không hoạt động. Các trạng thái kết nối không hoạt động đó là do việc sử dụng lại kết nối để tìm nạp nhiều đối tượng, được gọi là giữ nguyên, còn tăng thêm do độ trễ. Khi máy khách ở rất gần máy chủ, nó có thể sử dụng kết nối chuyên sâu và đảm bảo nó hầu như không bao giờ ở chế độ rỗi. Tuy nhiên, khi trình tự kết thúc, không ai quan tâm đến việc nhanh chóng đóng kênh và kết nối vẫn mở và không được sử dụng trong một thời gian dài. Đó là lý do tại sao nhiều người đề nghị sử dụng thời gian chờ duy trì hoạt động rất thấp. Trên một số máy chủ như Apache, thời gian chờ thấp nhất mà bạn có thể đặt là một giây và thường là quá nhiều để duy trì tải cao: nếu bạn có 20000 khách hàng ở phía trước và họ tìm nạp trung bình một đối tượng mỗi giây, bạn sẽ có 20000 kết nối đó được thiết lập vĩnh viễn. 20000 kết nối đồng thời trên một máy chủ mục đích chung như Apache là rất lớn, sẽ yêu cầu từ 32 đến 64 GB RAM tùy thuộc vào những gì mô-đun được tải và bạn có thể không hy vọng tăng cao hơn nhiều ngay cả bằng cách thêm RAM. Trên thực tế, đối với 20000 máy khách, bạn thậm chí có thể thấy 40000 đến 60000 kết nối đồng thời trên máy chủ vì trình duyệt sẽ cố gắng thiết lập 2 đến 3 kết nối nếu chúng có nhiều đối tượng để tìm nạp. và bạn có thể không hy vọng sẽ tăng cao hơn nhiều ngay cả khi thêm RAM. Trên thực tế, đối với 20000 máy khách, bạn thậm chí có thể thấy 40000 đến 60000 kết nối đồng thời trên máy chủ vì trình duyệt sẽ cố gắng thiết lập 2 đến 3 kết nối nếu chúng có nhiều đối tượng cần tìm nạp. và bạn có thể không hy vọng sẽ tăng cao hơn nhiều ngay cả khi thêm RAM. Trên thực tế, đối với 20000 máy khách, bạn thậm chí có thể thấy 40000 đến 60000 kết nối đồng thời trên máy chủ vì trình duyệt sẽ cố gắng thiết lập 2 đến 3 kết nối nếu chúng có nhiều đối tượng để tìm nạp.
Nếu bạn đóng kết nối sau mỗi đối tượng, số lượng kết nối đồng thời sẽ giảm đáng kể. Thật vậy, nó sẽ giảm theo một hệ số tương ứng với thời gian trung bình để tải một đối tượng theo thời gian giữa các đối tượng. Nếu bạn cần 50 mili giây để tải xuống một đối tượng (ảnh thu nhỏ, một nút, v.v.) và bạn tải xuống trung bình 1 đối tượng mỗi giây như trên, thì bạn sẽ chỉ có 0,05 kết nối cho mỗi máy khách, tức là chỉ 1000 kết nối đồng thời cho 20000 máy khách.
Bây giờ thời gian để thiết lập các kết nối mới sẽ được đếm. Khách hàng ở xa sẽ gặp phải độ trễ khó chịu. Trước đây, các trình duyệt thường sử dụng một lượng lớn các kết nối đồng thời khi tính năng giữ mạng bị vô hiệu hóa. Tôi nhớ con số 4 trên MSIE và 8 trên Netscape. Điều này thực sự sẽ chia độ trễ trung bình trên mỗi đối tượng cho bấy nhiêu. Giờ đây, tính năng duy trì tồn tại ở khắp mọi nơi, chúng tôi không còn thấy con số cao đó nữa, bởi vì làm như vậy sẽ làm tăng thêm tải trên các máy chủ từ xa và các trình duyệt sẽ chăm sóc bảo vệ cơ sở hạ tầng của Internet.
Điều này có nghĩa là với các trình duyệt ngày nay, khó có thể khiến các dịch vụ không tồn tại đáp ứng nhiều như các dịch vụ còn tồn tại. Ngoài ra, một số trình duyệt (ví dụ: Opera) sử dụng heuristics để cố gắng sử dụng pipelinining. Pipelining là một cách hiệu quả để sử dụng giữ nguyên, vì nó gần như loại bỏ độ trễ bằng cách gửi nhiều yêu cầu mà không cần đợi phản hồi. Tôi đã thử nó trên một trang có 100 bức ảnh nhỏ và lần truy cập đầu tiên nhanh hơn khoảng gấp đôi so với khi không giữ mạng, nhưng lần truy cập tiếp theo nhanh hơn khoảng 8 lần, bởi vì phản hồi rất nhỏ nên chỉ tính độ trễ (chỉ "304" phản hồi).
Tôi muốn nói rằng lý tưởng nhất là chúng ta nên có một số điều chỉnh trong trình duyệt để làm cho chúng giữ cho các kết nối tồn tại giữa các đối tượng được tìm nạp và ngay lập tức loại bỏ nó khi trang hoàn tất. Nhưng chúng tôi không thấy điều đó đáng tiếc.
Vì lý do này, một số trang web cần cài đặt các máy chủ có mục đích chung như Apache ở mặt trước và các trang web phải hỗ trợ một lượng lớn khách hàng thường phải tắt tính năng giữ mạng. Và để buộc các trình duyệt tăng số lượng kết nối, họ sử dụng nhiều tên miền để có thể tải song song các bản tải xuống. Nó đặc biệt có vấn đề trên các trang web sử dụng nhiều SSL vì thiết lập kết nối thậm chí còn cao hơn vì có thêm một chuyến khứ hồi.
Điều thường được quan sát hiện nay là các trang web như vậy thích cài đặt các giao diện người dùng nhẹ như haproxy hoặc nginx, không có vấn đề gì khi xử lý hàng chục đến hàng trăm nghìn kết nối đồng thời, chúng cho phép duy trì hoạt động ở phía máy khách và tắt nó trên Bên Apache. Ở khía cạnh này, chi phí thiết lập kết nối gần như vô hiệu về mặt CPU và không đáng kể về mặt thời gian. Bằng cách đó, điều này mang lại lợi ích tốt nhất của cả hai thế giới: độ trễ thấp do vẫn tồn tại với thời gian chờ rất thấp ở phía máy khách và số lượng kết nối thấp ở phía máy chủ. Mọi người đều vui vẻ :-)
Một số sản phẩm thương mại cải thiện hơn nữa điều này bằng cách sử dụng lại các kết nối giữa bộ cân bằng tải phía trước và máy chủ và ghép tất cả các kết nối máy khách qua chúng. Khi các máy chủ gần LB, mức tăng không cao hơn nhiều so với giải pháp trước đó, nhưng nó thường sẽ yêu cầu sự điều chỉnh trên ứng dụng để đảm bảo không có nguy cơ chuyển phiên giữa những người dùng do việc chia sẻ kết nối không mong muốn giữa nhiều người dùng . Về lý thuyết, điều này không bao giờ nên xảy ra. Thực tế khác nhiều :-)