122 Milyon Satır Analytics Datasını Nasıl Türkiye’ye Getirdik?
Selam!
Yakın zaman içerisinde Google Cloud — europe sunucularından, Hardal’ın Türkiye sunucuları için kullandığı Huawei Cloud — Istanbul sunucularına transfer ettiğimiz 122 Milyon satır analytics datasının transfer sürecinden bahsedeceğim.
Özetle
Tablo yapılarımızı değerlendirerek iki seçenek arasından karar verdik ve sunucular arası transferi, ClickHouse’un yerel tablo transfer fonksiyonunu kullanarak gerçekleştirdik. Bu süreç yaklaşık 24 saat sürdü ve akıl sağlığımızdan bir miktar götürdü.
Transfer sürecinden önce mevcut tablo yapımızdan ve önümüzdeki seçeneklerden bahsetmem gerek:
Tablo Yapımız
Sunucularımızda veritabanı olarak ClickHouse’un MergeTree Engine tablolarını kullanıyoruz. Toplamda dört tablomuz bulunuyor: Analytics, Config, Telemetry ve iki adet optimize edilmiş Materialized View. ClickHouse’u tercih etmemizin en önemli nedenlerinden biri, aşağıda PostgreSQL ile yapılan karşılaştırmada da görebileceğiniz performans farkı. 👇Detaylar burada.
Tüm event verileri ham (raw) biçimde analytics tablosunda saklanıyor. Daha verimli okuma işlemleri için, bu ham veriyi iki ayrı tabloya aktardığımız bir optimizasyon sürecimiz var. Yani analytics tablosuna gelen her veri, otomatik olarak belirttiğim iki Materialized View tablosuna formatlanarak yazılıyor.
Transfer Süreci
Gelelim zurnanın zort dediği yere. Transfer süreci.
Aslında bu süreç genellikle sorunsuz ilerliyor, ancak konu 120 milyon gibi devasa bir veri hacmi olunca işler biraz karmaşık hale geliyor. Bu noktada önümüzde iki seçenek vardı:
1 — Mevcut dataları exportlayıp (CSV ya da native sql) yeni sunucu içine manual aktarmak
2 — Clickhouse’un native transfer fonksiyonlarını kullanıp otomatik bir şekilde sürecin tamamlanmasını beklemek
İlk olarak birinci yöntemi denedik. Ancak verinin büyüklüğü nedeniyle manuel dışa aktarma yönteminin sonucunu ancak çocuklarımızın görebileceğini fark edince, ikinci seçeneğe yönelmeye karar verdik.
Bu noktada tablo yapımızın büyük avantajını gördük. Materialized View tabloları, analytics tablosunu otomatik olarak inheritlediği için, aslında yalnızca analytics tablosunu transfer etmek, tüm tabloların otomatik olarak doldurulmasını sağlayacaktı.
Plan harikaydı, ve hemen aksiyon almaya başladık.
INSERT INTO remote(‘destination_ip:port’, ‘default.table_name’, ‘username’, ‘password’)
SELECT * FROM target_table_name ;
Bu yöntemi kullanarak işlemi başlattık. İşlemin %1’inin tamamlanması yaklaşık 5 dakika sürdü. Basit bir matematikle hesapladığımızda (5 × 100), işlemin yaklaşık 500 dakika (~8 saat) içinde tamamlanacağını öngördük.
Gece yatarken bırakırız, sabah olur işte.
Tabiki de öyle olmadı :D
Google Cloud’un tarayıcı tabanlı SSH bağlantısı bu kadar uzun süren işlemleri desteklemiyordu ve sık sık timeout hatası alıyorduk. Ancak asıl sorun bu değildi. Zamanla yarışıyorduk — her geçen saniye analytics tablosuna binlerce yeni satır ekleniyor ve bu da transfer sürecinin giderek uzaması anlamına geliyordu.
Üst üste yaşadığımız 3–4 başarısız denemenin (fazladan 24 saat kayıp) ardından artık daha sağlam bir yöntem deneme zamanı gelmişti. Bu yüzden, tarayıcı tabanlı SSH yerine doğrudan kendi terminalimizden SSH bağlantısı kurarak süreci yeniden başlattık.
Neden Kendi Terminalimizden SSH Bağlantısı Daha Sağlıklı?
Google Cloud’un tarayıcı tabanlı SSH bağlantıları, belirli bir süre işlem yapılmadığında otomatik olarak kapanır (timeout). Uzun süren işlemler için bu büyük bir dezavantajdır.
Lokal terminal üzerinden yapılan SSH bağlantıları, timeout sınırlarına takılmadan kesintisiz çalışabilir.
Tarayıcıdan yapılan SSH bağlantıları ağ kesintilerine ve sekme kapanmalarına karşı daha hassastır.
Lokal terminalden bağlandığımızda, ağ dalgalanmalarına rağmen bağlantıyı sürdürebiliriz.
tmux veya screen gibi araçlar kullanarak bağlantıyı kopsa bile işlemi arka planda çalıştırabiliriz.
Tarayıcı kapansa bile süreç devam eder.
12 saatin sonunda transferin %50’si tamamlanmıştı ve artık timeout problemi yaşamıyorduk. Süreç sorunsuz ilerliyordu.
Ancak, “Kaçırdığımız 24 saat içinde ne kadar veri eklenmiş olabilir ki?” sorusunu fazlasıyla hafife aldık.
Ve zafer! 🎉 Yaklaşık 24 saat sonunda, tüm verileri Google Cloud’un Avrupa sunucularından Huawei Cloud’un Türkiye sunucularına başarıyla taşıdık. Bu süreç boyunca yaşadığımız tüm zorluklara rağmen, sonunda transferi tamamlamış olmanın haklı gururunu yaşadık. 🚀
Bize de on numara bir anı kalmış oldu.
Daha optimize bir çözüm mümkün müydü? Tabii ki.
Sonuca ulaştık mı? Kesinlikle.
🎯 Mission completed. 🚀
Sevgiler ve saygılar
by.
Top comments (0)