Velocity ile İş Akışınızı Hızlandırın: Üst Düzey Intranet Çözümü

Günümüzün hızlı tempolu iş dünyasında, kuruluşunuzun taleplerine ayak uydurabilecek verimli bir intranete sahip olmak büyük önem sarf etmektedir. İntranet, çalışanlarınızın iletişim kurmasını ve projeler üzerinde beraber çalışmasını, önemli dosya ve belgelere erişmesini ve önemli bilgileri paylaşmasını sağlayan özel ve güvenli bir ağdır. Ancak, birçok kuruluş hala yavaş, hantal ve kullanımı zor olan eski intranetleri kullanmakta.

velocity intranetVerimli Bir İntranetin Önemini Anlamak

Etkili bir intranet kuruluşunuzun üretkenliği, verimliliği ve kârlılığı üzerinde önemli bir etkiye sahip olabilir. İletişimi ve işbirliğini geliştirebilir, iş akışlarını kolaylaştırabilir ve kritik bilgi ve kaynaklara erişim sağlayabilir. İntranetler modern işletmelerin ayrılmaz bir parçası haline gelmiştir ve doğru çözüme sahip olmak büyük önem taşımaktadır.

 

Modern işletmelerde intranetin rolü

Her geçen gün daha fazla kuruluşun uzaktan çalışmayı ve karışık ekipleri benimsemesiyle birlikte, sağlam bir intranete duyulan ihtiyaç daha da kritik hale gelmiştir. Bir intranet, çalışanların bulundukları yerden bağımsız olarak önemli bilgilere erişebilecekleri ve birbirleriyle işbirliği yapabilecekleri merkezi bir konum sağlar. Ayrıca ekip üyeleri arasında bağlantı ve dostluk duygusunu teşvik eder, bu da gelişen bir kurum kültürü için gerekli bir olgudur.

Örneğin, yeni bir proje üzerinde çalışan bir tasarımcı ekibiniz olduğunu düşünün. Etkin bir intranet sayesinde çalışmalarını paylaşabilir, fikirlerini tartışabilir ve gerçek zamanlı olarak geri bildirimde bulunabilirler. Bu işbirliği düzeyi yalnızca çıkarılan ürünün kalitesini artırmakla kalmaz, aynı zamanda birden fazla toplantı ve e-posta ihtiyacını ortadan kaldırarak zaman ve kaynak tasarrufu sağlar.

 

Eski intranetlere sahip kuruluşların karşılaştığı yaygın zorluklar

Ne yazık ki, birçok kuruluş hala artık amaca uygun olmayan eski intranetlere güveniyor. Bu eski sistemler oldukça yavaştır, kullanımı zordur ve modern işletmelerin ihtiyaç duyduğu temel özelliklerden yoksundur. Ayrıca hassas verileri ve gizli bilgileri riske atabilecek güvenlik riskleri de taşırlar.

Örneğin, eski bir intranet siber tehditlere karşı koruma sağlamak için gerekli güvenlik protokollerine sahip olmayabilir. Bu da veri ihlallerine yol açabilir, bu da maliyetli olabilir ve bir kuruluşun itibarına zarar verebilir. Ayrıca, eski intranetler mobil cihazlarla uyumlu olmayabilir, bu da çalışanların hareket halindeyken önemli bilgilere erişmesini zorlaştırır.

 

Güncelliğini yitirmiş intranetlere sahip kuruluşların karşılaştığı yaygın zorluklardan bazıları şunlardır:

Sınırlı işlevsellik ve özellikler:

Eski intranetler, sosyal işbirliği araçları, belge yönetim sistemleri ve proje yönetim araçları gibi modern işletmelerin ihtiyaç duyduğu temel özelliklerden yoksun olabilir.

Kötü kullanıcı deneyimi ve arayüz: Eski sistemler hantal bir arayüze sahip olabilir ve kullanıcıların bu intranette gezinmesi zor olabilir, bu da hayal kırıklığına ve üretkenliğin azalmasına neden olabilir.

Diğer araç ve sistemlerle entegre olamama: Diğer araç ve sistemlerle entegre olamayan bir intranet, aynı işlerin tekrar yapılmasına ve verimliliğin azalmasına neden olabilir.

