2009-01-12 35 views
12

Điều này có thể là một chút của một câu hỏi ngớ ngẩn nhưng;Là ASP.NET đa luồng (làm thế nào để nó thực hiện yêu cầu)

Nếu tôi có hai người đăng nhập vào trang web của mình cùng một lúc, mã phía máy chủ có được thực hiện sau lần khác hoặc chúng sẽ được thực thi đồng thời trong các chuỗi riêng biệt không?

Tôi tò mò về tấn công từ chối dịch vụ đối với thông tin đăng nhập trang web. Liệu máy chủ có bị chậm lại vì nó có hàng đợi đăng nhập lớn hay không vì nó có một tỷ lần đăng nhập đồng thời!

Trả lời

13

này không liên quan đến ASP.NET cho mỗi gia nhập (Tôi có rất ít kiến ​​thức trong đó khu vực), nhưng thường là các máy chủ web. Hầu hết các máy chủ web đều sử dụng các luồng (hoặc các quy trình) để xử lý các yêu cầu, vì vậy về cơ bản, bất kỳ đoạn mã nào bạn có sẽ được thực hiện cho cả hai kết nối song song. Tất nhiên, nếu bạn truy cập cơ sở dữ liệu hoặc một số hệ thống phụ trợ khác, nơi khóa được đặt, cho phép chỉ một phiên để thực hiện truy vấn, bạn có thể đã ngầm tuần tự hóa tất cả các yêu cầu.

Máy chủ web thường có số lượng nhân viên tối thiểu và tối đa, được điều chỉnh theo phần cứng hiện tại (CPU, bộ nhớ, v.v.). Nếu chúng bị cạn kiệt, các yêu cầu mới sẽ được xếp hàng chờ đợi một nhân viên sẵn sàng, hoặc cho đến khi độ dài hàng đợi tối đa của các yêu cầu đang chờ xử lý đạt tới thời điểm nó bỏ qua các kết nối mới, từ chối dịch vụ một cách hiệu quả. từ chối dịch vụ hoặc tấn công DoS).

Vì vậy, trong điều kiện của bạn, đó là một sự kết hợp, đó là một số lượng lớn các yêu cầu đồng thời lấp đầy hàng đợi.

+0

Có số lượng yêu cầu tối đa có thể được xử lý không? Liệu tối đa đó có bao gồm nhiều trang web được lưu trữ trên cùng một máy chủ không? Ví dụ: nếu máy chủ web có thể xử lý 5000 yêu cầu và có hai trang web được lưu trữ trên máy chủ đó, điều này có nghĩa là 5000 yêu cầu của nó trên cả hai trang web? –

2

Nên sử dụng hồ bơi chuỗi. Lưu ý rằng chúng vẫn còn trong cùng một ứng dụng, vì vậy các mục mức ứng dụng như biến tĩnh vẫn được chia sẻ giữa chúng.

1

từ this article

"Ghi ISAPI là đa luồng có yêu cầu sẽ đến ở trên nhiều chủ đề qua tài liệu tham khảo đã được trả về bởi ApplicationDomainFactory.Create(). Ví dụ 1 cho thấy mã tháo rời từ phương thức IsapiRuntime.ProcessRequest nhận đối tượng ecb ISAPI và kiểu máy chủ làm tham số. Phương thức này là luồng an toàn, vì vậy nhiều luồng ISAPI có thể gọi một đối tượng này một cách an toàn cùng một lúc. "

Vì vậy, có, trong trường hợp của một cuộc tấn công DOS, nó sẽ là chậm vì số lượng lớn các kết nối

1

Như những người khác đã nói, hầu hết các máy chủ web sử dụng nhiều quy trình hoặc luồng (tốt hơn) để phục vụ nhiều yêu cầu cùng một lúc. Đặc biệt, bạn có thể thiết lập từng ứng dụng ASP.NET với một số lượng tối đa các yêu cầu được xếp hàng đợi và các quy trình nhân viên tối đa. Mỗi quá trình có nhiều chủ đề tối đa (không thể cấu hình AFAIK, tôi có thể sai) và các yêu cầu gửi đến được xử lý trên cơ sở đầu tiên.

Hơn nữa, ASP.NET xử lý một yêu cầu duy nhất cho mỗi phiên - nhưng người dùng độc hại có thể mở bao nhiêu phiên tùy thích.

Nhiều thông tin đăng nhập có thể sẽ nhấn vào cơ sở dữ liệu và đưa nó vào đầu gối có thể trước chính máy chủ web.

Theo như tôi biết, không có cách tích hợp để điều tiết các yêu cầu ASP.NET khác ngoài việc đặt số yêu cầu tối đa được chờ đợi (chờ xử lý). Con số này lý tưởng là rất nhỏ. Bạn có thể theo dõi số lượng xếp hàng ASP.NET yêu cầu bằng cách sử dụng quầy hiệu suất. Giả sử bạn thấy rằng, trên lưu lượng cao nhất, con số này là 100. Sau đó bạn có thể cập nhật ứng dụng để từ chối các lần đăng nhập khi số này vượt quá 100 để cơ sở dữ liệu không bị trúng (không bao giờ làm điều đó, chỉ là suy nghĩ).

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