GoSuda

Veritabanı Sunucuları ve Gömülü Veritabanları: Mimari ve G/Ç Özelliklerinin Karşılaştırılması

By gosunuts views ...

Veritabanı Sunucusu

Veritabanı sunucusu, bağımsız bir sunucu süreci olarak çalışan ve uygulamaların isteklerini ağ üzerinden işleyen veritabanı anlamına gelir. MySQL, PostgreSQL, Oracle DB gibi bizim için tanıdık olan RDBMS'lerin çoğu bu modele karşılık gelir. Veritabanı sunucusu aşağıdaki avantajlara sahiptir.

  • Merkezi yönetim: Veriler tek bir yerde bütünleşik olarak yönetildiğinden tutarlılık, güvenlik, yedekleme ve kurtarma işlemleri kolaylaşır.
  • Kaynak bağımsızlığı: Kendine ait CPU, bellek ve depolama alanı tahsis edilerek uygulamanın durumundan bağımsız, istikrarlı bir performans garanti edilir.
  • Yüksek eşzamanlılık ve ölçeklenebilirlik: Çok sayıda kullanıcının eş zamanlı erişimine uygun şekilde optimize edilmiştir ve kümeleme veya çoğaltma yoluyla yatay ölçeklendirme nispeten kolaydır.

Bu özellikler sayesinde veritabanı sunucusu, son on yıllarda yazılım altyapısının standardı haline gelmiştir. Ancak teknolojik gelişmeler ve çevresel değişiklikler nedeniyle bazı ortamlarda veritabanı sunucusunun dezavantajları ortaya çıkmaya başlamış ve bu alternatif olarak gömülü veritabanları yeniden dikkat çekmektedir.

Yeni Eğilim: Gömülü Veritabanı

