Arama Motorunu Uçarken Değiştirmek
Arama kutusu sitenin en çok kullanılan parçası. Onu bozmadan yenisiyle nasıl değiştirirsiniz? Gölge mod, yedek motor ve tek bir Türkçe harf.
Arama kutusu, bir parfüm veritabanının ön kapısı. Birçok ziyaretçi siteye gelir gelmez bir isim yazar: "sauvage", "baccarat", "erba pura". Sonuç bir saniyenin altında gelmeli ve doğru olmalı.
Bugüne kadar aramayı doğrudan veritabanımız yapıyordu. İşini görüyordu. Ama veritabanının asıl işi veriyi saklamak; arama için özel olarak tasarlanmış bir motor, hız ve yazım hatalarına tolerans konusunda daha fazla imkân sunuyor. Bu yüzden ayrı bir arama motoruna geçmeye karar verdik.
Zor olan yeni motoru kurmak değildi. Zor olan, her gün kullanılan bir şeyi, kimse fark etmeden değiştirmekti.
Bir Kerede Değiştirmek Neden Tehlikeli?
Naif yaklaşım şöyle: yeni motoru kur, test et, bir gün eskisini kapat. Ama testler gerçek trafiği taklit edemez. Kullanıcılar sizin aklınıza gelmeyen şeyleri yazar: yarım kelimeler, Türkçe karakterli marka adları, iki markanın karışımı.
Yeni motor bir sorguda yanlış sonuç verirse, bunu ancak biri o sorguyu yazınca öğrenirsiniz. O kişi de büyük ihtimalle size haber vermez, sadece siteyi kapatır.
Bu yüzden geçişi tek bir anahtar olarak değil, üç kademeli bir düğme olarak tasarladık.
Kapalı, Gölge, Pilot
İlk kademe: kapalı. Arama eskisi gibi veritabanından geliyor, yeni motor hiç devrede değil.
İkinci kademe: gölge. Her arama iki motora birden gönderiliyor, ama kullanıcı yalnızca eski motorun sonucunu görüyor. Yeni motorun cevabı perde arkasında eskisiyle karşılaştırılıyor: kaç sonuç döndü, sonuçların kaçı ortak, hata verdi mi? Bu karşılaştırmaya arama metni dahil edilmiyor, sadece sayılar kaydediliyor.
Gölge mod, yeni motoru gerçek trafikle sınamanın risksiz yolu. Kullanıcı hiçbir şey fark etmiyor, ama biz binlerce gerçek sorguda iki motorun ne kadar örtüştüğünü görüyoruz.
Üçüncü kademe: pilot. Artık sonuçları yeni motor veriyor. Ama eski motor kaybolmuyor, yedekte bekliyor.
Yedek Motor Her Zaman Hazır
Pilot modda yeni motor hata verirse, zaman aşımına uğrarsa ya da cevabı tutarsızsa, aynı istek anında eski motora yönlendiriliyor. Kullanıcı yine sonucunu alıyor, sadece eski yoldan.
Burada ince bir ayrım var. Yeni motor "bu aramaya uyan parfüm yok" derse, bu geçerli bir cevap; yedeğe gidilmiyor. Yedeğe yalnızca motor gerçekten arıza verdiğinde gidiliyor. Aksi halde her boş sonuç iki kez aranırdı ve sorun gizlenirdi.
Arka arkaya hatalar gelirse yeni motora bir süre hiç sorulmuyor. Elektrik tesisatındaki sigortaya benziyor: arıza tekrarladığında devre kendini kesiyor, her istek zaman aşımını beklemiyor. Kısa bir süre sonra devre yeniden deneniyor.
Yarım Yüklenmiş Bir Katalog
Gözden kaçması en kolay arıza, motorun çalışır görünüp yanlış cevap vermesi.
Yeni motor, kataloğunu veritabanından düzenli olarak yeniden yüklüyor. Bu sırada, örneğin bir yeniden başlatmadan sonra, katalog yarım kalmış olabilir. Motor her soruya hatasız cevap veriyor, ama 281.000 parfümün yalnızca bir kısmını biliyor. Hiçbir hata mesajı yok, sadece eksik sonuç var.
Bunu yakalamak için her cevabın yanında motorun kaç kayıt bildiğine bakıyoruz. Bu sayı doğrulanmış bir alt sınırın altındaysa cevap geçersiz sayılıyor ve arama eski motora düşüyor. Katalog tamamlanınca yeni motor kendiliğinden devreye dönüyor.
Tek Bir Harf: ı
Geçişin en öğretici hatası tek bir harften çıktı.
Türkçede dört "i" var: i, İ, ı, I. Çoğu yazılım bunları İngilizce kurallarına göre işliyor ve büyük "I"nın küçüğünü "i" sanıyor. Türkçede ise "ı". Bu, "INITIO" gibi bir marka adını küçültürken "ınıtıo"ya dönüştürebiliyor ve eşleşme bozuluyor.
İlk çözümümüz basitti: tüm "ı"ları "i"ye çevir, sorun kalmasın. Ama bu, adında gerçekten "ı" olan Türkçe ürünleri aranamaz hale getirdi. Veritabanında "ı" ile kayıtlı bir isim, "i"ye çevrilmiş bir sorguyla artık eşleşmiyordu.
Doğru kural şuydu: dönüşüm iki tarafta aynı olmalı. Yeni motorda hem kataloğu hem sorguyu aynı fonksiyondan geçiriyoruz, böylece ikisi her zaman aynı biçimde. Eski motorda ise isimler veritabanında olduğu gibi duruyor, bu yüzden sorgudaki "ı"ya dokunmuyoruz. Tek bir harf için iki farklı kural, ama ikisi de aynı ilkeden çıkıyor: karşılaştırdığınız iki şeyi aynı biçime getirin.
Sonuç
Geçiş aşamalı ilerliyor ve eski motor her zaman yedekte. Kullanıcı açısından değişen tek şey, aramanın hızlı ve isabetli kalması.
İyi bir altyapı değişikliğini kimse fark etmez. Fark edildiyse bir şeyler ters gitmiştir. Gölge modun, yedek motorun ve sigortanın tek amacı, bu değişikliği fark edilmez kılmak.
Diğer Yazılar
281.000 Parfüm, Tek Platform
Türkçe parfüm keşfi neden bu kadar zor ve 281.000 ürünü tek bir yerde organize etmek ne anlama geliyor?
6 dk okumaBir Parfümün Ailesi Nasıl Belirlenir?
Çoğu parfüm bir koku ailesi etiketiyle gelmiyor. Bir algoritmaya koklamayı nasıl öğretirsiniz?
8 dk okumaPuan Nasıl Hesaplanır?
Bir puan gerçekliği yansıtmalı, sadece hacmi değil. 5 düşünceli kullanıcı oyu, 10.000 referans puanın yanında nasıl görünür olur?
7 dk okumaEstetik Veritabanı
Çoğu ürün veritabanı resimli bir elektronik tablo gibi görünür. Biz tasarım müzesi gibi hissettirmesini istedik.
7 dk okuma281.000 Sayfa Nasıl Hızlı Kalır?
281.000 ürün sayfasına sahip olmak, her biri 3 saniye sürüyorsa bir anlam ifade etmez. Hız bir özellik değil, saygıdır.
7 dk okumaAynı Parfümün İki Sayfası
İki kaynaktan veri toplarsanız, aynı parfüm iki kez belirir. 7.080 kopyayı, hiçbirini silmeden nasıl tek sayfada birleştirdik?
7 dk okumaKoku Motorunu Yeniden Eğitmek
İlk koku ailesi algoritmamız elle ayarlanmış ağırlıklarla çalışıyordu. İkincisi, elimizdeki veriden kendi kendine öğrendi. Neden ve nasıl yeniden yazdık?
8 dk okuma