Mobil uyumluluk eksikliği: Giderek daha fazla çalışanın uzaktan veya hareket halinde çalıştığı göz önüne alındığında, bir intranetin mobil cihazlardan erişilebilir büyük önem taşıyan bir durumdur.

Yavaş yükleme süreleri ve sürekli yaşanan çökmeler: Güncel olmayan intranetler fazlasıyla yavaş yüklenebilir ve çökmelere eğilimli olabilir; bu da üretkenlik kaybına ve hayal kırıklığına yol açabilir.

Güvenlik endişeleri ve veri ihlalleri: Eski sistemler siber tehditlere karşı koruma sağlamak için gerekli güvenlik protokollerine sahip olmayabilir, bu da hassas verileri ve gizli bilgileri riske atabilir.

 

Verimli ve modern bir intranet çözümüne yatırım yaparak kuruluşlar bu zorlukların üstesinden gelebilir ve gelişmiş iletişim, işbirliği ve üretkenliğin faydalarından yararlanabilir.

Karşınızda Velocity: Üst Düzey İntranet Çözümü

Velocity, kuruluşunuzun iş akışını hızlandırmak, iletişimi ve işbirliğini kolaylaştırmak ve üretkenliği artırmak için ihtiyaç duyduğu her şeyi sağlayan nihai intranet çözümüdür. Kuruluşunuzun özel ihtiyaçlarına ve gereksinimlerine uyacak şekilde uyarlanabilen modern, kullanıcı dostu ve özelleştirilebilir bir platformdur.

 

Velocity’nin temel özellikleri

Velocity, kuruluşunuzun iletişimini, işbirliğini ve üretkenliğini geliştirmek için tasarlanmış çok çeşitli özelliklerle birlikte gelir. Temel özelliklerden bazıları şunlardır:

 

  • Güvenli erişim ve izin ayarları
  • Özelleştirilebilir kullanıcı arayüzü ve markalama
  • Güçlü arama işlevi
  • Anlık mesajlaşma ve grup sohbeti
  • Görev ve proje yönetimi araçları
  • Diğer üretkenlik araçları ve sistemleriyle entegrasyon

Ama hepsi bu kadar değil. Velocit aynı zamanda bir Çalışan Rehberi de sunar.

Velocity’nin çalışan rehberi, kuruluşunuzdaki iş arkadaşlarınızı bulmanızı ve onlarla bağlantı kurmanızı kolaylaştırır. İsim, departman veya iş unvanına göre arama yapabilir ve çalışanların iletişim bilgilerini ve profil ayrıntılarını görüntüleyebilirsiniz. Bu özellik, iş arkadaşlarınızla işbirliği yapmayı ve daha güçlü çalışma ilişkileri kurmayı daha kolay bir hale getirir.

 

Haberler ve Duyurular

Velocity’nin haberler ve duyurular özelliği ile çalışanlarınızı döngü içinde tutun. Şirket güncellemelerini, sektör haberlerini ve diğer önemli bilgileri ekibinizle gerçek zamanlı olarak paylaşabilirsiniz. Bu özellik, herkesin bilgilendirilmesine ve katılımını sağlamaya yardımcı olur ve kuruluşunuzun her zaman ileri gitmesine olanak tanır.

Belge Yönetimi

Velocity’nin belge yönetimi özelliği ile dosyaları kolaylıkla saklayabilir, düzenleyebilir ve paylaşabilirsiniz. Dosyalarınızı düzenli tutmak için klasörler ve alt klasörler oluşturabilir ve yalnızca yetkili kullanıcıların hassas bilgilere erişebilmesini sağlamak için izinleri ayarlayabilirsiniz. Bu özellik, herkesin önemli belgelerin en son sürümlerine erişmesini sağlayarak belge yönetimi sürecinizi basitleştirir.

 

Velocity diğer intranet çözümlerinden nasıl ayrılır?

