Devops T├╝rkiyeÔśü´ŞĆ ­čÉž ­čÉ│ ÔśŞ´ŞĆ

Performance Tracking On EF Core With Easy Profiler (Finally ­čśî)

Profesyonel kariyer hayat─▒mda hemen hemen her zorland─▒─č─▒mda akl─▒ma gelen, Mumin SekmanÔÇÖ─▒n TedX ─░zmirÔÇÖde ki konu┼čmas─▒nda ge├žen c├╝mlelerden bir tanesi ile bu yaz─▒ya ba┼člamak istiyorum. Haz─▒r m─▒s─▒n─▒z? ─░┼čte geliyooor. ­čžÉ­čöą

Ay┼če teyzenin yol haritas─▒ ­čĄú­čĹÁ
  • Bu istek uygulamam─▒z─▒n ├žal─▒┼čt─▒─č─▒ sunucuya geliyor
  • Sonucun verilmesi i├žin bir pipeline ayaklan─▒yor
  • ─░stek bu pipeline i├žerisinde authentication, authorization ve tan─▒mlanan ba┼čka ad─▒mlardan ge├žiyor
  • ─░stenilen cevap kulland─▒─č─▒m─▒z herhangi bir cache provider ├╝zerinde var m─▒ diye kontrol ediliyor
  • Sonu├ž varsa Ay┼če teyze sonucunu al─▒yor ve dua ediyor ­čĄ▓­čÖĆ
  • E─čer sonu├ž cache ├╝zerinde yoksa relational veya document bir veri taban─▒ ├╝zerinden sonu├ž i┼členiyor ve Ay┼če teyzeye g├Âsteriliyor
  • Request-Response aras─▒nda ├žal─▒┼čan pipeline itemlar─▒n veya bir di─čer ad─▒yla middleware olarak tan─▒mlad─▒─č─▒m─▒z kod bloklar─▒ uzun s├╝r├╝yor olabilir.
  • Authentication i├žin kulland─▒─č─▒m─▒z servis Ay┼če teyzenin authenticate olup olmad─▒─č─▒n─▒ kontrol ederken cevap vermekte zorlan─▒yor olabilir.
  • Cache i├žin kulland─▒─č─▒m─▒z sa─člay─▒c─▒ya (memory cache, redis vb.) ba─član─▒rken veya cache ├╝zerindeki veriler kontrol edilirken ├žok fazla zaman harc─▒yor olabiliriz.
  • Relational veya document veri taban─▒na ba─član─▒rken bir network problemi ya┼č─▒yor olabiliriz.
  • Ay┼če teyzenin istedi─či sonu├ž kulland─▒─č─▒m─▒z veri taban─▒ ├╝zerinde hesaplan─▒rken zaman harc─▒yor olabiliriz. (Index, View function, Stored Procedure)
  • Veri taban─▒ ├╝zerinden al─▒nan sonucu uygulamam─▒z i├žerisinde anlamland─▒r─▒rken zaman harc─▒yor olabiliriz.
  • Serialization and Deserialization gibi i┼člemleri ger├žekle┼čtirirken Ay┼če teyzeyi uzun s├╝re bekletiyor olabiliriz.
  • Veri taban─▒ ile ileti┼čim kurup, sorguyu ne kadar s├╝rede execute etti─čine bakmal─▒y─▒m
  • Ay┼če teyzenin sorgusunu bir de sunucuya ba─član─▒p ilgili veri taban─▒ ├╝zerinde T-SQL olarak ├žal─▒┼čt─▒r─▒p ne kadar s├╝rede yan─▒t verdi─čini kontrol etmeliyim
  • Gerekirse bu sorguyu stored procedure olarak haz─▒rlay─▒p daha h─▒zl─▒ yan─▒t vermesini sa─člamal─▒y─▒m
  • Sonu├ž yine istedi─čim seviyede olmazsa bu sorguyu cache ├╝zerinde saklamay─▒l─▒m ve her seferinde veri taban─▒na gitmemeliyim
  • Hala d├╝zelmediyse yapacak bir ┼čey yok sorun Ay┼če teyzededir

Easy Profiler K├╝t├╝phanesinin Amac─▒ Ne? ­čĄöÔŁô

Easy Profiler Dotnet uygulamalar─▒nda kulland─▒─č─▒n─▒z veri taban─▒n─▒ EF Core yard─▒m─▒yla track etmeye ba┼čl─▒yor. Context ├╝zerinde ger├žekle┼čen i┼člemleri raporluyor ve k├╝t├╝phanenin son kullan─▒c─▒s─▒ olan geli┼čtiricilere baz─▒ raporlar haz─▒rl─▒yor.

Easy Profiler K├╝t├╝phanesi Nas─▒l ├çal─▒┼č─▒yor? ­čĄöÔŁô

EasyProfiler k├╝t├╝phanesinin ilham kayna─č─▒ EF Core 3.x ile aram─▒za kat─▒lan Interceptor ├Âzelli─čidir.

