2012-03-20 22 views
15

Tôi đang viết API Hiệu suất cao ASP.NET Json với sớm> 1000 Yêu cầu/Thứ hai. Tất cả logic và xử lý của tôi được thực hiện trong IHttpHandler. Tôi đo qua Lớp Đồng hồ bấm giờ và bộ xử lý kết thúc một yêu cầu trong khoảng 0,1 - 0,5 Mili giây.Hiệu suất cao Trang web ASP.NET (> 1000 Yêu cầu/Thứ hai)

Nhưng có vẻ như IIS và/hoặc HTTPHandlers khác (Mô-đun?) Đang lấy đi rất nhiều hiệu suất. Tôi có thể đo bằng cách nào đó không? Bao nhiêu chi phí sẽ là một yêu cầu sản xuất trong IIS khi được cấu hình cho hiệu năng tốt nhất?

Xóa tất cả các trợ giúp HTTPHandlers đó hay có các thủ thuật khác để tăng tốc nó? Tôi không cần nhiều ASP.NET Featureset ngoài Session (thậm chí có thể workaround rằng nếu nó cung cấp cho một tăng hiệu suất đáng kể).

+1

vì nó 'nguyên bản' không đồng bộ và có thể tự lưu trữ (vì vậy bạn có thể tránh chạy trong IIS), có vẻ như đáng xem xét ASP.NET Web API (được xây dựng trong MVC4) có sẵn độc lập). Tôi đã học được một chút về nó từ blog của Henrik @ http://blogs.msdn.com/b/henrikn/ –

+2

FWIW, sự phân biệt của câu hỏi là một chút kỳ quặc đối với tôi trong khi nó dường như kết hợp độ trễ/băng thông (để sử dụng các điều khoản mạng).Độ trễ để phục vụ một yêu cầu cụ thể dường như không quan trọng (ngoài kinh nghiệm người dùng cuối, nhưng trực giao với khả năng mở rộng) liên quan đến khả năng phục vụ chúng hiệu quả và đồng thời. IOW, nếu mọi yêu cầu mất 1000ms để phục vụ, nhưng bạn có thể phục vụ 2000 tại một thời điểm, bạn vẫn sẽ ổn với điều đó, đúng không? –

+0

Không chắc chắn số tiền sẽ áp dụng cho API bạn đang tạo, nhưng nếu có bất kỳ thứ gì có thể lưu vào bộ nhớ cache, hãy đảm bảo làm như vậy. Và nếu bạn có thể ở trạng thái không quốc tịch, bạn có thể sử dụng ARR và mở rộng quy mô nếu cần. –

Trả lời

9

Đo hiệu suất của máy chủ web không phải là nhiệm vụ tầm thường. Một số điều cần xem xét:

  • Tìm nút cổ chai thực tế. Điều này có thể là bộ nhớ, truy cập đĩa, bộ nhớ đệm, truy cập cơ sở dữ liệu, độ trễ của mạng vv. Sử dụng trình thu thập bộ nhớ hoặc performance profiler khác để tìm hiểu.
  • Sử dụng WireShark để tìm sự khác biệt giữa thời gian yêu cầu trên máy của bạn và thời gian chạy mã của bạn.
  • Hãy thử các cấu hình khác. Cung cấp cho ASP.NET nhiều bộ nhớ hơn. Nâng cấp hệ thống kiểm tra. Tức là, đi từ 8GB/2.5GHz với 600 yêu cầu/giây đến 16GB/3.0GHz có thể mang lại 6500 yêu cầu/giây. Tốc độ tăng trưởng hiệu suất thường không tuyến tính. Xem this document from Microsoft.
  • Cân nhắc thêm máy phụ. Điều này có thể mang lại hiệu suất nâng cấp lên đến 50 hoặc thậm chí cao hơn tùy thuộc vào cách bạn định cấu hình nó. Xem lại tài liệu đó từ MS.
  • Kiểm tra these hints by Jon Skeet. Luồng nhận xét cho thấy một số tắc nghẽn tiềm ẩn không rõ ràng là tốt.

LƯU Ý 1: biết các công cụ của bạn. ASP.NET chạy mỗi yêu cầu trong chủ đề của riêng nó. Trao đổi chủ đề nhanh hơn so với quá trình hoán đổi, nhưng nó vẫn đòi hỏi thời gian. Nếu các trình xử lý khác mất thời gian vì chúng nằm trong chuỗi yêu cầu, nó có lợi để vô hiệu hóa chúng.

CHÚ Ý 2: một trong những mục tiêu bên gốc của stackoverflow là tạo một trang web trong ASP.NET có hiệu suất tuyệt vời trên tối đa 2 máy chủ và có thể xử lý> 1Mln khách truy cập mỗi giờ. Họ quản lý để làm điều đó. Tôi tin rằng họ đã viết một số bài đăng trên blog, nhưng tôi không nhớ chúng ở đâu.

5

Đây là một câu hỏi rất hay. Tôi đã nhận thấy cùng một khi bạn nhận được vào khoảng thời gian phản ứng một phần nghìn giây, ASP.NET trên không bắt đầu đáng chú ý. Tôi có thể xác nhận sự quan sát của bạn.

Những gì tôi đã thực hiện thành công là tìm ra, HttpModules nào được đăng ký (sử dụng IIS Manager) và vô hiệu hóa tất cả chúng mà tôi có thể loại bỏ. Tiêu chuẩn ASP.NET đường ống có rất nhiều mô-đun và chức năng cấu hình.

Nếu bạn cần hiệu suất tối ưu, bạn có thể sử dụng một thư viện máy chủ HTTP nhỏ và loại bỏ hầu như toàn bộ phí tổn theo cách đó. Điều này sẽ cực kỳ nhanh.

+0

Trên thực tế, nó không phải là một quy tắc vàng mà một máy chủ _tiny_ có thể phục vụ nhiều yêu cầu hơn một máy chủ HTTP lớn. Điều ngược lại là phổ biến hơn. – Abel

+1

Đây không phải là nhỏ và lớn. Đó là về số lượng mã chạy theo yêu cầu. Chúng ta có thể nói từ độ trễ OP cho biết có rất nhiều mã đang chạy. Không chỉ phân tích cú pháp tiêu đề HTTP và sử dụng ổ cắm. – usr

+1

đồng ý với việc xóa mô-đun đã bật. Bật theo dõi sự kiện không thành công (đối với phản hồi 100-999) và xem tất cả các mô-đun được gọi. Sau đó loại bỏ tất cả các mô-đun bạn không cần. - Tôi không đồng ý với ý tưởng máy chủ nhỏ bé (nhưng tôi đã upvoted bạn anyway :)) – RickAndMSFT

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