Cassandra'ya yeni başlayanlar için bir rehber

Yazar Zhou Mingyao

Düzenle Xiaozhi

Bu makale, Cassandra'ya yeni başlayanlar için uygun olan popüler bir bilim makalesidir.

temel giriş

Apache Cassandra, yüksek performans, ölçeklenebilirlik ve ademi merkeziyete sahip, dağıtılmış, ilişkisel olmayan bir veritabanıdır. Cassandra, sosyal ağ iş senaryolarına uygun, gerçek zamanlı işlem işleme ve etkileşimli veri sağlamaya uygun bir veritabanıdır. Amazon'un tamamen dağıtılmış Dynamo veritabanına dayalı olarak, Google BigTable'ın Column Ailesi tabanlı veri modeli ile birlikte, P2P merkezi olmayan depolama gerçekleştirilir.

Anahtar bilgi girişi

Sıra kavramı: Ad-değer çiftlerini içeren bir veri kümesine satır adı verilir ve her ad-değer çifti kümesi (Ad / Değer Çifti) bir sütun olarak adlandırılır. Veriler, veritabanında gevşek bir şekilde yapılandırılmış çok boyutlu bir hash tablosunda depolanır. Gevşek yapı olarak adlandırılan yapı, her veri satırının, şekilde gösterildiği gibi farklı bir sütun yapısına sahip olabileceği anlamına gelir:

Süper Sütun: Sütunlar arasında ilişki kurabilen süper sütunlar, süper sütunlara alt sütunlar eklemeyi destekler.

Anahtar alanları: Anahtar alan, ilişkisel bir veritabanında veritabanı olarak anlaşılabilen Cassandra'nın veri taşıyıcısıdır. Bir Anahtar Alanı için, her veri satırı için çoğaltma düğümlerinin sayısını tanımlama, tutarlı bir karma halkadaki bir düğümün değiştirme stratejisini tanımlama ve sütun aileleri gibi birden çok kavramı içerir.

Sütun ailesi: Sütun kabı, yapısı dört boyutlu bir hash tablosu gibidir.

Sütun: Bir dizi anahtar / değer çifti.

CAP ilkesi

CAP ilkesine göre (dağıtılmış bir sisteme, Tutarlılık tutarlılığına, Kullanılabilirliğe, Bölme Tolerans bölüm hata toleransına atıfta bulunan CAP teoremi olarak da bilinir, üçü uyumlu değildir), HBase CP'yi seçti, Cassandra daha eğilimli AP, ancak aslında Cassandra'nın tutarlılığı ayarlanabilir, sabit veya nihai tutarlılık değil. Belirli bir veritabanına karşılık gelen CAP "ekip" durumu için aşağıdaki resmi görebilirsiniz:

Sürüm geçmişi