Velocity’yi diğer intranet çözümlerinden ayıran şey esnekliği ve ölçeklenebilirliğidir Büyüklüğü veya sektörü ne olursa olsun kuruluşunuzun özel ihtiyaçlarını karşılayacak şekilde kolayca özelleştirilebilir. Ayrıca son derece sezgisel ve kullanımı kolaydır, bu da çalışanlarınızın çalışmaya başlamak için kapsamlı bir eğitime ihtiyaç duymayacağı anlamına gelir.

Velocity aynı zamanda bulut tabanlıdır, yani donanımınızın bakımını yapma veya yazılımınızı güncel tutma konusunda endişelenmenize gerek yoktur. Ayrıca, her zaman en yeni özelliklere ve işlevselliğe erişebilmenizi sağlamak için düzenli güncellemeler ve iyileştirmeler sağlar.

Mobil Uygulama

Velocity’nin mobil uygulaması, çalışanlarınızın hareket halindeyken bağlantıda kalmalarını ve üretken olmalarını sağlar. Mobil cihazlarından önemli belgelere erişebilir, iş arkadaşlarıyla beraber çalışabilir ve şirket haberleri ve duyuruları ile güncel kalabilirler. Bu özellik, ekibinizin herhangi bir yerden, herhangi bir zamanda, hiçbir şeyi kaçırmadan çalışabilmesini sağlar.

Analitik ve Raporlama

Velocity’nin analiz ve raporlama özelliği, kuruluşunuzun intranet kullanımına ilişkin değerli bilgiler sağlar. Kullanıcı etkinliğini izleyebilir, katılımı ölçebilir ve iyileştirebileceğiniz alanlarını belirleyebilirsiniz. Bu özellik, intranetinizi optimize etmenize ve kuruluşunuzun ihtiyaçlarını karşıladığından emin olmanıza yardımcı olur.

Tüm bu özellikler ve daha da fazlasıyla Velocity, iletişimi, işbirliğini ve üretkenliği geliştirmek isteyen kuruluşlar için nihai intranet çözümüdür. Velocity’i hemen deneyin ve ekibiniz için yaratabileceği farkı canlı olarak görün!

Velocity ile İletişim ve İşbirliğini Kolaylaştırmak

Velocity, işletmenizin çalışanlarınız arasındaki iletişimi ve işbirliğini kolaylaştırmasına yardımcı olabilecek güçlü bir araçtır. Velocity, çalışanlarınızın önemli bilgilere erişebileceği, projeler üzerinde işbirliği yapabileceği ve fikirlerini paylaşabileceği merkezi bir konum sağlayarak iş yerinizde üretkenliği ve verimliliği artırmanıza yardımcı olabilir.

Ekip iletişiminin güçlendirilmesi

Velocity’nin en önemli özelliklerinden biri anlık mesajlaşma ve grup sohbeti işlevselliğidir. Bu, çalışanlarınızın gerçek zamanlı olarak iletişim kurmasına olanak tanır. Bu, özellikle zamana duyarlı projeler üzerinde çalışırken veya kararların hızlı bir şekilde alınması gerektiğinde değerlidir. Velocity ile çalışanlarınız kolayca bilgi paylaşabilir, sorular sorabilir ve projelerin ilerlemesini sağlamak için ihtiyaç duydukları yanıtları alabilir.

Ek olarak, Velocity’nin sohbet özelliği, çalışanların belirli ekipler veya projeler için özel kanallar oluşturmasına olanak tanır. Bu, görüşmeleri düzenli tutmaya yardımcı olur ve önemli tartışmalara doğru kişilerin dahil olmasını sağlar.

Projelerde sorunsuz işbirliğini kolaylaştırma

Velocity ayrıca ekiplerinizin birlikte sorunsuz bir şekilde çalışmasını sağlayan güçlü görev ve proje yönetimi araçları da sunar. Çalışanlar platform içinde görevler oluşturabilir, sorumluluklar atayabilir, bir işin bitimi için tarih belirleyebilir ve birbirleriyle iletişim kurabilirler. Böylece herkes her şeyden haberdar olmuş olur ve projeler zamanında ve bütçe dışına çıkılmadan tamamlanır.