SELECT [c].[CustomerId], [c].[CreateDate], [c].[IsActive], [c].[Name], [c].[PhoneNumber], [c].[Surname], [c].[UpdateDate]FROM [Customers] AS [c] order by 1 desc
  • SQL Server
  • MySQL
  • Oracle
  • MariaDb

Mongo ├ťzerinde Interceptor Nas─▒l Sa─član─▒r? ­čĄöÔŁô

Mongo i├žin context objemizi yarat─▒rken baz─▒ ayarlamalar yapabiliyoruz.
├ľrne─čin;

  • ConnectionTimeout
ClusterBuilderExtensions.cs
  • CommandName
  • CommandText
  • Command Duration

Easy Profiler Bu Verileri Nas─▒l Sakl─▒yor ­čĄöÔŁô

K├╝t├╝phanenin ilk s├╝r├╝mlerinde interceptor ├Âzelli─či ile veri taban─▒ ├╝zerinde yap─▒lan operasyonlar anl─▒k olarak belirtti─činiz veri taban─▒ ├╝zerinde Profiler isimli bir tabloya kaydediliyordu. Ancak k├╝t├╝phanenin kullan─▒m─▒ artt─▒k├ža ve en ├Ânemlisi, production ortamlar─▒nda kullan─▒lmaya ba┼čland─▒k├ža Easy Profiler kullan─▒m─▒nda, veri taban─▒ sorgular─▒n─▒n performans─▒n─▒n ortalama %6.2 oran─▒nda d├╝┼čt├╝─č├╝n├╝ g├Âzlemledik. Yani 100 ms s├╝ren bir veri taban─▒ sorgusu art─▒k 106.2 ms s├╝r├╝yordu. ─░nsan g├Âz├╝n├╝n 40ms alt─▒nda ger├žekle┼čen olaylar─▒ handle edemedi─čini bilsek de yo─čun kullan─▒lan servislerde anl─▒k y├╝k ├žok artt─▒─č─▒ i├žin interceptor i├žerisinde bulunan logic par├žalar─▒ uygulamay─▒ performans anlam─▒nda geri g├Ât├╝rmeye ba┼člad─▒─č─▒ inkar edilemezdi. Biraz daha basitle┼čtirerek anlatmak gerekirse; Easy Profiler taraf─▒ndan kullan─▒lan bir interceptor, sorguyu yar─▒da kesip kendi logiclerini ├žal─▒┼čt─▒r─▒yor ve datay─▒ i┼čliyordu. Her sorguda b├Âyle bir maliyet bizi ve son kullan─▒c─▒lar─▒ rahats─▒z edince bu i┼člemin ger├žekle┼čece─či zaman dilimini geli┼čtiricilerin karar─▒na b─▒rakma karar─▒ ald─▒k.

Easy Profiler K├╝t├╝phanesi Nas─▒l Kullan─▒l─▒r (Relational Database)­čĄöÔŁô

Easy Profiler ┼čimdilik;

  • PostgreSQL
  • MariaDb
  • MySQL
Install-Package EasyProfiler.PostgreSQL -Version 2.2.0Install-Package EasyProfiler.MariaDb -Version 2.2.0Install-Package EasyProfiler.SQLServer -Version 2.2.0
Startup.cs
Startup.cs
Startup.cs

Sonu├ž ­čĄöÔŁô

Sonu├žlar─▒ g├Ârmenin 3 farkl─▒ y├Ântemi var. Hadi ├Â─črenelim. ­čĄô

**Manuel**

Belirtti─činiz sunucu ├╝zerinde easy-profiler isimli ┼čemaya gidin. Profilers isimli tablonun i├žerisinde uygulaman─▒z─▒n verilerini g├Ârebilirsiniz.

**Az Manuel Az Otomatik (Tiptronik ­čĄú)**

Dependency Injection ile IEasyProfilerBaseService<TCONTEXT> servisini al─▒n.
Bu servis ├╝zerinde bulunan AdvancedFilter ve GetSlowestEndpoint metodlar─▒n─▒ kullanarak verilerinizi g├Ârebilirsiniz.

BaseService.cs

**Full Otomatik**

EasyProfiler.AspNetCore k├╝t├╝phanesini nuget ├╝zerinden indirin.
Bu k├╝t├╝phane ile built-in endpointlere sahip olacaks─▒n─▒z. Bu endpointleri kullanarak a┼ča─č─▒daki sonu├žlar─▒ edinebilirsiniz.

  • En h─▒zl─▒ endpoint
  • En ├žok kullan─▒lan endpoint
  • Advanced Filter

~En Yava┼č Endpoint~

METHOD : GET
URL : {BASE_URL}/easy-profiler/slowest-endpoint

slowestEndpointResponse.json

~En H─▒zl─▒ Endpoint~

METHOD : GET
URL : {BASE_URL}/easy-profiler/fastest-endpoint

fastestEndpointResponse.json

~En Çok Kullanılan Endpoint~

METHOD : GET
URL : {BASE_URL}/easy-profiler/most-requested-endpoint

mostRequestedEndpoint.json

~Advanced Filter~

METHOD : GET
URL : {BASE_URL}/easy-profiler/advanced-filter

