50 Milyon Ziyaretçili Web Sitesini Nasıl Sıfırdan Yazdık?

Kemal Ogün Işık
8 min readNov 9, 2016

Aylık 50 milyondan fazla ziyaretçisi, günde 125 milyondan fazla kullanıcı etkileşimi olan hurriyet.com.tr’nin neredeyse tüm mimarisini ve sunucularını değiştirip sıfırdan kodladık.

2014 yılının son aylarında, kullanılan altyapının getirdiği kısıtlamalar yüzünden değişiklik ihtiyacı doğdu ve web tabanlı yeni bir içerik yönetim sistemine geçme kararı alındı.

Süreci hızlı bir şekilde ilerletmek için hazır bir ürün alınmak isteniyordu ve araştırmalara başlandı. Yurt içi ve yurt dışından firmalar ile uzun süren görüşmeler ve demo seansları yapıldı.

Alternatifler incelenip değerlendirildikten sonra Doğan TV bünyesinde geliştirilmiş, CNN Türk ve Kanal D tarafından da kullanılan içerik yönetim sistemi Quark ile yola devam etme kararı alındı. Altyapı ve kullanılan teknolojiler bakımından 3. parti alternatiflerinden çok önde olması, hurriyet.com.tr yayıncılık ihtiyaçlarına uygun esnekliğe sahip olması bu seçimde büyük rol oynadı.

Quark üzerinde istenen özellikleri geliştirmek, eski içerikleri yeni sisteme aktarmak ve yeni sistemle yayına çıkacak bir ön yüz projesi hazırlamak için Hürriyet binası içerisinde Doğan TV ve Hürriyet’ten gelen ekiplerle bir takım oluşturuldu. Takım ismi olarak Ghostbusters belirlendi ve 1 Nisan 2015 tarihinde çalışmalara başlandı.

Ghostbusters takımının bir üyesi olarak size bu süreç içerisinde ve sonrasında yaşadığımız zorlukları ve bu zorlukları nasıl çözdüğümüzü hem yararlanmak isteyenlere yardımcı olması açısından hem de tarihe düşülmüş bir not olması açısından paylaşmak istiyorum.

Çevik Süreçler

Bir yandan altyapı değişikliği için adımlar atılırken, bir yandan da yazılım ekipleri çevik yazılım süreçlerine geçiş yapmaya çalışıyordu. Altyapı değişikliği projesi de bu sürece dahil edilerek, projenin Scrum ile ilerlemesine karar verildi.

Yapılacak işlerin listesini çıkarmak için uzun süren hararetli toplantılar yapıldı ve yapılacak maddeler çıkartıldı. Bu maddeler başlangıç için bize bir yol gösterip, doğru yolda ilerlememizi sağladı.

Projenin ilerleyen aşamalarında, gözden kaçan maddeler için yine uzun toplantılar yapıp yeni maddeler eklemek zorunda kalmamıza ve süre baskısının işleri daha da zor hale getirmesine rağmen Scrum’ın bu projenin düzgün ilerlemesinde çok yararlı olduğunu düşünüyorum.

Mevcut hurriyet.com.tr Altyapısı

Geçiş öncesi kullanıcıların hurriyet.com.tr’ye yaptıkları istekler, sunucu tarafında daha önceden oluşturulmuş statik dosyalar üzerinden karşılanıyordu. Üzerinde herhangi bir veritabanı bağlantı isteği bulunmayan bu dosyalar çok hızlı bir şekilde kullanıcıya ulaştırılıyordu.

Bu dosyaların içeriklerini üreten içerik yönetim sistemi bir Windows Forms uygulamasıydı ve veritabanı olarak Microsoft SQL Server kullanıyordu. Yayındaki içerikler ve arşivdeki içerikler için iki farklı sunucu kullanan bu sistem her bir sunucuda bir aydan yeni ve daha eski içerikleri saklamak için iki farklı veritabanı kullanıyordu.

Haberlerin ve kategorilerin şablonlarını oluşturmak için ise farklı web arayüzü ve veritabanı mevcuttu.