Velocity ile çalışanlar ayrıca görevlerin ve projelerin ilerleyişini kolayca takip edebilir, bu da potansiyel engelleri veya sorunları büyük sorunlara dönüşmeden önce belirlemeye yardımcı olur. Böyle işletmeniz çevik kalır ve değişen pazar koşullarına kolayca yanıt verir.

Popüler üretkenlik araçlarıyla entegrasyon

Velocity’nin bir diğer önemli avantajı da Microsoft Office ve diğer popüler üretkenlik araçlarıyla entegre olabilmesidir. Böylece çalışanlarınız ihtiyaç duydukları uygulamalara ve araçlara doğrudan Velocity’den erişebilir, dolayısıyla üretken ve verimli kalmaları daha kolay olur.

Örneğin, ekibiniz Microsoft Word’de bir belge üzerinde çalışıyorsa, bunu kolayca Velocity’e yükleyebilir ve diğer ekip üyeleriyle birlikte üzerinde ortak bir çalışma yürütebilirler.

Özetlemek gerekirse Velocity, çalışanları arasında iletişim ve işbirliğini geliştirmek isteyen tüm işletmeler için vazgeçilmez bir araçtır. Velocity, önemli bilgiler ve araçlar için merkezi bir konum sağlayarak üretkenliği, verimliliği ve genel iş başarısını artırmaya yardımcı olur.

Velocity’yi Kuruluşunuzun İhtiyaçlarına Uyacak Şekilde Özelleştirme

Velocity’i ileri düzeyde özelleştirmek ve kişiselleştirmek mümkün, yani intranetinizi kuruluşunuzun özel ihtiyaç ve gereksinimlerine uyacak şekilde tasarlayabilirsiniz. Buna kullanıcı arayüzünün kişiselleştirilmesi, erişim ve izinlerin yapılandırılması ve özel iş akışları ve otomasyonların uygulanması dahildir.

Kullanıcı arayüzünü kişiselleştirme

Velocity, kullanıcı arayüzünü kuruluşunuzun markasına ve stiline uyacak şekilde özelleştirmenize olanak tanır. Böylece çalışanlarınız arasında sahiplenme ve gurur duygusu artabilir, bu da katılımın ve üretkenliğin artmasını beraberinde getirir.

Erişim ve izinleri yapılandırma

Velocity, ayrıntılı erişim ve izin ayarları sunar; dolayısıyla belirli dosyalara, belgelere ve özelliklere kimlerin erişebileceğini kontrol edebilirsiniz. Bu, hassas verilerinizin ve gizli bilgilerinizin her zaman korunmasını sağlamaya yardımcı olur.

Velocity ayrıca kuruluşunuzun süreçlerini kolaylaştırmaya yardımcı olabilecek özel iş akışları ve otomasyonlar oluşturmanıza da olanak tanır. Böylece zamandan tasarruf edebilir, hataları azaltabilir ve verimliliği artırabilirsiniz.

Velocity ile Veri Güvenliği ve Uyumluluğu Sağlama

Kuruluşlar için en büyük endişelerden biri, verilerinin güvenliğini ve düzenlemelere uygunluğu sağlamaktır. Velocity, verilerinizin her zaman korunmasını sağlamaya yardımcı olabilecek güçlü güvenlik özellikleri sunar.

Güçlü güvenlik özellikleri

Velocity, şifrelenmiş veriler, güvenli kimlik doğrulama ve erişim kontrolleri dahil olmak üzere kurumsal düzeyde güvenlik özellikleri sağlar. Ayrıca, verilerinizin her zaman korunmasına yardımcı olmak için düzenli güvenlik güncellemeleri ve değerlendirmeleri de sunar.

Endüstri standartları ve yönetmeliklerle uyumluluk

Velocity, GDPR dahil olmak üzere endüstri standartlarına ve yönetmeliklerine uyacak şekilde tasarlanmıştır. Yani verilerinizin her zaman güvende ve uyumlu olduğunu bilmenin rahatlığını yaşayabilirsiniz.

Sonuç