V0.6: Nisan 2010'da, en üst düzey Apache projesinden sonraki ilk sürüm oldu. Özellikleri içerir:

  • Hadoop ile entegrasyon, verilerin MapReduce aracılığıyla Cassandra'dan okunmasına izin verir

  • Cassandra'nın diğer önbelleğe alma teknolojilerine olan bağımlılığını azaltan entegre satır önbelleğe alma

  • V0.7: Özellikler ve optimizasyon noktaları dahil olmak üzere Ocak 2011:

  • İkincil dizin, birincil olmayan anahtar alanlarda dizin oluşturmaya izin verir

  • 2 milyara kadar sütun içerebilen büyük ölçekli satır tasarımlarını destekler

  • Çevrimiçi bir küme ortamında Anahtar Alanları ve sütun ailelerini ekleme, yeniden adlandırma ve kaldırma dahil çevrimiçi mod değişikliklerini destekleyin

  • Sütunun sona erme süresi, her bir sütunun TTL (yaşam süresi) özelliği aracılığıyla ayarlanabilir

  • NetworkTopologyStrategy'yi tanıtın, çoklu veri merkezi dağıtımını destekleyin ve KeySpace çapraz veri merkezi kopyalama yapılandırmasına izin verin

  • Yapılandırma dosyalarının XML'den daha okunabilir bir YAML biçimine dönüştürülmesi

  • V0.8: Haziran 2011'de bu, aşağıdaki özellikleri içeren büyük bir yükseltme sürümüydü:

  • Sayaç artışları için kullanılan yeni bir veri türü - Dağıtılmış sayaçlar eklendi. Verilerin toplu olarak içe aktarılmasını desteklemek için sstableloader aracı tanıtıldı

  • JVM yığın belleği dışındaki yerel belleğin kullanılmasına izin vermek için yığın dışı önbelleği tanıtın

  • Birden çok iş parçacığının paralel sıkıştırma gerçekleştirmesine izin vererek SSTable'ın sıkıştırma kapasitesini sınırlar

  • Memtable boyutunun daha esnek kontrolüne izin vermek için geliştirilmiş bellek yapılandırma parametreleri

  • V1.0: Ekim 2012'de birçok satıcı bu sürümden sonra Cassandra'yı üretim ortamlarında kullanmaya başladı. Özellikleri içerir:

  • CQL, tabloları ve satırları değiştirme, destek sayımı ve TTL, sayım alma vb. Gibi çeşitli iyileştirmeler yaptı.

  • Daha hızlı okuma ve yazma hızı desteği sağlayan sıkıştırma stratejileri çoklu desteği sağlamaya başladı

  • SSTable dosyasını sıkıştırın, tablo seviyesine göre yapılandırın

  • V1.1: Nisan 2011, özellikler dahil:

  • CQL3, timeuid türünü ekler ve tablolar oluşturmak için bileşik birincil anahtarların kullanılmasını destekler

  • Verileri sıralamak için "sıralama" desteği

  • CSV dosyalarını cqlsh aracıyla içe ve dışa aktarma desteği

  • Verilerin tablo şeklinde SSD veya diskte depolanmasına izin verin

  • Şema sistemde tablo olarak saklanır

  • keyspace, önbellek boyutunu yapılandırmaya izin verir

  • Birden çok sütun güncellendiğinde veya yazıldığında kirli okumaları önlemek için satır tabanlı izolasyon sağlayın

  • V1.2: Ocak 2013'te, özellikler şunları içerir:

  • CQL3, yeni koleksiyon türleri (setler, listeler, haritalar) ekler ve Thrift'in yerine yeni bir ikili protokol kullanılır

  • Sanal düğümler, düğüm eklerken veya değiştirirken performansı artırmak için kümedeki düğümler arasında veri dağıtımını destekler

  • İzleme yöntemini artırarak müşterinin düğümler arasındaki okuma ve yazma etkileşim sürecini görüntülemesine izin verin

  • Tüm veri yapıları JVM yığın belleğinden yerel belleğe aktarılır

  • V2.0: Haziran 2015'te bu sürüm bir kilometre taşı oldu ve sadece performansı büyük ölçekte iyileştirmekle kalmadı, aynı zamanda 5 yıl süren birçok teknik borcu da çözdü. Özellikleri içerir:

  • Paxos protokolünü destekleyen yeni hafif işlemler

  • CQL3 değişiklikleri, ALTER komutu için DROP semantik desteğini, yeni koşullu modları (IF EXISTS, IF NOTEXISTS) ve birincil anahtar alanlarında ikincil dizinlerin oluşturulmasını içerir.

  • Çalışma zamanı için Java7 gereklidir

  • Yazma işlemleri için bir tetikleyici makine tanıtın, tetikleme herhangi bir JVM dilinde uygulanabilir

  • V3.0: Kasım 2015'te bu sürüm Intel tarafından icat edilen "tik-tak sürüm modelini" benimsemeye, yani kısa sürede sistem mimarisini değiştirmeye başladı ve bu nedenle V3.0 sürümü Cassandra için belli ölçüde mimari değişiklikler yaptı. Önceki birçok kusur onarılır ve modern, yüksek performanslı, yüksek kullanılabilirlikli veritabanı gereksinimleri için daha uygundur. Özellikleri içerir:

  • Depolama motoru kodunu CQL yapısına daha iyi uyacak şekilde yeniden yazın

  • Fiziksel görünüm ekleyin (genel dizin olarak da adlandırılır)

  • Resmi olarak Java8 tabanlı derleyin ve çalıştırın

  • Thrift tabanlı komut satırı arayüzünü (CLI) kaldırın

  • Nasıl ademi merkeziyetçi olunur

    Cassandra merkezi değildir.Her düğüm geçici koordinatör veya veri yedekleme rolünü oynayabilir.Bu aynı zamanda tüm düğümler arasında hiçbir fark olmadığı ve hiçbir fark olmayacağı anlamına gelir, çünkü tüm davranışlar kurallara göre rastgele olur. davranış.

    Merkeziyetsizliği ve bölüm hatası toleransını desteklemek için Cassandra, her bir düğümün kümedeki diğer düğümlerin durum bilgilerini izlemesine izin vermek için dedikodu protokolünü kullanır.

    Dedikodu protokolü (dedikodu protokolü olarak da adlandırılır) genellikle ağ arızalarının büyük ölçekli, merkezi olmayan ağ sistemlerinde meydana gelme eğiliminde olduğunu varsayar ve ayrıca dağıtılmış veritabanlarında otomatik bir yedekleme mekanizması olarak kullanılır. Adı, insan dedikodu davranışından gelir ve herhangi biriyle karşılıklı ilgi alanına giren bilgileri paylaşabilirsiniz. Dedikodu, yüksek tutarlılık gereksiniminin olmadığı senaryolarda bilgi senkronizasyonu için daha uygundur. Senkronize edilecek bilginin zamanı yaklaşık olarak log (N) 'dir, burada N düğüm sayısını temsil eder. Gossip'teki her düğüm bir dizi durumu korur. Durum, bir anahtar / değer çifti ile temsil edilebilir ve bir sürüm numarası eklenir. Daha büyük sürüm numarası, güncellenmiş durumdur.

    Aşağıdakiler Dedikodu'nun iş akışıdır:

  • Her saniye, dedikoducu kümede rastgele bir düğüm seçecek ve dedikodu oturumunu başlatacaktır. Her dedikodu turu üç parça bilgi gerektirir.

  • Dedikodu başlatıcı, GossipDigestSynMessage'ı kendi seçtiği arkadaşlara (diğer düğümlere) gönderir.

  • Bu arkadaş bu mesajı aldığında, bir GossipDigestAckMessage döndürür.

  • Başlatıcı bu arkadaşından bir onay mesajı aldığında, bir dedikoduyu tamamlamak için GossipDigestAck2Messae'yi bu arkadaşına gönderecektir.

  • Kod seviyesinden anlarsak, Cassandra kaynak kodu dedikodu protokolünü Gossiper sınıfı üzerinden uygular ve Gossip her saniye otomatik olarak çalışır.Aşağıdaki kod GossipTask sınıfını düzenli olarak başlatır. GossipTask org.apche.cassandra.gms.Gossip sınıfının altında bulunur. Dahili sınıf, bu sınıf yerel düğümün dedikodularını yönetmekten sorumludur. Bir hizmet düğümü başlatıldığında, bu sınıf uçbirim durum bilgisini almak için Gossiper'a kaydolur.

    GossipTask, Gossip başlatıldıktan hemen sonra çalışmaz. ListenGate değişkeninde engellenir. Aşağıdaki kodda gösterildiği gibi, Gossip hizmeti listen çağrıları yaptığında çalışmaya başlar:

    Ardından, kodda gösterildiği gibi önce bu düğümün kalp atışı sürüm numarasını güncelleyin:

    Ardından, kodda gösterildiği gibi diğer düğümlere gönderilmesi gereken gDigests mesajını oluşturun:

    Ardından, gönderilecek hayatta kalan düğümlerden rastgele bir düğüm seçin ve gönderilecek başarısız düğümlerden rastgele bir düğüm seçin. Mevcut kalan düğüm sayısı tohum sayısından azsa, kodda gösterildiği gibi çekirdek düğümlerden birine bir mesaj gönderin:

    Son adım, düğümün durumunu kontrol etmektir.Düğüm, mesajı henüz almışsa ve onu işlemek için zamanı olmadıysa (alma süresi 1 saniyeden azsa), iş parçacığı mesajı işlemek için 100 ms uyuyacaktır.

    Veriler nasıl eşit olarak dağıtılır

    Cassandra'da Token, verileri bölümlemenin anahtarıdır. Her düğümün, düğüm tarafından ayrılan veri aralığını gösteren benzersiz bir Simgesi vardır. Düğümün Simgesi bir Token halkası oluşturur. Örneğin, bölümleme için tutarlı Hash kullanılırken, anahtar / değer çifti, verilerin hangi Token'a ait olması gerektiğini belirlemek için gerçek tutarlı Hash değeri olacaktır.

    Farklı bölümleme stratejilerine göre, token türleri ve ayar ilkeleri de farklıdır. Cassandra'nın (V3.10 sürümü) kendisi dört bölümleme stratejisini destekler:

    • Murmur3Partitioner: Bu, Row'a dayanan varsayılan bölümleyicidir.

    • Anahtar alanının HashCode'u eşit olarak dağıtılır Bu strateji daha hızlı bir hash işlevi sağlar.

    • RandomPartitioner: Bu bölümleyici aynı zamanda rastgele bir bölümleyicidir.Temel özellikleri, hash değerinin daha güvenli durumlarda kullanılabilen MD5 aracılığıyla hesaplanması dışında Murmur3Partitioner'a benzer.

    • ByteOrderedPartitioner: Satır Anahtarının bayt verilerine göre sıralanır Bu bölümleyici Satır Anahtarı aralığı sorgusunu destekler.

    • OrderPreservingPartioner: Bu bölümleyici ayrıca Satır Anahtarı aralığı sorgusunu da destekler. Sıralamak için Satır Anahtarının UTF-8 kodlamasını kullanır.

    Okuma ve yazma için hangi düğümün kullanılacağına nasıl karar verilir?

    Cassandra okuma ve yazma için hangi düğümün kullanıldığını belirlemek için kümedeki her düğümün göreli ana bilgisayar mesafesini belirlemek için snitches adı verilen bir yöntem kullanır. Snitches, cassandra'nın istekleri verimli bir şekilde yönlendirebilmesi için tüm ağ topolojisi bilgilerini toplar.

    Cassandra bir okuma isteği başlattığında, ayarlanan tutarlılık düzeyi aracılığıyla birkaç yedeklemeyle etkileşime girmesi gerekir. Cassandra, okuma isteklerinin maksimum hızını sağlamak için tüm nesne sorgusu için tek bir kopya seçer ve istenen verilerin en son sürümünün elde edildiğinden emin olmak için karma değeri yürütmek için ek kopyalar gerektirir. Snitch'in rolü, hangi kopyanın en hızlı şekilde döndürüleceğini onaylamaya yardımcı olmaktır ve bu kopyanın sorgu için tüm verileri içermesi gerekir.

    Cassandra şu anda farklı ağ mimarisi çözümleri için birden fazla snitch algoritması sağlamaktadır ve her bir snitch IEndpointSnitch arayüzünü uygulamaktadır. Snitchler şu anda uygulamaya göre üç türe ayrılmıştır:

  • SimpleSnitch: Bu strateji veri merkezi ve raf bilgilerini tanımlayamaz ve tek bir veri merkezinde kullanım için uygundur;

  • NetworkTopologySnitch: Bu strateji, daha verimli mesaj yönlendirme için bir ağ topolojisi sağlar;

  • DynamicEndPointSnitch: Bu strateji, en uygun düğümü dinamik olarak seçme amacına ulaşmak için düğümler arasındaki iletişim zaman aralığını kaydedebilir ve düğümler arasındaki iletişim hızını kaydedebilir.

  • Sonuna yaz

    Bu makale esas olarak Cassandra'ya yeni başlayanlar içindir. İlk olarak, temel kavramları ve anahtar tanımları tanıtır ve Cassandra'nın V3.0'a kadar tüm sürüm sürecini kısaca özetler ve ardından merkezi olmayan uygulama mekanizmasına, özellikle de iletişim mesajı mekanizmasına odaklanır. , Düğüm veri depolama bilgi istatistik mekanizması vb. Bazı tartışmalar yaptık. Alan sınırlamaları nedeniyle Mezar Taşları, Çiçek Filtreleri ve SEDA'nın üç kavramını derinlemesine açıklamak için bir makale yazacağım.

    yazar hakkında

    Mingyao Zhou, 2004 yılında Zhejiang Üniversitesi'nden mühendislik alanında yüksek lisans derecesi ile mezun olmuştur. 13 yıllık yazılım geliştirme deneyimi, yaklaşık 10 yıllık teknik ekip yönetimi deneyimi, 4 yıllık dağıtılmış bilgi işlem ve büyük veri teknolojisi deneyimi. "Java Performans Optimizasyonu Hakkında Büyük Konuşma", "JVMG1 GC'nin Derinlemesine Anlayışı", "Teknik Liderlik - Bir Çiftçi Ekibi Nasıl Yönetebilir? Kişisel WeChat hesabı michael_tec, kişisel genel hesap "Mike Amca her gece saat 10'da konuşuyor".

    Bugünün Tavsiyesi

    Okumak için aşağıdaki resme tıklayın

    Test öldü mü? Ben öyle düşünmüyorum!

    Matryx beta sürümünü yayınladı ve MTX fırladı, analistler "Oolong" u taktı
    önceki
    Zhang Zixuan canlı yayını açtı ve Xiaosan'ın netizeni olduğunu söyledi: Çevrimiçi şiddete alışığım, bırakalım
    Sonraki
    190324 "Zhuang Rui dedi" bilgi ilerlemesi! Bu haftanın bilgi puanlarını aldınız mı?
    Top Vision gerçek dünyayı buluta nasıl "taşıyor"?
    Sophie, Pekin Film Festivali'ne katılarak sadece zümrüt kolyeyle spot ışığı çalmakla kalmadı, aynı zamanda konuşmasında Analects'ten alıntı yaptı.
    "Ayrıcalıklı Anılar" daki asil ve görkemli, Stephen Chow filminde ünlü ve Zheng Shuang rolünü oynadı.
    Dong Jie ve Zhong Xintong da 38 yaşında ve zariflik ile "baştan savma" arasındaki fark bir bakışta anlaşılıyor!
    "Dragon Quest X" açık beta 10 Kasım'da başlıyor
    190324 "Demir Duvar Kralı" BTS JIN, hayranların "Haydi evlenelim" için yer bırakmıyor
    Mobil ödemeyi açtıktan sonra, hala hangi "cepte saklama" yöntemini kullanıyorsunuz?
    Kurosawa Akira'nın "Rashomon" u bir Amerikan dramasına dönüştürülecek! Spielberg adaptasyon haklarını satın aldı
    SWM Motors G01, Centennial Meazza Stadyumu'nda görücüye çıktı ve İtalyan estetiğiyle üst düzey pazara girmek istiyor
    Bu Xiaogu nerede, "Perde Arkası Kralı" nın kahramanı, açıkça Zhou Dongyu'nun kendisi.
    O, "Gençlik Dövüşü" nde Qian Beibei'yi alt eden ve bir zamanlar milli atlet olan tek hazine oyuncusu!
    To Top