Tworzenie aplikacji internetowej ASP.NET Core z funkcjonalnością monitorowania


Zaawansowane podejście do pisania aplikacji z zastosowaniem frameworka. Implementacja funkcjonalności monitorowania zapytań i czasu ich realizacji. Prezentacja różnych podejść do konstrukcji aplikacji.

Zaczynając od początku, .NET Core jest na tyle fajnym frameworkiem że można się "wpiąć" w niemal dowolny moment podczas przetwarzania requestu. Z tego powodu myślę że można w takiej pracy pójść z w dwóch kierunkach:
1) Napisać swoje własne narzędzie do monitorowania aplikacji (np. podobne do MiniProfilera), które pokazywałoby w jakim czasie wykonuje się zapytanie z podziałem na wszystkie jego "części".
2) Skupić się bardziej na testowaniu wydajności różnej architektury aplikacji, różnych technologii, przy użyciu gotowych narzędzi.
Jest jeszcze trzecie opcja, czyli pomieszanie podejścia pierwszego z drugim (chociaż to byłoby najbardziej pracochłonne).
Wracając do punktu pierwszego, taki system mógłbym składać się z dwóch części:
- pierwsza, czyli zasadnicza aplikacja z systemem monitorowania która zapisywała by dane z każdego requestu w jakiejś bazie pośredniej;
- druga aplikacja która te dane na bieżąco by odczytywała i prezentowała w wygodny sposób (wykresy, tabele, statystyki);
W punkcie drugim skupiłbym się bardziej na porównaniu różnych podejść do budowy aplikacji i tego co możne być najwydajniejszym rozwiązaniem w danej sytuacji.
Można by było porównać np.
- architekturę cienkiego i grubego klienta dla różnych przypadków testowych;
- wychwycenie różnych wąskich gardeł, tutaj największe pole do popisu daje ORM i warstwa dostępu do danych więc do porównania byłby np. Entity Core vs nHibernate Core vs Drapper vs czyste ADO.NET;
- zastosowanie cachu w aplikacji i jego wpływ na wykonywanie zapytań, zwykły napisany w aplikacji vs zewnętrzny serwer (np. Redis);
- serwer na którym umieszczona jest aplikacja (Kestrel vs Nginx vs IIS), działanie load balancera;
- odwołania do zewnętrznych usług i operacje I/O;
- narzędzia do serializacji danych;
- kod synchroniczny vs asynchroniczny;
- zejście w bardziej niskopoziomowe części aplikacji (garbage collector, listy, kolejki, JITer);
 
Publikacje to "Pro .NET Performance" (Dima Zurbalev, Ido Flatow, Sasha Goldshtein) oraz Designing Data-Intensive Applications (Martin Kleppmann).
Pierwsza ksiażka dotyczy bardziej .NET Standard ale myślę, że i w odniesieniu do .NET Core można dużo się z niej dowiedzieć, natomiast druga opisuje zasady tworzenia architektury aplikacji gdy szczególnie ważna jest wydajność.
 

Statistics

Status:
Active
Places:
10
Reservations:
0
Availability:
100%

Dates

Created:
2018-04-09, 14:35:08
Last modification:
2019-01-24, 09:46:45
Date of publication:
2019-01-24, 09:46:45