Velocity, kuruluşunuzun iş akışını hızlandırmaya, iletişimi ve işbirliğini kolaylaştırmaya ve üretkenliği artırmaya yardımcı olabilecek nihai intranet çözümüdür. Sağlam özellikleri, esnekliği ve ölçeklenebilirliği, onu bir adım önde olmak isteyen modern işletmeler için mükemmel bir seçim haline getirir.

Velocity hakkında daha fazla bilgi edinmek ve kuruluşunuzun tam potansiyeline ulaşmasına nasıl yardımcı olabileceğini öğrenmek için hemen bize ulaşın.

Yeniliklerden haberdar olmak için blog sayfamızı takip etmeyi unutmayın.
Bir sonraki yazımızda görüşmek üzere, kendinize iyi bakın. 👩‍💻

Önü Alınmayan CPU Yükselişi ve Profiling Aracılığıyla Tespit Edilmesi

Bu problem boyunca yaptığımız ciddi code refactor, test ve daha az kaynak ile daha fazla performans elde ettiğimiz çalışmaları makale içerisine dahil etmedim. 8 Mart 2021 günü 2 Instance olacak şekilde Azure Web Application’da çalışan Velocity uygulaması bir anda CPU göstergelerinde ciddi artışlar olduğu ile ilgili hatalar fırlatmaya başladı. PEAKUP’da bu tarz problemlere yaklaşımımız genelde “öncelikle yangını söndür, söndüremiyorsan kontrol altına al ve süreci inceleyip, problem ortadan kaldır” şeklindedir.

Her ne kadar Auto Scaling ile ilgili Azure ayarlarını yapmış olsak da her bir Velocity müşterisi onboarding (tüm içeriklerin girildiği ve kullanıcı eğitimlerinin verildiği) sürecini tamamladıktan sonra kendi içerisindeki kullanıcılarına portal kullanımını duyurdukları zaman sistemi ikinci bir ekranda genel olarak izliyoruz. Anlık gelen kullanıcı sayısını Power BI üzerinden kendi geliştirdiğimiz Analytics Tool’u ile izliyoruz. Bu tarih için planladığımız, olası ansızın gelebilecek bir yük yoktu. Ancak ürünün kullanımı gereği bazı müşteriler portal içerisinden duyuru yaptığında da ansızın bir yük gelebiliyordu. Bu durumda Azure üzerinde otomatik olarak ölçeklendirme için CPU, Memory vb. metrikler üzerinde kurguladığımız alarmlar devreye giriyor ve anında olası bir problemin önüne geçiyorduk.

Bu defa taşıdığımız yük, günlük trafiğimizin ortalamasında olmasına rağmen 12 Instance açıkken bile bir türlü CPU ile ilgili problemi çözemiyorduk. Üzerinden toplantı odaları, yaklaşan toplantılarım vb. bilgileri çektiğimiz ONE uygulaması ve Authenticator uygulaması da herhangi bir spike ile karşı karşıya kalmamasına rağmen Velocity’de sıra dışı bir durum vardı.