~~ Sort Properties for Advanced Filter ~~

  • {BASE_URL}/easy-profiler/advanced-filter?sort=Duration
  • {BASE_URL}/easy-profiler/advanced-filter?sort=Query
  • {BASE_URL}/easy-profiler/advanced-filter?sortBy=Ascending&sort=Duration
  • {BASE_URL}/easy-profiler/advanced-filter?sortBy=Ascending&sort=Query
  • {BASE_URL}/easy-profiler/advanced-filter?sortBy=Descending&sort=Duration
  • {BASE_URL}/easy-profiler/advanced-filter?sortBy=Descending&sort=Query

~~ Filter Properties For Advanced Filter~~

  • BASE_URL}/easy-profiler/advanced-filter?duration.min=1&duration.max=10
  • {BASE_URL}/easy-profiler/advanced-filter?duration.min=1&duration.max=10&queryType=SELECT
  • {BASE_URL}/easy-profiler/advanced-filter?duration.min=1&duration.max=10&queryType=SELECT&page=1&perPage=10
  • {BASE_URL}/easy-profiler/advanced-filter?requestUrl=getAllCustomer&duration.min=1&duration.max=10&queryType=SELECT&page=1&perPage=10
  • {BASE_URL}/easy-profiler/advanced-filter?requestUrl=getAllCustomer&duration.min=1&duration.max=10&queryType=SELECT&page=1&perPage=10&combineWith=Or
  • {BASE_URL}/easy-profiler/advanced-filter?requestUrl=getAllCustomer&duration.min=1&duration.max=10&queryType=SELECT&page=1&perPage=10&query=customer

Roadmap & Product Backlog ­čôŁ

Yaz─▒n─▒n bu a┼čamas─▒nda sizlere planlanan i┼člerden bahsetmek istiyorum. B├Âylece hep beraber EasyProfiler i├žin hayal kurabilece─čiz. Sizlerin de eklemek istedi─či yeni ├Âzellikler varsa yorum olarak belirtmeniz ├žok faydal─▒ olacakt─▒r. G├╝n├╝n sonunda EasyProfiler bir ├╝r├╝n ve bu ├╝r├╝n├╝n kullan─▒c─▒lar─▒ geli┼čtiriciler oldu─ču i├žin developer use-casededi─čimiz metrikler bizim i├žin ├žok ├Ânemli.

Supported Databases ­čŚâ´ŞĆ

EasyProfiler tamamiyle database based bir library oldu─ču i├žin desteklenen veri tabanlar─▒ olduk├ža ├Ânemli. ┼×u an desteklenen veri tabanlar─▒na ek olarak dotnet d├╝nyas─▒nda en ├žok kullan─▒lan veri tabanlar─▒n─▒ listeledik ve bir s─▒ralama olu┼čturduk.

  • Firebird
  • SQLite

Report Module ­čôî

Veri varsa bu verileri anlamd─▒rmak ve g├Ârselle┼čtirmek genelde iyi bir yakla┼č─▒m olacakt─▒r. Yukar─▒da bahsetti─čim Sonu├ž k─▒sm─▒ asl─▒nda bu ├Âzelli─če g├Âz k─▒rp─▒yor. ­čśë
Ancak ilerleyen s├╝r├╝mlerde rapor mod├╝l├╝n├╝ biraz daha geli┼čtirmeyi d├╝┼č├╝n├╝yoruz. ┼×u an bulunan raporlara ek olarak;

  • Toplam Insert Say─▒s─▒
  • Toplam Update Say─▒s─▒
  • Toplam Delete Say─▒s─▒

Limit ve Notification ­čÖł­čöŐ

7/24 uygulaman─▒n ba┼č─▒nda olamayaca─č─▒m─▒z bir ger├žek. Notification mod├╝l├╝ ile belirledi─činiz saatlerde sistemin o aral─▒kta ger├žekle┼čtirdi─či t├╝m i┼člemler desteklenen kanallar ├╝zerinden sizinle payla┼č─▒lacak.

  • Discord
  • Sms
  • Email
  • Microsoft Teams
  • Push Notification
  • Web Hook
  • Amazon SQS/SNS
  • Kafka Event
  • RabbitMQ Event
  • Azure Service Bus

Real-Time Dashboard ­čôŞ

En ├žok heyecanland─▒─č─▒m─▒z mod├╝l olan dashboard ├Âzelli─či ile sistem i├žerisinde ger├žekle┼čen olaylar─▒ real-time bir ┼čekilde izleyebileceksiniz. Geli┼čtirdi─čimiz ├╝r├╝nlerde art─▒k monitoring kavram─▒ hi├ž olmad─▒─č─▒ kadar b├╝y├╝k bir ├Ânem arz ediyor. Dashboard ├Âzelli─či ile monitoring sorunun ├ž├Âzmekle kalmay─▒p isterseniz kendinize ├Âzel rapor ekranlar─▒ olu┼čturabileceksiniz. Ek olarak limit de─čerlerinizi g├╝ncelleyip sisteminizi anl─▒k filtreleyebileceksiniz.

Solution Developer ÔÇö I want to change the world, give me the source code.