Apache Cassandra
Herkese selam , bu yazımda Apache Cassandra’yı giriş seviyesinde anlatıp, artılarından ve eksilerinden bahsedeceğim.
1-)Apache Cassandra Nedir ?
2-)Avantajları nelerdir ?
3-)Dezavantajları nelerdir ?
4-)Mimarisi ve Çalışma Mantığı
5-)Örnek bir Cluster yapısı
Apache Cassandra Nedir ?
Apache Cassandra NoSQL bir veritabanı olarak Facebook’un arama ve indeksleme işlemleri için yüksek performanslı bir veri kaynağı ihtiyacından doğmuştur.
Java tabanlı tasarlanmaya başlanmış olan Cassandra 2008 De açık kaynaklı bi proje haline gelmiştir. DataStax Enterprise versiyonu Cassandra üzerinde iyileştirilmeler yapılmış ve ücretli olarak sunulmaktadır.
Cassandra ilişkisel veritabanlarına göre daha esnek bir yapı ve veri modeline sahiptir. Cassandra günümüzde birçok büyük şirket tarafından tercih edilmektedir. Sektörde lider olan firmalardan birkaçı Apple, Netflix,CERN,Cisco, Instagram, Uber şeklindedir.
Cassandranın Avantajları
Cassandra aynı özelliklere sahip birden fazla node’dan oluşan bir cluster üzerinde veriyi dağıtık bir şekilde depolamaktadır.Cassandra’da ilişkisel veritabanlarında olan Master/Slave yapısı bulunmamaktadır.
Bu sayede bir veya daha fazla node üzerinde bir problem yaşandığında, veriye ulaşılamadığında bizi veri kaybından korumuş olur.
Bu bahsettiğim ‘Single Point of Failure’ dediğimiz tüm sistemin tek bir noktada meydana gelen bir hatadan dolayı çalışmasını engellemektedir.
Cassandra’da Master/Slave yapısı olmadığı için eklenen her node diğerleri gibi aynı yetki ve özellikleri taşımaktadır.
Yeni eklenen node’lar da mevcut node’lar gibi davranır ve okuma yazma yetkilerine sahip olmaktadır.Bu sayede donanımsal kısımda cluster yapısını kolay bir şekilde büyütüp , veri depolanma kapasitesini arttırma şansı sunar.
Cassandra’yı benzerlerinden ayıran büyük özelliklerinden biri ise kendi sorgu (query) dili olmasıdır. Cassandra Query Language (CQL) olarak bize tek satırlı sorgularda bile veriye hızlı ulaşmamıza olanak tanır.
Cassandranın Dezavantajları
CQL bize veriyi hızlı ve direk olarak getirsede, sorguda primary key ve partition kısımlarında belirttiğimiz mimariyle döndürür. Bu da bize sınırlı bir erişim hakkı ve batch işlemler için daha zor bir yapı sunar.
Cassandra mimarisi oluşturulurken önceden planlanmalı ve veriler ona göre tablolarda dağıtılıp ilgili yerlere atanan partition , primary key’ler modelleme açısından çok önemlidir. Sistem ayağa kaldırılmadan önce bu gereksinimler ayarlanmalıdır. Aksi taktirde fazladan efor harcamak gerekebilir.
Cassandra Mimarisi ve Çalışma Mantığı
İlk olarak Cassandra ‘nın en önemli özelliği olan dağıtık yapısından bahsedelim. Cassandra birden fazla DataCenter(DC) seçeneği sunar. Bu seçenek bize büyük verileri daha kolay tutabilme ve gruplandırma olanağı sağlar. Cassandra ‘da her bi node 2–4 Terabytes veri tutabilir.
Cassandra bize yukarıdaki gibi bir ring mantığı sunar. Bu sayede isteğimiz an node ekleyebilir , cluster’ı kolay bir şekilde büyütebiliriz. Ring içerisinde herhangi bir node ‘u seçip read-write yapabiliriz.
Bu mimari içerisinde Client ile haberleşen cordinator node adı verilen bir node seçilir.Cordinator herhangi bir node olabilir , görevi ilgili node ‘un partition bilgisini bilmek ve bir read-write işlemi geldiğinde ona yönlendirmektir.
Cassandra mimarisinde “Gossip Protocol” adı verilen bir yapı sunulmaktadır. Bu yapı node’ların kendi aralarında iletişimini , durumunu ve bir önceki periyottaki durumunu paylaşır (metadata).
Kısacası node’lar kendi state’leri haricinde kendilerinde diğer node’lar hakkında bulunan en güncel bilgiyi de aktarırlar.
Cassandra Cluster’ını Nasıl Büyütebiliriz ?
Cassandra bize Horizontal & Vertical Scaling seçeneklerinden , mimarisi gereği horizontal scaling seçeneğini sunar. Bu sayede pahalı donanımlara gerek duymadan birden cok ucuz donanımı birleştirerek clusterı büyütebiliriz.
Cassandra CAP Theorem
Data Replication
Data Replication (veri kopyalama) Cassandra ‘nın güçlü olduğu fault tolerance alanındaki temel bir özelliktir.Cluster içerisinde (ring yapısını hatırlayalım) veriyi paylaşan node’lar aynı zamanda yapılandırmaya göre (RF=Replication Factor) diğer node’lardaki verilerin kopyalarını tutarlar.
RF=3 (veri 3 farklı node’da saklanacaktır)
Cassandra Consistency
Kopyalama mantığı verilerin kaybolmaması için önem taşır.Bir diğer durum ise verilerin tutarlı bir biçimde saklanmasıdır. Cassandra bize bu seçeneği Consistency Level parametresiyle sunar.
Node’lardan birine CRUD (Create, Read, Uptade, Delete) işlemi geldiğinde node’lar birbiriyle haberleşir ve işlemin talebe alınması için onay verirler. Consistency Level kısaca gelen işlemin onaylanması gereken node sayısını belirler.
Örneğin CL(Consistency Level) = 3 olursa bir write işleminde 3 node ‘a yazılmadan client’ e yazıldı bilgisi gitmez.
Bu tutarlı bir veri için mantıklıdır ama senaryolara göre bu işlem düşünülmeli ve CL seviyesi ona göre düzenlenmelidir. Aksi taktirde write işlemi beklenenden fazla sürebilir ve performansa etki edebilir.
Cluster Oluşturma
Örnek olarak bir cluster yapısı oluşturalım. Bunun için RedHat Centos 7 sürümü olan 3 node’lu bir Apache Cassandra instance’larını ayaga kaldırıp ardından bu instance’ları cluster’a dahil edip 3 node’lu bir yapı oluşturacağız.
Cluster’ı kurmadan önce yapılması gereken birkaç adım var ;
Makinelerin birbiri ile konuşabilmesi için firewall üzerinden
9042, 9160, 7000, 7001 ve 7199 portlarını açmamız gerekli veya direkt firewall’u kapatabilirsiniz (güvenlik sebebiyle önerilmez).
Makinelere Cassandra’yı yüklemek için ilgili package manager’a bir repository eklememiz gerekli.
“/etc/yum.repos.d” klasörü içerisine ismi farketmeksizin “.repo” uzantılı bir dosya ekleyeceğiz.
Örnek Dosya içeriği aşağıdaki gibi olabilir ;
Bu adımın ardından, tek bir komut ile Cassandra’yı sistemimize yükleyip bir servis olarak ayağa kaldırabiliriz.
Örnek komutlar ;
Cassandra’nın aktif olup olmadığını ve ilerleyen adımlarda cluster’ımızın durumunu kontrol etmek için “nodetool” isimli aracı kullanabiliriz. “nodetool” aracı bize cluster’ın durumunu ve çeşitli durumları kontrol etmemiz için belirli seçenekler sunar.
Cassandra’yı aynı adımları kullanarak cluster içerisindeki tüm node’lar üzerinde kurup ayağa kaldırmamız gerekli. Kurulum işlemleri tamamlandıktan sonra tüm node’larımız tek başlarına çalışır ve bir cluster içerisine dahil edilmeye hazır durumda olacaklar.
Cluster’ı oluşturmak için tüm makinelerdeki Cassandra servislerini kapatmamız gerekli.
Clusterı oluştururken “/etc/cassandra/conf” klasörü içerisinde olan “cassandra” isimli bir yaml dosyası bulunur.
Cluster’ı ayağa kaldırırken bu yaml dosyasında bazı değişiklikler yapmamız gerekli ilgili parametreler aşağıdaki gibidir;
Yaml dosyasındaki ayarları görseldeki gibi düzenledikten sonra makineler üzerine kurduğumuz node’ları ayrı ayrı servis olarak başlattığımızda bu instancelar birbiri ile bağlanıp cluster yapısını oluşturacaklardır. Tüm node’lar ayağa kalktıktan sonra herhangi bir node üzerinde “nodetool” aracı ile durum kontrolü yaptığımızda aşağıdaki gibi tüm node’ları görebilmemiz gerekir.
Finalde Cassandra Veritabanının nasıl bir ürün olduğundan, hikayesinin nerde ve nasıl doğduğundan , artıları ve eksilerinden, cluster yapısından ve örnek bir kurulum yaparak cassandra hakkında bilgi sahibi olduk.
Okuduğunuz için teşekkür ederim umarım yararlı bir kaynak olmuştur.
Bir sonraki yazıda görüşmek üzere .