Problemi gidermek için kontrol ettiğimiz, denediğimiz bazı adımlar;

  • Bağlı çalışan tüm diğer uygulamaların kaynakları ve veri tabanları yeterli seviyede yükü kaldırıyor mu?
    • Buradaki amacımız Velocity ve diğer tüm ürünlerimizin ortak olarak kullandığı Authenticator ya da bağlı olduğu herhangi bir servisin veritabanı tarafında ya da backend tarafda gönderdiğimiz talepler karşısında herhangi bir bottleneck yaşanıp yaşanmadığını kontrol etmek oldu. Hiçbir problem tespit edilemedi. Aksine fazla kaynak rezerve edildiği tespit edilip bazı kaynaklarda düşüşe gidildi.
  • Öncelikle SQL Server içerisinde Created alanına göre anormal bir veri artışı var mı?
    • Bazı müşteriler ürünü beyaz ve mavi yaka şeklinde ayırıp bu kullanıcılara portallarını belli bir arayla açabiliyorlar. Son gelen kullanıcı sayısında herhangi bir ani artış olup olmadığını inceledik. Ek olarak Velocity’nin free versiyonu tarafından gelebilecek olası bir artış var mı yok mu bu metrikleri kontrol ettik ve sıradışı bir durum tespit edemedik.
  • JSON Formatındaki Verinin Büyüklüğü Bizi Ne Kadar Etkiliyor?
    • Neredeyse iki yıllık haberleşme kayıtlarını, günlük verilerin girildiği, yüzbinlerce telefon numarasının olduğu bazı widgetların içerisindeki veriler işlenirken acaba CPU tarafında buna bağlı bir kilitlenme mi var sorusu aklımıza geldi. Bunun için müşterilerimizden en büyük veriye sahip olan Widgetlardan beş tane seçip bunlara, test ortamında random veriler girmeye başladık ve CPU tarafında hiçbir değişim olmadığını tespit ettik. Sorun yine çözülmedi!
  • Diğer uygulamalara bağlanıp veri çeken Widgetlarımız(Twitter, Toplantı Odaları, İzin Uygulaması, Haberler vb.) widgetlar tarafında mı bir problem var?
    • Bir Intranetin en önemli olan hizmetlerinden olan Toplantı Odaları, Yaklaşan Toplantılarım, Dış Kaynak Haberleri, Bugün Kimler Uzaktan çalışıyor gibi katma değeri en yüksek ama en fazla CPU tüketimi sağlayan widgetları tek tek kontrol ettik. Her birisini teker teker kullanımdan kaldırıp sonrasında CPU ile ilgili durumu monitör ettik. Ciddi bir düşüş gözlemlendi.
  • Problem Spesifik bir serviste mi? Başka servisleri de etkiliyor mu?
    • Bunu görmek için, Velocity’nin kullandığı tüm servislere Apache’nin AB toolu ile hem localde hem de DEV Stage içerisinde Linux bir makine üzerinden 1000 tane 50 Concurrent request göndererek metrikleri takip ettik. Velocity dışında One servisinde bir problem keşfedildi ve giderildi. Ancak sorun Velocity tarafında sürmeye devam etti.

Yüksek CPU kullanacak tüm Widgetları tek tek incelemeye başladık. Önce portaldan kaldırıp sonrasında oluşan yükün artış veya azalış durumuna göre hareket edecektik.

İlgili widgetlarla ilgili tam bir factoring süreci başlatmak üzereyken problemin tekrar yaşandığını ancak bu defa CPU’daki yükselişlerin daha kısa süre içerisinde normale döndüğünü gözlemledik.

Problemin JSON tipindeki verileri işlediğimiz bir aşamadan kaynaklanmadığından emindim. Çünkü CPU tarafındaki kaynakları tüketebilecek diğer tüm işlemler (Image Processing, Video Processing) başka bir servis içerisinde, döviz-hava durumu gibi widgetlar da başka bir servis içerisinden geliyordu. Bu nedenle JSON tarafında en çok işlem yaptığımız methodları inceleyip tekrar testlere başladık.

Velocity içerisindeki Dependency Injection apısı tamamen kullanıcını yaptığı ilk request sonrasında kurgulanmaktadır. Kullanıcının bağlı olduğu Tenant Hybird mi yani İstanbul’daki bir sunucuda mı çalıştığı yoksa Azure üzerinde Cloud’da mı çalıştığı yapılan ilk requestten sonrasında kurgulanmaktadır. Bu aşamada gelen kullanıcının kim olduğunun tanımını yapan endpointi yani tüm isteklerin aktığı OnActionExecutionAsync methodunu incelemeye başladım.

HttpClient kütüphanesi bu gibi arka arkaya yapılan işlemler için önerilmediğinden dolayı IHttpClientFactory tarafından aldığımız CreateClient methoduyla gelen tüm HttpClient objelerini saatlik olarak isimlendirmeye başladık.

İlk başlarda yaşadığımız spike problemi devam etse de CPU’daki %100 ve üzeri oranda takılı kalma problemi yine süre olarak ciddi anlamda düşüş gösterse de problem hala devam etti.

Problemi daha detaylı incelemek için Azure’un Web Application’a özel olarak sunduğu, tüm metrikleri inceleyebileceğiniz bir uygulaması bulunmaktadır. Bu uygulama application Insight olarak geçer. Velocity’de temel özellikleriyle birlikte açık olan bu uygulamanın tüm Profiling ile ilgili özelliklerini açmaya karar verdik.