İçerik yönetim sistemi ve şablon yönetimi arasında bağlantıyı kuran web servisi, içerikler yayına alınırken devreye girip içeriği uygun şablonla birlikte üretmiş oluyordu.

Bu yapının en kısıtlayıcı tarafı, şablonlar üzerinde yapılan değişikliğin sadece değişiklik yapıldığı tarihten sonra yayınlanan içerikler üzerinde etkili olmasıydı. Aynı şablonu kullanan sayfalardan bir ya da bir kaçına özel geliştirme yapma ihtiyacı çok sık karşılaşılan bir durumdu. İç içe if blokları ile uzayan, url bazlı kod blokları çalıştıran şablonlar mevcuttu.

Editörlerin Windows cihazlar dışında ya da şirket dışından sisteme erişememesi de değişimi zorunlu kılan nedenler arasında yer alıyordu. Aynı şekilde mobil cihazlardan içerik yönetimi imkanı da yoktu.

Yeni sistemle birlikte şablonlar ve içerikler ortak bir yerden yönetilecek hale getirildi ve iki sunucuya yayılmış dört veritabanı üzerindeki içerikler ortak bir merkezde toplandı.

Birleştirilecek Alan Adları

Hürriyet 1997 yılından bu yana internet sitesi üzerinden yayınlanan içerikleri (galeriler ve videolar hariç) dört farklı alan adı üzerinde sunmaya devam ediyordu.

  1. www.hurriyet.com.tr
  2. hurarsiv.hurriyet.com.tr
  3. webarsiv.hurriyet.com.tr
  4. sosyal.hurriyet.com.tr

İlk üç sitedeki tüm içerikleri yeni sisteme aktarıp geçişten sonra sadece www.hurriyet.com.tr adresinin yayın hayatına devam etmesine, sosyal.hurriyet.com.tr üzerinde bulunan içeriklerin ise sosyal üzerinde kalmasına karar verildi.

Aktarımı yapılacak sitelerin her biri farklı veritabanlarında tutuluyordu ve bu veritabanları içerisinde farklı yapıda tablolar yer alıyordu. Aktarım için yazdığımız uygulamayı test ederken ise bazı içeriklerin veritabanında hiç yer almadığını sadece statik dosya olarak bulunduğunu fark etmiştik. İçeriklere ait resimlerin de bir kısmı veritabanında, bir kısmı ise statik dosya olarak sunucularda yer alıyordu.

Aktarım uygulaması bu sorunlar göz önünde bulundurularak yazıldı ve aktarılan içerikleri denetlemek ve düzgün aktarılıp aktarılmadığını test etmek için ise bir başka uygulama geliştirildi.

Her ne kadar içerikleri aktarsak ve aktarılan içerikleri test etsek de en büyük soruna cevap veremiyorduk. Bugüne kadar üretilen kaç farklı URL mevcuttu ve dışarıda varlığını sürdüren hurriyet.com.tr içeriklerinin tamamını aktarabilmiş miydik? Bu sorunun cevabını bulmak için Hürriyet’teki diğer birimlerle yaptığımız toplantılarda bir sonuca varamadık. Geçiş sonrası ise başımızı en çok ağrıtan konu aktarılmayan içerikler yüzünden alınan HTTP 404'lerin sayısındaki artıştı.

Gözden kaçan içerikler için geçiş sonrası yeni bir çalışma başlatıldı ve eksik içerikler gecikmeli de olsa yeni sisteme dahil edildi.

Yeni URL’lerin Belirlenmesi

1997'den bu yana sistem içerisinde bir çok URL tipi denenmiş ve bu sebeple URL’lerde standart bir şablon oluşmamıştı. Eski URL yapıları:

  1. webarsiv.hurriyet.com.tr/1999/02/23/hurriyet.asp
  2. hurarsiv.hurriyet.com.tr/goster/ShowNew.aspx?id=14507914
  3. hurarsiv.hurriyet.com.tr/goster/haber.aspx?id=18241604&yazarid=12
  4. www.hurriyet.com.tr/ekonomi/4807974.asp

