2013-06-06 36 views
20

Máy chủ web xử lý nhiều yêu cầu gửi đến cùng một lúc trên một cổng (80) như thế nào?Làm thế nào một máy chủ web có thể xử lý nhiều yêu cầu gửi đến của người dùng cùng một lúc trên một cổng (80)?

Ví dụ: Đồng thời 300k người dùng muốn xem hình ảnh từ www.abcdef.com được gán IP 10.10.100.100 và cổng 80. Vậy làm cách nào để www.abcdef.com xử lý tải của người dùng này?

Có thể một máy chủ (được gán với IP 10.10.100.100) xử lý số lượng người dùng đến lớn này không? Nếu không, thì làm thế nào một địa chỉ IP có thể được gán cho nhiều hơn một máy chủ để xử lý tải này?

Trả lời

10

Từ tcpipguide

xác định này của các kết nối sử dụng cả hai ổ cắm máy chủ của khách hàng và là những gì cung cấp sự linh hoạt trong việc cho phép nhiều kết nối giữa các thiết bị mà chúng tôi đưa cho các cấp trên Internet. Ví dụ, các quá trình máy chủ ứng dụng bận (chẳng hạn như các máy chủ Web) phải có khả năng xử lý các kết nối từ nhiều hơn một máy khách, hoặc World Wide Web sẽ là khá nhiều không sử dụng được. Kể từ khi kết nối được xác định bằng cách sử dụng ổ cắm của khách hàng cũng như của máy chủ, điều này là không có vấn đề. Đồng thời máy chủ Web duy trì kết nối được đề cập ở trên, nó có thể dễ dàng có kết nối khác để nói, cổng 2.199 tại địa chỉ IP 219.31.0.44. Này được thể hiện bởi các định danh kết nối:

(41.199.222.3:80, 219.31.0.44:2199). 

Trong thực tế, chúng ta có thể có nhiều kết nối từ cùng một khách hàng để cùng một máy chủ. Mỗi quá trình khách hàng sẽ được gán một số cổng tạm thời khác nhau, vì vậy ngay cả khi tất cả chúng đều cố gắng truy cập cùng một quy trình máy chủ (chẳng hạn như quy trình máy chủ Web tại 41.199.222.3:80), tất cả chúng sẽ có một ổ cắm máy khách khác nhau và đại diện cho duy nhất kết nối. Đây là những gì cho phép bạn thực hiện một số yêu cầu đồng thời đến cùng một trang Web từ máy tính của bạn.

Một lần nữa, TCP theo dõi từng kết nối này một cách độc lập, vì vậy mỗi kết nối không biết các kết nối khác. TCP có thể xử lý hàng trăm hoặc thậm chí hàng nghìn kết nối đồng thời. Giới hạn duy nhất là dung lượng của máy tính chạy TCP, và băng thông của các kết nối vật lý với nó - càng có nhiều kết nối chạy cùng một lúc, thì càng có nhiều kết nối phải chia sẻ tài nguyên hạn chế.

+3

Trích dẫn chất lượng kém, hoàn toàn nhầm lẫn giữa ổ cắm và cổng. Các kết nối được xác định bởi địa chỉ IP và * cổng, * không phải bằng ổ cắm. – EJP

9

Cổng chỉ là số ma thuật. Nó không tương ứng với một phần cứng. Máy chủ sẽ mở một ổ cắm 'lắng nghe' tại cổng 80 và 'chấp nhận' các kết nối mới từ ổ cắm đó. Mỗi kết nối mới được đại diện bởi một ổ cắm mới có cổng cục bộ cũng là cổng 80, nhưng cổng ip: từ xa của nó giống như một máy khách kết nối. Vì vậy, họ không bị lẫn lộn. Do đó, bạn không cần nhiều địa chỉ IP hoặc thậm chí nhiều cổng ở cuối máy chủ.

+0

Đây cũng là câu trả lời hay khi kết hợp với câu trả lời thứ nhất. –

+0

@ManoharReddyPoreddy Tốt hơn, ở chỗ nó ít nhất không có sự nhầm lẫn mà tôi đã đề cập. – EJP

+0

Đồng ý, tuy nhiên nó có nhiều thông tin có liên quan quá, như "Giới hạn duy nhất là dung lượng của máy tính chạy TCP và băng thông của các kết nối vật lý với nó", vì vậy tôi sẽ đề nghị ai đó trả lời 1, và sau đó là câu trả lời đầu tiên là thứ 2. –

0

Câu trả lời là: host ảo, trong HTTP Header là tên của tên miền để web server biết được các file chạy hoặc gửi cho khách hàng

+1

Không có gì trong câu hỏi về nhiều tên miền. – EJP

2

TCP Đưa sóc nhận biết khách hàng
Như đang nói, TCP chăm sóc nhận dạng ứng dụng khách và máy chủ chỉ thấy "ổ cắm" trên mỗi máy khách.
Nói một máy chủ tại 10.10.100.100 lắng nghe cổng 80 cho các kết nối TCP đến (HTTP được xây dựng trên TCP). Trình duyệt của khách hàng (tại 10.9.8.7) kết nối với máy chủ bằng cổng khách hàng 27143. Máy chủ thấy: "máy khách 10.9.8.7:27143 muốn kết nối, bạn có chấp nhận không?". Ứng dụng máy chủ chấp nhận và được cấp "xử lý" (ổ cắm) để quản lý mọi giao tiếp với ứng dụng khách này và trình xử lý sẽ luôn gửi gói tới 10.9.8.7:27143 với tiêu đề TCP thích hợp.

gói không bao giờ đồng thời
Bây giờ, về thể chất, có nói chung là chỉ có một (hoặc hai) kết nối liên kết các máy chủ với internet, vì vậy các gói tin chỉ có thể đến theo thứ tự tuần tự. Câu hỏi trở thành: thông lượng tối đa thông qua sợi là bao nhiêu và máy tính có thể tính toán và trả lại bao nhiêu phản hồi. Khác với thời gian CPU bị mất hoặc tắc nghẽn bộ nhớ trong khi đáp ứng yêu cầu, máy chủ cũng phải giữ một số tài nguyên còn sống (ít nhất 1 ổ cắm hoạt động cho mỗi máy khách) cho đến khi kết nối được kết nối và do đó tiêu thụ RAM. Thông lượng đạt được thông qua một số tối ưu hóa (không loại trừ lẫn nhau): ổ cắm không chặn (để tránh độ trễ pipelining/socket), đa luồng (để sử dụng nhiều lõi CPU/luồng hơn).

Nâng cao yêu cầu thông lượng hơn nữa: cân bằng tải
Và cuối cùng, máy chủ vào "front-side" của các trang web thường không làm tất cả công việc của mình (đặc biệt là những thứ phức tạp hơn, như cơ sở dữ liệu truy vấn, tính toán vv), và trì hoãn nhiệm vụ hoặc thậm chí chuyển tiếp các yêu cầu HTTP đến các máy chủ phân tán, trong khi chúng tiếp tục xử lý tầm thường (ví dụ như chuyển tiếp) càng nhiều yêu cầu mỗi giây càng tốt. Phân phối công việc trên một số máy chủ được gọi là cân bằng tải.

Các vấn đề liên quan