Tôi đang làm việc trên một dịch vụ mới để chạy QA cho nhiều thuộc tính web của công ty chúng tôi và đã gặp sự cố đồng thời về mạng thú vị. Để tăng hiệu suất, tôi đang sử dụng TPL để tạo HttpWebRequests dựa trên một bộ sưu tập lớn các url để chúng có thể chạy song song; tuy nhiên, tôi dường như không thể tìm ra nơi nút cổ chai đang trong quá trình này.Các vấn đề về hiệu suất yêu cầu web đồng thời
quan sát của tôi cho đến nay:
- tôi có thể nhận được một tối đa khoảng 25-30 đề song song qua TPL
- CPU không bao giờ phá vỡ 5-6% cho các dịch vụ (chạy trên 1-4 lõi, có và không có H/T)
- Sử dụng NIC không bao giờ ngắt 2-3%
- Lưu lượng truy cập mạng dường như không bị ảnh hưởng (người dùng khác không phàn nàn, kiểm tra tốc độ chạy cùng lúc don ' t hiển thị nhiều ảnh hưởng)
- Tốc độ không thay đổi nhiều giữa chạy trên mạng văn phòng của chúng tôi (15Mbps) hoặc trung tâm dữ liệu của chúng tôi (100 Mbps)
- Tôi nhận được một chút hiệu suất bằng cách tải xuống từ nhiều máy chủ cùng một lúc thay vì nhiều trang từ một máy chủ.
điểm đau có thể xảy ra:
- CPU (số lượng lõi hoặc đề phần cứng)
- NIC
- Max phép số HttpWebRequests đồng thời
- LAN
- WAN
- Router/Bộ chuyển đổi/Cân bằng tải
Vì vậy, câu hỏi là:
Rõ ràng hiện nay là cách để tải về toàn bộ Internet chỉ trong vài phút, nhưng tôi quan tâm để biết nơi mà các nút cổ chai là trong một kịch bản như thế này và những gì, nếu bất cứ điều gì, có thể được thực hiện để vượt qua nó.
Lưu ý phụ, chúng tôi hiện đang sử dụng dịch vụ của bên thứ ba để thu thập dữ liệu, nhưng chúng tôi bị giới hạn bởi một số cách và muốn linh hoạt hơn. Một cái gì đó về nước sốt bí mật của công ty hoặc poison on the tip of the arrow ... :)
Bạn có thể đăng một vài chi tiết về mã của mình không? Tôi đang chạy trình thu thập thông tin với 100 luồng song song không có vấn đề gì. Tôi đang trên .NET 4 và máy chủ không có gì nhiều. Tôi đang sử dụng NCrawler trong phần phụ trợ. –
Mã thực sự rất đơn giản. Tôi sử dụng Parallel.ForEach để lặp qua một tập hợp các URL (chuỗi). Hành động tạo ra một HttpWebRequest và sau đó đổ kết quả vào một ConcurrentBag. BTW, NCrawler có vẻ thú vị; Tôi sẽ kiểm tra. Cảm ơn vì tiền hỗ trợ. –
Có giới hạn về số lượng HttpWebRequest đồng thời cho cùng một máy chủ IIRC –