Yeni sistemle birlikte oluşacak URL’lerin nasıl olması gerektiği ile ilgili SEO birimiyle toplantılar yapıldı. URL yapısı için yapılan başlıca iki tartışma vardı. Birincisi haber detay için kullanılacak URL içerisinde kategori bilgisinin yer alması, ikincisi ise URL’in sonundaki haberin id’siydi (### kısmı). Kategori bilgisinin zaten içeriklerde tanımlı olduğu için gerekli olduğunu düşünüyorduk. Id bilgisinin ise sisteme otomatik olarak eklenen içeriklerin URL’lerinin oluşumunda sisteme kolaylık sağlayacağını savunuyorduk. Toplantılar sonucunda yeni URL yapısı için basit bir şablona karar verildi. Kategori bilgisi URL’de yer almayacak fakat haber id’si bilgisi yer alacaktı.

Kategoriler için:
www.hurriyet.com.tr/kategori-adi/

İçerikler için:
www.hurriyet.com.tr/icerigin-basligi-###

Ön yüzün baştan geliştirilmesi

Değişimle birlikte altyapıda büyük değişiklikler olmasına rağmen kullanıcılara temas eden noktada herhangi bir değişiklik olmayacaktı. Alınan kararla www.hurriyet.com.tr ön yüzü aynı şekilde görünmeye devam edecekti.

Ön yüz aynı şekilde görünmeye devam ediyor olsa da altyapı tamamen değişeceği ve kullanılan şablon yöneticisinin mantığı değiştiği için var olan şablonların sıfırdan üretilmesi gerekiyordu. Geçen süre zarfında projedeki ön yüz işinin düşünülenden çok daha fazla olduğunun farkına varıldı fakat Ghostbusters’ın hurriyet.com.tr tarafını geliştiren dört kişilik ekibinde sadece bir tane ön yüz yazılımcısı vardı. Süreç boyunca bu eksiklik sıkıntıları da beraberinde getirdi.

Çözüm olarak projenin son aşamalarında ön yüze yardımcı olması için ek kaynaklar sağlandı fakat projeye geç dahil oldukları için uyum sağlamaları vakit aldı ve istenilen katkı bu yüzden sağlanamadı.

Yeni ön yüz projesi kapsamında js, css, resim, vb. www.hurriyet.com.tr uygulamasından ayrılarak farklı bir proje olarak geliştirmeye başlandı. www.hurriyet.com.tr uygulaması içerisindeki js ve css dosyalarına içerik yönetim sistemi üzerinden dinamik versiyonlama sistemi getirildi.

Farklı resim boyutları

Geçiş öncesi sistemde dinamik olarak resimleri boyutlandıran bir uygulama bulunmuyordu. İstenilen boyutlarda haber resimleri üretilip sunucularda ya da veritabanında saklanıyordu.

Bu yöntem fiziksel alan kaybı yarattığı gibi yeni bir tasarımda daha önce üretilmeyen resim boyutlarının kullanılamaması gibi sıkıntıları da beraberinde getiriyordu.

Geçiş sonrası resimleri otomatik olarak boyutlandıran Django uygulaması devreye alındı, daha sonra bu uygulama geliştirilerek Tornado uygulamasına çevrildi. Şu anda sistem dinamik olarak istenilen boyutta ve istenilen kalitede resim oluşturabiliyor.

Geçiş sırasında içeriklerdeki tüm resimler yeni sisteme aktarıldı ve metin içerisindeki resimlerin adresleri yeni sisteme bakacak şekilde değiştirildi.

Zamanlanmış görevler

Sistem içerisinde zamanla biriken zamanlanmış uygulama sayısı oldukça fazlaydı ve yönetimleri sayıları arttıkça daha zor bir hal alıyordu.

Yeni sistemle birlikte bu uygulamaların sayısını en aza indirmeye çalıştık. Geliştirilmesi gereken uygulamaları ise Python kullanarak tek bir proje altına aldık. Python kullanarak MongoDB üzerinde işlem yapmak oldukça rahat olduğu için Python’a geçmek uygulama geliştirme hızımızı artırdı.

/anasayfa/ Yönlendirme Sıkıntısı

www.hurriyet.com.tr/anasayfa/ adresi Hürriyet internet sitesinin açılış sayfasıydı ve www.hurriyet.com.tr adresi HTTP 301 ile /anasayfa/ adresine yönleniyordu.

Yeni sistemle birlikte /anasayfa/ adresini kaldırıp açılış sayfasını www.hurriyet.com.tr yapmak istiyorduk fakat 301 yönlendirmeleri internet tarayıcılarının önbelleğinde tutulduğu için /anasayfa/ adresini www.hurriyet.com.tr adresine yönlendirmenin kullanıcıları sonsuz bir döngüye sokmasından korkuyorduk.

Geçişten önce www.hurriyet.com.tr adresinden /anasayfa/ adresine olan yönlendirmeyi HTTP 302'ye çekip, bu yönlendirme çakışma senaryosunu bulabildiğimiz tüm cihazlarda test ettik. Testlerimiz sırasında herhangi bir sorunla karşılaşmadık ve geçiş sonrası da bu konuyla ilgili bir sıkıntı yaşamadık.

Geçiş süreci

Projenin başında, bir gece operasyonuyla tüm altyapıyı değiştirip www.hurriyet.com.tr’yi en yeni haliyle yayına almayı planlıyorduk fakat sistem ekibiyle yaptığımız toplantılarda böyle bir geçişin çok riskli ve öngöremediğimiz sorunlara açık olduğuna kanaat getirdik.

Geçişi kademeli olarak yapmaya karar verdik ve sırayla kategorileri yeni altyapıya geçirmeye başladık. Kategori geçişleri, çok fazla kullanıcı sorun yaşamadan, hatalarımızı tespit edip çözüm bulmamızı sağladı.

Yaklaşık bir ay her iki sistem editörler tarafından kullanıldıktan sonra eski sistemi tamamen devreden çıkarıp yeni sisteme geçiş yaptık. Kategori sayfalarından çıkardığımız tecrübeler sonucunda ana sayfanın yeni sisteme geçişi sıkıntısız bir şekilde gerçekleştirildi.

Yeni hurriyet.com.tr Altyapısı

Projede kullanılan teknolojilerin bir kısmı

Eski sistemdeki tüm dosyalar statik olarak sunulduğu için ek bir ön bellek katmanına hiç ihtiyaç duyulmamıştı fakat yeni sistem dinamik bir şekilde içerikleri sunuyordu.

Kategori ve içerik sayfalarını ön bellekte tutup, sunucular üzerindeki yükü azaltması için yeni sistemde Varnish tercih edildi. Kullanıcıların ilk isteğinin böylece ön bellek üzerinden karşılanması sağlandı. Bu sistem www.hurriyet.com.tr sunucularına gelen istekleri önemli bir biçimde azalttığı gibi, sorun durumunda sağlıklı çalışan en son kopya üzerinden sistemi devam ettirebildiği için yeni altyapının en önemli parçalarından biri oldu.

Geliştirilen yeni özelliklerin sisteme istenilen anda aktarılabilmesi, yeni özellikte çıkabilecek olası bir hata durumunda sağlıklı çalışan bir önceki kopyaya kolay bir şekilde dönülebilmesi için Teamcity ve Octopus ikilisi tercih edildi. Bu iki uygulama şu anki geliştirme ortamımızda ve canlı yayına çıkışlarda bize çok büyük kolaylık sağlıyor.

İçeriklerimiz artık MongoDB ve Elastic üzerinde yer alıyor. Döküman veritabanı modeli isteklerimizin çok hızlı geri dönmesi sağladığı için bir çok açıdan bize çok faydalı oldu fakat kaybettiğimiz ilişki bilgisinin de başımızı ağrıttığı bir çok nokta var. Aramalar için kullandığımız Elastic’ten ise son derece memnunuz.

Yaklaşık bir senedir Hürriyet’te kullanılan yeni altyapıya nasıl geçildiğini ve ne gibi sorunlarla karşılaşıldığını elimden geldiğince anlatmaya çalıştım. Konuyla ilgili soru, görüş ve önerilerinizi yorum kısmından iletebilirsiniz.

Yazıyı beğenmeyi ve paylaşmayı unutmayın.

--

--