Tăng hiệu suất cho ASP.NET: 9 loại công cụ bạn cần biết!
Một trong những điều tốt nhất đối với một lập trình viên .NET đó là tất cả các development tool (công cụ phát triển) tuyệt vời có thể giúp mọi thứ trở nên dễ dàng hơn. Bài này liệt kê danh sách các tool của ASP.NET giúp tối ưu hóa các vấn đề về hiệu suất của ASP.NET. Tùy thuộc vào mục ...
Một trong những điều tốt nhất đối với một lập trình viên .NET đó là tất cả các development tool (công cụ phát triển) tuyệt vời có thể giúp mọi thứ trở nên dễ dàng hơn. Bài này liệt kê danh sách các tool của ASP.NET giúp tối ưu hóa các vấn đề về hiệu suất của ASP.NET. Tùy thuộc vào mục đích khác nhau, hãy lựa chọn tool phù hợp nhất.
Các Tool cải thiện hiệu năng cho .NET và ASP.NET
1. .NET Code Profilers
Nếu bạn đang cố gắng cải thiện hiệu suất từng dòng code một, thì một code profiler tốt sẽ giúp đỡ bạn nhiều. Chúng là lựa chọn tuyệt vời khi bạn có một console app và muốn chạy một method cụ thể khoảng 1.000 lần để tinh chỉnh hiệu năng CPU và memory usage. Chúng tuyệt vời không kém trong việc attached (đính kèm) Windows Services hiện tại hoặc app ASP.NET để tìm hot path trong code của bạn.
Ưu điểm: Phân tích rất sâu dựa theo method và code level. Có thể được sử dụng trên máy local của bạn và hỗ trợ profiling (hoàn thiện), debug từ xa. Cuối cùng chúng còn hữu ích để theo dõi các vấn đề về hiệu suất production.
Nhược điểm: Profiling method và code level thực sự có thể làm chậm ứng dụng của bạn trong khi các profiler đang chạy. Điều này không thực sự phù hợp để chạy trong quá trình production. Chúng không được thiết kế để theo dõi hiệu suất liên tục.
Các tool phổ biết: Visual Studio Performance Analyzer & Intellitrace, Red Gate ANTS, JetBrains dotTrace, Telerik JustTrace
2. ASP.NET Performance Profilers & Transaction Traces
Tôi không chắc nên sử dụng gì cho mục đích này, nhưng có một vài lựa chọn tuyệt vời để phân tích hiệu suất của các ứng dụng ASP.NET của bạn mà không cần toàn bộ code profiling. Các giải pháp này giúp nắm bắt chi tiết các transaction traces (dấu vết trao đổi) của mỗi web request ASP.NET. Glimpse và Miniprofiler hoạt động khác nhau nhưng về cơ bản đều giúp bạn có thể hiểu được một số chi tiết về hiệu suất của ứng dụng trong khi development (phát triển) hoặc production (sản xuất). Nhưng chỉ cho biết hiệu suất của request hiện tại bạn đang thực hiện, như ASP.NET profiling.
Prefix cung cấp chi tiết về hiệu suất ở mức deep (sâu nhất) về ứng dụng của bạn. Bao gồm tất cả các câu lệnh SQL, errors, logs, HTTP calls và các chi tiết từ hàng chục các framework khác.
Review về Prefix: Một ASP.NET profiler nhẹ giúp bạn viết phần mềm tốt hơn
Glimpse có thể cho bạn thấy rất nhiều chi tiết về web request đơn và cấu hình máy chủ của bạn.
Miniprofiler theo dõi các truy vấn database và có thể cung cấp thêm chi tiết nếu bạn thêm một số code trong ứng dụng dành cho các bước mà bạn muốn theo dõi.
Ưu điểm: Các công cụ này là tuyệt vời với các vấn đề cơ bản về hiệu suất của ASP.NET trong quá trình phát triển và test scenario. Có thể hữu ích trong sản xuất với hiệu suất hoạt động tối thiểu.
Nhược điểm: Chúng chỉ hiển thị chi tiết về request hiện tại của bạn mà bạn đang thực hiện. Vì vậy, bạn không thể khắc phục sự cố về hiệu suất của ASP.NET mà người dùng đang gặp phải trừ khi bạn mô phỏng lại các bước tương tự một cách chính xác. Chúng không được sử dụng để giám sát hiệu năng liên tục của toàn bộ ứng dụng như các giải pháp APM.
Các công cụ như Prefix có thể cung cấp những “dấu vết” rất chi tiết về code của bạn đang thực hiện:
3. .NET Application Performance Management (APM)
Công cụ quản lý hiệu suất ứng dụng (APM) tốt nhất so với hai loại trên. Chúng được thiết kế để làm nhẹ code profiling dựa trên web request đơn mà không ảnh hưởng đến hiệu suất các ứng dụng của bạn. Chúng có thể thu thập các chi tiết high-level mà bạn cần để xác định các vấn đề về hiệu suất chung và giám sát các ứng dụng của bạn không ngừng nhằm đảm bảo chúng luôn hoạt động bình thường. Theo dõi các ứng dụng .NET là dễ dàng hơn với một giải pháp APM tốt như Retrace.
Ưu điểm: Theo dõi hiệu suất hoạt động các ứng dụng của bạn. Xác định nhanh các web request bị chậm, truy vấn database, web services và nhiều hơn nữa. Thông thường có thể được sử dụng trên bất kỳ ứng dụng nào. Có thể hữu ích các QA để xác định các vấn đề về hiệu suất trước khi chúng ảnh hưởng đến sản phẩm.
Nhược điểm: Có thể rất tốn kém. Hầu hết không hỗ trợ async/await coding patterns mới. Một số sản phẩm không hoạt động với Azure Web Apps hoặc các cloud hosting scenarios khác. Nhiều công cụ có thể cung cấp một lượng thông tin quá mức cần thiết và khó sử dụng.
Các tool phổ biến: New Relic, Stackify Retrace, AppDynamics, Dynatrace, and others
Lưu ý: Một số giải pháp, bao gồm cả Stackify, cung cấp trải nghiệm miễn phí và có thể được sử dụng để giúp xác định các vấn đề ngay.
So sánh: Stackify Retrace vs New Relic, Retac nhanh chóng so với thông tin chi tiết về App
4. Giám sát người dùng thực
Hầu hết các ứng dụng ngày nay sử dụng rất nhiều javascript. Để theo dõi hiệu quả của việc người dùng tải xuống tất cả các javascript, css và hình ảnh cho trang web của bạn và render chúng mất bao lâu, bạn sẽ sử dụng các giải pháp theo dõi người dùng thực.
Hầu hết các giải pháp cho APM cũng cung cấp khả năng giám sát người dùng thực. Ngoài ra còn có nhiều giải pháp chỉ dành riêng để giám sát người dùng thực, bao gồm các giải pháp load balancer (cân bằng tải).
5. Windows Performance Counters
Microsoft cung cấp rất nhiều các giải pháp dành cho các ứng dụng CLR, ASP.NET, IIS và nhiều hơn nữa. Một số trong số những tính năng quan trọng nhất khi theo dõi hiệu suất là garbage collection (xử lý file rác), request queuing, memory usage, cpu usage, tỷ lệ xuất hiện lỗi HTTP và nhiều hơn nữa.
Ưu điểm: Được cài đặt sẵn trên Windows Server. Hầu hết các công cụ theo dõi server và app được thiết kế để thu thập và báo cáo.
Nhược điểm: Có thể khó liên kết phải liên tục thay đổi ID và tên của quy trình với ứng dụng của bạn. Không có trên Azure Web Apps. Đối với các ứng dụng trên nhiều máy chủ, bạn cần phải thu thập chúng từ mỗi máy chủ để so sánh hoặc tổng hợp điều đó có thể gây khó khăn.
6. Custom Metrics hoặc Key Performance Indicators (KPIs)
Một trong những cách tốt nhất để theo dõi hiệu suất ứng dụng của bạn là tạo ra số liệu ứng dụng tùy chỉnh của riêng bạn và theo dõi chúng. Nếu bạn muốn theo dõi chỉ số riêng của mình, bạn có thể tạo các Windows performance counters, sử dụng statsd hoặc những dịch vụ của bên thứ ba.
Ví dụ về cách bạn có thể sử dụng custom metrics, bằng Stackify chúng tôi sử dụng rất nhiều custom metrics để theo dõi những thứ như có bao nhiêu số liệu hoặc log messages đến vào mỗi phút. Chúng tôi cũng theo dõi thời gian cần để xử lý chúng ở mọi bước. Những loại số liệu này rất có giá trị cho việc giám sát ứng dụng và khắc phục sự cố.
Ưu điểm: Việc báo cáo các custom metrics cho giải pháp của bên thứ ba có thể đơn giản hơn là báo cáo chúng đến Windows performance counter.
Nhược điểm: Tốn nhiều thời gian.
Tùy chọn mã nguồn mở: statsd + graphite, Metrics.NET
Lưu ý: Nhiều sản phẩm giám sát ứng dụng có thể có thư viện hoặc API có sẵn để hỗ trợ các custom metrics. Kiểm tra xem các công cụ hiện tại của bạn có hỗ trợ không.
7. Web Server (IIS) Access Logs
Nếu bạn muốn theo dõi thời gian load request cụ thể, bạn có thể nhanh chóng mở hoặc theo IIS log files của mình. Bạn thậm chí có thể tổng hợp tất cả chúng, phân tích và yêu cầu họ xác định các request được sử dụng hàng đầu của bạn, các request chậm nhất … Làm việc này một mình sẽ rất phức tạp nếu bạn cố gắng theo dõi chúng. Bạn cũng có thể gửi tất cả các log của mình tới công cụ quản lý đăng nhập của bên thứ ba được thiết kế để giúp bạn tìm kiếm và mô phỏng tất cả logs của bạn.
Nếu bạn không có một giải pháp APM, việc phân tích các IIS logs của bạn là một cách để thực hiện theo dõi hiệu suất cơ bản của ASP.NET.
Ưu điểm: Nhanh chóng xem một file IIS logs dễ dàng. Visual Log Parser cung cấp một cách nhanh chóng để làm một số truy vấn cơ bản ngược lại logs.
Nhược điểm: Không cung cấp cho bạn bất kỳ chi tiết nào về request đã mất bao lâu. Thời gian mà các báo cáo IIS bao gồm network time (thời gian mạng) của khách hàng lâu hơn thời gian dành cho code của bạn. Nhiều ứng dụng hiện đang sử dụng định tuyến URL nâng cao khiến URL rất da dạng và khó báo cáo (URL rewriting, REST, WCF, v.v …).
Các tool phổ biến: Visual Log Parser, ELK stack, Stackify, Splunk hoặc những cái tương tự.
8. Truy tìm các Request không thành công trong ASP.NET
Một trong những tính năng của IIS ít được biết đến và sử dụng là truy tìm các request không thành công. Nó có thể được sử dụng để theo dõi nhiều chi tiết về IIS request đáp ứng các quy tắc nhất định mà bạn có thể cấu hình. Bạn có thể thiết lập chúng cho một số HTTP status code, time taken (thời gian thực hiện) hoặc mức độ nghiêm trọng của event.
Ưu điểm: Có thể được bật trên các production server bất kỳ lúc nào và tắt khi hoàn tất. Phù hợp để xác định xem vấn đề đang xảy ra ở đâu, tần suất và có thể một số chi tiết để xác định được tại sao. Giúp ích cho việc tìm kiếm các vấn đề với các HTTP module.
Nhược điểm: Output là các file XML khổng lồ đầy đủ của rất nhiều thông tin khó có thể giải mã. Yêu cầu hệ thống tập tin truy cập vào các production server để xem. Không xác định các vấn đề về hiệu suất của method hoặc code level như profiling làm.
9. Theo dõi những trường hợp ngoại lệ
Một trong những nguyên nhân lớn nhất của vấn đề hiệu suất đó là ứng dụng ngoại lệ. Khi một ngoại lệ xảy ra nó làm cho thread phải tạm dừng trong khi stack trace (những trở ngại) được thu thập. Thậm chí các trường hợp ngoại lệ có vẻ vô hại nhưng lại có thể gây ra sự tắc nghẽn lớn về mặt hiệu suất tại server. Điều quan trọng cần là tổng hợp và giám sát tất cả các ngoại lệ để tìm ra các vấn đề quan trọng, lỗi mới và theo dõi tỷ lệ lỗi theo thời gian. Lỗi hoặc công cụ theo dõi lỗi là điều rất cần thiết cho bất kỳ nhóm lập trình nào.
Ưu điểm: Dễ dàng thiết lập nếu bạn đang sử dụng một framework như log4net hay NLog. Nếu bạn không sử dụng logging framework thông thường, bạn có thể sử dụng Elmah.
Nhược điểm: Không có!
Lưu ý: Theo cách thủ công và báo cáo lỗi trong code của bạn cho một logging framework là cách tuyệt vời để thu thập lỗi. Nhiều giải pháp APM cũng có thể thu thập lỗi thông qua các .NET CLR Profiling API và cho phép chúng tìm thấy mọi lỗi đã từng xảy ra. Phương pháp này có thể thu thập rất nhiều lỗi, nhưng điều này thực sự có giá trị cho việc tìm kiếm và loại trừ những trường hợp ngoại lệ không cần thiết mà bạn không biết chúng có tồn tại hay không.
Các tool giám sát Windows & .NET hiện đại
Tùy thuộc vào những gì bạn đang cố gắng hoàn thành, có rất nhiều công cụ theo dõi .NET có sẵn cho bạn. Mỗi vấn đề có mỗi giải pháp khác nhau. Theo thời gian, có thể bạn sẽ sử dụng tất cả các loại công cụ khác nhau được liệt kê ở đây. Chúng tôi hy vọng bạn có thể tìm được thứ bạn cần trong danh sách trên. Mọi ý kiến đóng góp khác xin để lại dưới comment nhé