Gömülü veritabanı, ayrı bir sunucu süreci gerektirmeden, uygulamaya kütüphane biçiminde dahil edilen ve aynı süreç içinde çalışan bir veritabanı motorudur. SQLite, LevelDB, RocksDB gibi veritabanları temsilci gömülü veritabanlarıdır. Bu gömülü veritabanlarının güncel teknoloji ortamında güçlü bir alternatif olarak öne çıkmasının arka planı şöyledir.

  • SSD'nin ortaya çıkışı

    HDD ağırlıklı sistem ortamlarında, sıralı veri okuma/yazma performansına kıyasla rastgele erişim performansı önemli ölçüde düşüktü. Bu nedenle disk G/Ç işlemlerini en aza indirmek ve bellek önbellekleme yeteneğini en üst düzeye çıkarmak performans optimizasyonunun temeliydi. Veritabanı sunucuları buna uygun olarak büyük önbellekler işletmiş ve yazma işlemlerini toplu halde işleyerek HDD'nin fiziksel sınırlarını aşmıştır.

    Ancak SSD'nin ortaya çıkışı bu varsayımı tamamen değiştirmiştir. SSD, HDD'ye kıyasla rastgele G/Ç performansının binlerce kat daha hızlı olduğu ve gecikme süresinin de önemli ölçüde kısa olduğu bir teknolojidir. Sonuç olarak "disk G/Ç en büyük darboğazdır" yönündeki geleneksel kanı ortadan kalkmış, bunun yerine ağ üzerinden uzak bir veritabanı sunucusuna erişimde ortaya çıkan gecikme yeni bir darboğaz olarak öne çıkmaya başlamıştır.

  • MSA ve veri bağımsızlığı

    Geçmişte, tek bir büyük monolitik uygulamanın tek bir merkezi veritabanına bağımlı olduğu yapı yaygındı. Bu yöntem basit olmakla birlikte, hizmet ölçeği büyüdükçe veri şeması değişikliklerini zorlaştırıyor ve tüm hizmetlerin aynı veritabanını paylaşması nedeniyle bağlılığın aşırı derecede güçlenmesi sorununu beraberinde getiriyordu.

    Modern mikro hizmet mimarisinde bu sorunu çözmek için "Database per Service" ilkesi önem kazanmaktadır. Her hizmetin kendi özel veri deposuna sahip olması ve bunu kapsüllemesi, hizmetler arası bağımsızlığı güvence altına alır ve hata izolasyonunu ve ölçeklendirmeyi kolaylaştırır. Bu süreçte gömülü veritabanı, hizmet düzeyinde bir veri deposu olarak ideal bir seçenek haline gelmektedir. Hafif ve hızlıdır ve hizmet koduyla birlikte dağıtılabildiği için MSA ortamıyla çok iyi uyum sağlar.

    Özellikle Kubernetes ortamlarında, yan araba (sidecar) deseni aracılığıyla gömülü veritabanının uygulama konteynerinin yanına yerleştirilerek yerel veri işlemenin optimize edilmesi yaygın olarak kullanılmaktadır. Bu yaklaşım ağ darboğazını azaltır ve veri erişim gecikmesini en aza indirir.

  • İşletim ortamının sadeleşmesi

    Veritabanı sunucusu; kurulum, yama, yedekleme, arıza kurtarma, çoğaltma ve performans izleme gibi karmaşık işletim prosedürlerini zorunlu kılar ve bunun için uzman bir DBA ile profesyonel işletim personeli gerekir. Özellikle büyük ölçekli ortamlarda bu yönetim yükü çok büyüktür.

    Gömülü veritabanı bu sorunları büyük ölçüde hafifletir. Veritabanı uygulama içine bütünleştirildiğinde birim testler, derleme, sürüm yönetimi ve dağıtım birlikte gerçekleştirilir ve ayrı bir sunucu işletimine ihtiyaç duyulmaz. Ayrıca uygulama yatay ölçeklendirildiğinde gömülü veritabanı da birlikte ölçeklenir ve DevOps kültürü ile CI/CD hatları aracılığıyla otomatik yönetim mümkün hale gelir. Özellikle girişimler, küçük ölçekli hizmetler ve prototip geliştirme ortamlarında gömülü veritabanı, işletim karmaşıklığını önemli ölçüde azaltır ve geliştirme ile dağıtım hızını büyük ölçüde artırır.

  • Yüksek performanslı sistem dilleri ve ekosistem gelişimi

    Geçmişte veritabanı ile uygulamanın farklı dillerde yazılması yaygındı. Örneğin yüksek performans gerektiren veritabanı motorları genellikle C ve C++ ile yazılırken, uygulamalar Java, Python, PHP gibi dillerle geliştiriliyordu. Bu yöntem performans optimizasyonu açısından etkili olsa da bellek güvenliği sorunları, karmaşık eşzamanlılık yönetimi, gecikme süresi ve kütüphane entegrasyonu ile dağıtımdaki zorluklar gibi sınırlamaları vardı.

    Ancak son dönemde Go ve Rust gibi modern sistem programlama dillerinin yükselmesiyle bu sınırlamalar büyük ölçüde azalmıştır. Özellikle Go, yüksek performanslı uygulamaların yanı sıra veritabanı motorları gibi düşük seviyeli programların yazılmasına da uygun olduğundan, veritabanı ve uygulama tek bir dil ekosistemi içinde birlikte ele alınabilmektedir.

    Nitekim Golang'de BadgerDB ve PebbleDB gibi yüksek performanslı gömülü veritabanları etkin biçimde kullanılmaktadır. Bu durum, gömülü veritabanının yalnızca veritabanı sunucusunun hafif bir alternatifi olmanın ötesine geçerek, kendi rekabet gücüne sahip önemli bir seçenek haline geldiğini göstermektedir.

Sonuç

Büyük ölçekli verilerin merkezi yönetimi, karmaşık işlemler ve yüksek eşzamanlılık gerektiren koşullarda veritabanı sunucusu hâlâ en güçlü çözümdür. Ancak MSA ortamındaki bireysel hizmetler, IoT uç cihazları, hızlı prototipleme ve işletim verimliliğinin önemli olduğu projelerde gömülü veritabanı daha verimli ve mantıklı bir seçim olabilir. Sonuçta önemli olan, mevcut duruma ve gereksinimlere en uygun aracı seçmektir; gömülü veritabanlarının gelişimi ise bize daha geniş ve çeşitli seçenekler sunmaktadır.