3 Haziran 2023 Cumartesi

Dönüşüm Hikayeleri 4 - IYS - Veri Eşitleme

     S.A. Arkadaşlar,

    Son dönemlerde yaşadığım en yoğun hafta olabilir benim için, neyse ki acısıyla tatlısıyla atlattık ve bu yorgunluğa sebep olan konuyu ele alarak biraz rahatlamak istedim, yazmak iyi geliyor, bir de bu tecrübelerimizi not almak da istiyorum. İletişim Yönetim Sistemi (IYS) ile veri tabanımız arasında olan verileri eşitlememiz (sync) gerekiyor ve belirli sebepler nedeniyle bunu pazartesiye kadar bitirmemiz gerektiğini Çarşamba akşamı öğrendik. Stresli hikayemiz böylece başlamış oldu. Hazırsak başlayalım.

    Veri tabanımızda yaklaşık 3.5 milyon kullanıcı kaydı bulunmaktadır. Bunların sms ve eposta verilerini ele alırsak yaklaşık 7 milyon kayıt ortaya çıkmaktadır (sms ve eposta istekleri ayrı ayrı iletilmesi gerekiyor). Bu verilerin hepsini güncellememiz gerekiyordu, bunun için farklı durumları uzun uzadıya tartıştık. Çünkü bu verilerin hepsini güncellemek (toplu (bulk) da olsa IYS 1000'er kayıt içeri dahil etmeye müsade ediyor) gerekir. Sadece izin verilen kayıtları göndermek işimizi oldukça kolaylaştıracaktı, o şekilde yapmaya tam karar verirken diğer ekiplerden gelen bilgi doğrultusunda sadece izin verilen kayıtları göndermenin uygun olmayacağını söylediler. Bu konuyu da uzun uzadıya tartıştıktan sonra yine ilk geldiğimiz noktaya geldik ve sadece aktif olan Türkiye'deki kullanıcıları göndermeye karar verdik, böyle veri setimizi biraz düşürmüş olduk. Bunu yapmaya karar verdiğimizde ise bu sefer de karşımıza hangi sistemdeki bilgilerin güncel olacağı durumu ortaya çıktı. (Çünkü IYS çift yönlü olarak çalışmaktadır. Yani isterseniz mobil uygulamadan izin verip, izinleri kaldırabiliyorsunuz, isterseniz IYS'nin kendi sitesi üzerinden izinleri değiştirebiliyorsunuz.) Toplu veri atımında bize bir tarih bilgisi dönmüyor sadece tekli atımlarda bu cevabı dönüyor. Biz de bu cevaba göre oradaki veri mi yoksa bizdeki verinin mi daha güncel olduğuna bakıp tutarlı veriyi sağlayacaktık, fakat bunu yapmak her kayıt için her defasında IYS gidip gelmek anlamına geliyordu bu da bizim için çok mümkün görünmüyordu maalesef.  IYS portalına gidip baktığımızda kendi sistemleri üzerinden güncelleme yapanları listelediği bir ekran vardı, biz bu ekrandaki verileri düzenleyip işlenecek hale getirdik, daha sonra da bunları hariç tutarak kendi veri tabanımızdaki verileri doğru olarak kabul ettik (böylece o kullanıcılar sistem üzerinden bize sms veya email gelmesin dediğinde biz onları tekrar güncellemeyecektik) ve tekrardan toplu bir şekilde verileri atma şansı yakaladık. En son makul olarak vardığımız nokta bu oldu.

    Bu şekilde anlaştıktan sonra kodlamaya başladık. Selman ile pair olarak çalışıyorduk. Bazen birlikte bazen ayrı ayrı çalışmaları sürdürdük. O kodu implemente etmeye giriştiğinde ben de dokümanı okuyarak neleri kullanmamız gerektiğini ve bir yerlerde eksik olup olmadığını çözmeye çalışıyordum ki bize verilen hesap ile içeri giremediğimizi fark ettim. Dokümanı tekrar gözden geçirdiğimizde sistem üzerinden belirli IP'lere izin verilmesi gerektiğini gördük. Bunun için bizim taraftaki ekiplerle görüştüğümüzde canlı ortam için bir bilgisayarımıza izin verebildiler (iznin aktif olması 24 saate kadar sürebiliyormuş, şanslıydık 2-3 saat içinde kullanmaya başladık, ama asıl bomba gelmedi hala :) ). Biz bir yandan çalışmaya bir yandan da farklı noktaları incelemeye devam ettik. Cuma günü saat 5'e doğru kodu öyle veya böyle hazır hale getirebildik, kendi makinemizde ve test kullanıcıları için farklı durumları ele aldık ve iyi kötü kodumuzun hazır olduğuna kanaat getirdik. Neyse bir şekilde platform ekibi ile konuşarak projeyi de sunucuya aldık, ilk çalıştırdığımızda ne görelim? Yetki hatası, maalesef sunucu makinelerimizin IP'leri hala tanımlanmamış, birilerine ulaşmaya çalıştık vs vs ama o saatten sonra nafile gibi bir şey olacağına kadar verdikten sonra önümüzde 2 yol vardı. 1.si Selman'ın bilgisayarına veri tabanına erişme yetkisi, 2.si ise canlı veri tabanından test ortamına veri eşitleme konusu. Biz ikinicisini seçerek yola devam ettik, bu kısım bittiğinde saat akşam 9 olmuştu ve biz tekrardan bilgisayarlarımızın başına geçtik. Selman, Emre ve ben :)

    Kodu çalıştırır çalıştırmaz iş çözülür mü acaba diye düşünüyorduk ama nerde o günler :) Veri tabanından öyle beklemediğimiz değerler geliyordu ki inanılır gibi değildi ve tabi bu veriler IYS tarafından kabul görmeyip bize hata olarak geri dönüyordu, bu arada biz bu çağrılar "restsharp" ile yapıyorduk, fakat dönen cevaplar yeterince açıklayıcı değildi, biz onları alıp "postman"a yapıştırıyoruz, oradan gelen cevap neticesinde kod veya veri tabanı tarafında geliştirmeler yapmaya devam ediyoruz, fakat hatalar bir türlü bitmiyordu. Bunun bu şekilde bitmeyeceğine 3'ümüz de biliyorduk. Postman ile gelen cevap ile kod tarafında verilen hatanın aynı olmaması bize şaşırtıyordu. Selman'ın tavsiyesi ile restsharp yerine "HttpClient" ile istekleri atmaya karar verdik, bu şekilde yaptığımızda istediğimiz şekildeki hataları almaya başladık ve üstelik indeksi de veriyordu, bize gelen bu indeks sayesinde o hatalı veriyi silerek aynı işlemi tekrardan deneyecek şekilde kodumuzu düzenledik ve tekrar denemeye devam ettik. Saatler 1'e doğru geliyordu. Bir süre bilgisayarlar başında beklemeye devam ettik ve kod şimdi tam olarak istediğimiz şekilde çalışmaya başlamıştı. 20 dk sonra işlemler devam ederken biz dağılmaya karar verdik, yaklaşık 3.30 civarlarında Selman'ın paylaştığı ekran çıktısı ile mutlu sona ulaşmıştık...

    Çok yorucu ve stresli bir haftanın son 2 gününü daha da stresli bir şekilde mutlu bir şekilde kapatmayı başardık. Büyük emeği geçen Selman'a ve bizi hiç yalnız bırakmayan yöneticimiz Emre büyük bir alkışı hak etmişlerdi.

    Bu arada tüm bu çalışmaları yaparken kendimizi planlama ve iş yapma konusunda eleştirdik. Bu yazıyı da kendimizi övmek veya benzer bir sebeple değil sadece tecrübelerimizi aktarmak için ele aldık. Yoksa bunun sürdürülebilir bir şey olmadığını hepimiz çok iyi biliyoruz ve bu konuda eksikliklerimizi düzeltmek için gerekli önlemleri de aldığımızı belirtelim.

    Yazıyı azim ve süreklilikle ilgili bir hadis-i şerif ile kapatalım.

Sa’d b. İbrâhim’in, Kâ’b b. Mâlik’in oğlundan naklettiğine göre, Kâ’b b. Mâlik şunları söylemiştir: 
“Resûlullah (s.a.v.) şöyle buyurdu: ‘Mümin taze ekin gibidir. Olgunlaşıncaya kadar rüzgâr onu eğip büker; bazen yere yatırır, bazen de doğrultur (ama o kırılmaz)...’” (Müslim, Sıfâtü’l-münâfikîn, 59)

Hiç yorum yok:

Yorum Gönder