Kaynakları arttırmaya devam edip, Azure Application Insight ile problemi araştırmaya, metrikleri toplamaya devam ederken şununla karşılaştık. Application Insight sonrasında ortalama olarak çok küçük sayıda diyebileceğimiz isteklerde bile uygulamada CPU %110’ün üzerine çıkmaya başladı. Araştırdığımızda buna başka geliştiricilerin de maruz kaldığını öğrendik. Haliyle Application Insight tarafını tamamen kapattık ve sorun büyük oranda çözülmüş gibi görünmeye başladı.

 

Sonrasındaki bir hafta boyunca herhangi bir problem olmadan devam eden süreç ilerleyen zamanlarda yüksek Memory Exception hatalarıyla tekrar baş göstermeye başladı… Uygulamalarımızı Web Application içerisinde InProcess olacak şekilde doğrudan IIS’e vermekteydik. Application Insight’ın yarattığı yükü kaldırmak ve direkt olarak performansı koruyabilmek için Kestrel üzerinden bir Reverse Proxy yarattık ve artık hataları çok daha derinlemesine görmeye başladık.

 

Uygulama içerisinde Kestrel sayesinde her bir Request ve SQL sorgusunun çıktısını görmeye başladık. Artık Application Insight’ı açıp bunun yanında ek olarak uygulamanın çalıştığı anda yarattığı hataları görebilir hale geldik. Takım arkadaşlarım Fatih Doğan ve Fatih Memiş’in de bu aşamada dahil olduğu süreçte Code Review aşamasına geçtik. Bottleneck (dar boğaz) yaşadığımız yerin daha uygulamaya gelen ilk isteğin işlendi süreçten başlayıp son aşamasına kadar bütün kodu satır satır kontrol etmeye başladık. Bu esnada artık Kestrel’dan hem daha mantıklı hem de daha yardımcı olacak hataları almaya başladık. Zira uygulama bir yerden sonra CPU tarafında herhangi bir problem yaşamasa da memory tarafında ciddi şekilde sorunlar yaşadığımızı ve bunun kurguladığımız Dependecy Injection mimarisinden oluştuğunu keşfettik.

Normal web uygulamalarında tüm Dependency’ler Startup içerisinde tanımlanırken, Velocity’de neredeyse bütün database ile alakalı Dependency’ler ilk requesttin geldiği BaseController içerisinde tanımlanıyor. Bunun sebebi gelen talebi karşılarken minimum seviyede kaynağı ayağa kaldırmak ve bazı davranışsal değişikliklerin request bazında olabilmesini sağlayabilmektir.

Dependency yapısını yönetmek için Startup.cs içerisinde ayağa Singleton olarak kaldırdığımız IServiceCollection Instance’ı problemin ana kaynağı gibi görünmeye başladı.

İhtiyaç olduğu kadar Depdency’i ayağa kaldırdığımız aşamada kullandığımız IServiceCollection sınıfının Scope ile ilgili işlemler bittikten sonra artık kullandığı kaynakları Memory’den atmadığını ve bunun bütün uygulamayı etkilediğini fark ettik. Normalde içerisinden çektiğimiz BuildServiceProvider methodu ile çektiğimiz bir servisi artık IServiceProvider ile yüklemeye karar verdik.

Geçişi sağladıktan sonra metrikleri takip ettiğimizde çok ciddi düşüşün olduğunu fark ettik. Bottleneck’e sebep olan şeyin Startup’da Singleton olarak eklediğimiz IServiceCollection Instance’ının BaseController içerisinde tekrar yeni bir IServiceCollection üzerinden alınması olduğunu keşfettik ve IServiceCollection yerine IServiceProvider ile ihtiyacımız olan Dependency kurgusunu sağladık. Böylece sorun ortadan kalkmış oldu.

Bu süreçte yaşanan sorunlar nedeniyle bizi hoşgörüyle karşılayan tüm Velocity müşterilerine, Fatih Doğan, Fatih Memiş ve tüm Velocity takımına teşekkür ederim.