Müşteri Hakkında
ABD’de yerleşik bir aracı kurum olan müşteri, 90’lı yıllarda piyasaya sürülmüş olan, kendisine ait bir platform üzerinden finansal varlıkların alım-satımını yaptırmaktadır. Söz konusu finansal varlıklar arasında hisse senetleri, imtiyazlı hisse senetleri, vadeli işlem kontratları, BYF’ler, foreks, opsiyonlar, kriptopara, yatırım fonları ve sabit getirili menkul kıymetler yer almakta, aracı kurum ayrıca kredili alım-satım ve nakit yönetim hizmetleri de sunmaktadır. Şirketin müşteri sayısı 11 milyon olup, bu müşterilerin varlıkları 1 trilyon Dolara ulaşmaktadır. Alım-satım platformundan her gün 500.000’den fazla işlem geçmektedir.
Sorun
Şirketin artık eskimiş olan risk hesaplama aracında işlem gören hesap adedi düzenli ve logaritmik olarak artmaktaydı. Üstelik, başka bir şirket ile yeni gerçekleşen birleşmeden dolayı, hesap sayısının ikiye katlanması beklenmekteydi.
Risk hesaplama aracı neredeyse azami kapasitede çalışmakta iken, müşteri dikey ölçekleme yönünde tüm bilişim kaynaklarını tüketmiş durumdaydı. Böylece, tahsis edilen çok büyük bellek blokları (her bir Java süreci başına yüzlerce gigabayt), performans sorunlarına yol açmıştı.
Mevcut durumun tüm yönleri dikkate alındığında, sistem performansını artıracak ve risk hesaplama süresini iki dakikadan 15 saniyeye indirecek bir çözüme ihtiyaç duyulmaktaydı. Risk hesaplama süresi, bir hesabın risk hesaplama kuyruğuna girdiği an ve operasyonun sonuçlandığı an arasındaki süre olarak dikkate alınmaktadır.
Çözüm
Devexperts daha önce de bu müşteri ile çalıştığı için, sistem özellikleri bilinmekteydi: sürekli artan hesap adedi, ve bununla ilişkili olarak yavaşlayan performans. Söz konusu performans ve gecikme sorunlarının çözülmesine yönelik olarak yapılacak teknoloji ve algoritma araştırmalarında, müşteri mümkün olduğunca geniş perspektiften bakılmasını istemiştir.
Müşteri, sistem görevlerini onlarca ana makine arasında bölüştürmekteydi. Bu konu derinlemesine araştırıldıktan sonra, bellek içi data grid çözümünün Apache Ignite kullanılarak yeniden yapılandırılmasına ve güncellemenin eski sisteme uygulanmasına karar verilmiştir. Bu çözüm sayesinde, müşteri ana makine adedini ciddi oranda artırarak performansta artış ve gecikme sürelerinde azalma sağlayabilecekti.
Bellek içi data grid çözümü, birbirine bağlı sistem görevlerinin yerine getirilmesi için yüzlerce ana makineyi birleştirebilmektedir. Geliştirilen çözüm içinde, hesapların risk hesaplamaları yapılırken bu birleştirme işe yaramaktadır. Bu çözüm ile, müşteri sistem görevlerini ana makineler arasında yeknesak ve verimli bir şekilde dağıtabilecek, ardından sisteme hesaplama talebi iletebilecektir. Bu talep iletme sürecine “map-reduce” adı verilmektedir. Burada müşteri Apache Ignite API’sini kullanarak sisteme hesaplama talebi iletmekte, bu talepler de ana makinelerden oluşan büyük bir ağa iletilmektedir. Ana makinelerin her biri, kullanıcı talep parametreleri içinden kendisine düşen kısmını yanıtlayacaktır.
Bu çözümün devreye alınması, müşteriye artık çok daha fazla hesap işleyebilme olanağı vermiş, yatay ölçekleme yönünde uzun vadeli fırsatlar sunmuştur.
Bellek içi data grid çözümünü önerdiğimiz zaman, bunun bu sorun özelinde anahtar teslim, veya kesin çözüm olmadığını biliyorduk. Çözümün müşterinin ihtiyaçlarını ve amaçlarını karşılayabilmesi için, çok gayret sarf edilmiştir. Devexperts uzmanları, bellek içi data grid çözümünün ince ayarlarının yapılmasını, ayrıca hesaplama algoritmasının ve hesapların yeni risk hesaplama aracına aktarılmasını sağlamıştır.
Uygulamadan önce ve sonra: performans parametreleri ve donanım gereksinimleri
Eski risk hesaplama aracı | Yeni risk hesaplama aracı | |
Donanım | 8 adet büyük sunucu, her biri 48 CPU çekirdekli, her bir sunucuya yüzlerce gigabayt’lık öbek atanmış | 40 adet genel amaca yönelik sunucu, her biri 16 CPU çekirdekli, toplamda 80 adet grid node’u, her bir node başına 48Gb öbek |
Hesap Adedi | 2M | 5M |
Gecikme | 2 dakika | 1-2 saniye |
Çöp toplama duraklaması | Zamanın %15-25’i | Zamanın %2-3’ü |
Ort. CPU kullanımı (ya da, verimlilik) | %30-40 | %90-95 |
Dinamik, yatay ölçekleme | x | v |
Hata toleransı | x | v |
Sonuçlar
Müşterinin eski sistemi sadece onlarca ana makineyi desteklerken, bellek içi data grid çözümü yüzlerce adedi desteklemektedir. Öncelikle, müşterinin hesap ve algoritma verileri korunmuştur.
Nihayetinde, yaptığımız çalışmalar sayesinde her bir ana makineye tahsis edilen öbek bellek ve hesap adedi azalmıştır. Bu şekilde, hesaplamalar çok daha hızlı bir şekilde sonuçlandırılabilmiştir. Ana makine başına düşen hesap sayısı azaldıkça, sistemin veri işleme süreci kısalmaktadır. İlk durumda müşterinin gecikme süresi 2 dakika iken, bunun 15 saniyeden az olmasını istemişlerdi. Hem bellek içi data grid çözümü, hem de kapsamlı ve destekleyici araştırma ve sistem geliştirme çalışmasını takiben, 1-2 saniyelik gecikme süresi elde edilmiştir.
Müşterinin sistemi artık on milyonlarca hesabın verisini işlemektedir.