WeChat arka planının, büyük veri soğuk ve sıcak hiyerarşik mimari tasarım uygulamalarının zaman serilerine dayalı tasarım uygulaması

Yazar Yang Ping An

Düzenle Xiaozhi

Bu makale, bir zaman serisi devasa veri soğuk ve sıcak hiyerarşik mimariye dayalı WeChat arka ucunu tanıtacaktır. WeChat teknik ekibi, petabaytlarca verinin, günlük trilyonlarca erişimin ve anahtar değerin yarattığı zorluklarla başa çıkmak için tam da bunu yaptı.

Önüne yaz

WeChat ürün özelliklerinin evrimi ile WeChatin arka uç veri depolaması, binlerce heterojen modelden oluşan makine kümelerini sistematik olarak yöneten, günümüzün olgun, büyük ölçekli dağıtılmış depolama sistemini oluşturmak için çeşitli mimari dönüşümlerden geçti. Petabaytlarca erişimi, anahtar değerini ve petabaytlarca veriyi her gün destekleyebilir.

Cep telefonlarını bir platform olarak kullanan bir mobil sosyal uygulama olarak, WeChat'teki çoğu hizmet tarafından üretilen verilerin ortak bir yönü vardır: veri anahtarlarının zaman damgası bilgileri vardır ve tek kullanıcı verileri zaman içinde sürekli olarak oluşturulur. Bu tür verileri zamana dayalı veriler olarak adlandırıyoruz. Örneğin, arkadaş çevresinde yayınlanması veya mobil ödemenin fatura akışı gibi işletmenin oluşturduğu veriler bu özellikleri karşılar. Zaman sekansına dayalı veriler, doğal olarak sıcak ve soğuk gibi farklı özelliklere sahiptir.Bu, cep telefonunun fiziksel özellikleriyle belirlenir.Sınırlı ekranında görüntülenen veriler yalnızca ekranlara bölünebilir ve parmakların kaydırılmasıyla pürüzsüz ve süreklidir. Zaman ekseni boyunca sıralı erişim - genellikle en son oluşturulan verilerden, yavaşça önceki verilere geri dönülür. Aynı zamanda, Moments gibi işletmeler, bilgilerin okunduğu ve çoğaldığı uygulama senaryolarıdır; bu, ürettikleri arka plan verilerinin daha fazla okuma ve daha az yazma gibi ayırt edici bir özelliğe sahip olduğu anlamına gelir.

WeChat'in gerçek uygulama senaryosunda, bu tür verilerin temel özellikleri şunları içerir: büyük miktarda veri, büyük miktarda ziyaret ve yüksek derecede önem. Bu özellikler, mevcut ağın fiili işleyişinde bize çok büyük zorluklar getirdi:

  • Veri miktarı büyüktür ve gerekli depolama kapasitesi yüksek veri, zaman sırasına göre genellikle silinmez, ancak zamanla birikir, veri hacmi petabayt düzeyine ulaşır ve gereken karşılık gelen depolama alanı da gün geçtikçe artmaktadır;

  • Ziyaretlerin sayısı büyüktür ve tatil etkisi açıktır - zaman serilerine dayalı veriler genellikle sıcak işler tarafından oluşturulur ve ziyaretleri, temelde dakikada milyarlarca kez düzeyinde yüksek kalır. Özellikle tatil sezonunda anlık ziyaret sayısı normalin üç ila beş katına ulaşabilir;

  • Önemi yüksektir ve kullanıcının algısı açıktır.Veri kaybolduğunda kullanıcı ürünü normal bir şekilde kullanamaz ve ona dönüştürülen şikayet oranı yüksektir.

  • İstifleme makineleri aracılığıyla depolamanın yatay olarak genişletilmesi, doğal olarak yukarıdaki zorluklarla başa çıkabilir, ancak, sıkı maliyet bütçeleri öncülüğünde, makinelerin sayısı sınırlıdır. Bu durumda, devasa zaman serileri verilerine dayanan sıcak ve soğuk bir hiyerarşik yapı ortaya çıktı. Bu mimari, makine kaynaklarından tam olarak yararlanma, çeşitli donanım ortamlarının avantajlarından tam anlamıyla yararlanma ve verilerin sıcak ve soğuk özelliklerinin özelliklerini bir araya getirme ilkesine dayalı olarak arka planda bu tür verilerin artan genişlemesiyle başa çıkmak için geliştirilmiş ve tasarlanmıştır. . Veri katmanlama kavramına dayanır ve farklı zaman dilimlerinde erişim ısısı ve veri hacmindeki farka göre farklı hizmet stratejilerini özelleştirir ve depolama sınırını dikey olarak genişletir. Ölçeklenebilir depolamanın anlaşılması kolaydır. Aynı tür makineleri, kaçınılmaz olarak bir dizi tarihsel veri geçişini içeren orijinal kümeye ekleyerek, nihayet yeni ve eski makineler yük dengelenir ve aralarında herhangi bir fark olmaksızın dışarıya hizmet sağlar. Bu tür bir şema altında, veriler yatay olarak akar ve sistem onlara eşit davranır Açıkçası, yerel koşullara dayalı düşünmeye yer yoktur. Dikey depolama mimarisi böyle bir fikir sağlar:

    Sıcak veriler için veri miktarı azdır, ancak erişim trafiği büyüktür.Elbette, bunların bellekte kalmasını umuyoruz.Bu nedenle, sistem güçlü tutarlılık garantisine sahip bir bellek katmanı sağlar. Ani trafikle uğraşırken, geçmiş olmadan da kullanılabilir. Veri geçişi öncülüğünde, bellek katmanı bağımsız ve dinamik olarak genişletilebilir.

    Geçmiş veriler için veri stoğu büyüktür, ancak üstlendiğimiz erişim miktarı çok sınırlıdır. Elbette, bunları depolamak için pahalı katı hal diskleri kullanmak istemiyoruz. Bu nedenle, sistem ucuz bir mekanik disk katmanı ve bir dizi şeffaf soğuk veri ayırma ve Toplu çökme işlemi, depolama katmanından mekanik disk katmanına sürekli olarak geçmiş verileri çıkarır.

    Böylesine dikey bir katmanlama ve bağımsız genişletme fikri sayesinde, sistemimize büyük bir esneklik sağlar, festival süresince depolama katmanının karşılaştığı bellek darboğazını çözer ve bizim için maliyet baskısını uzun vadeli bir perspektiften rahatlatır. Depolama katmanının karşılaştığı disk kapasitesi darboğazı çözüldü.

    Tabii ki, bunlar başarılı bir büyük ölçekli dağıtılmış sistem için yeterli değildir.Ayrıca, veri çoğaltma stratejilerinin ve bölümleme algoritmalarının birden çok kopyasını içermeli ve ayrıca mevcut ağın karmaşık işletim ortamıyla başa çıkabilmelidir. Karşılık gelen güçlü veri tutarlılığı algoritmalarını formüle etmek için her katmanın hizmet özelliklerini birleştirdik.Örneğin, bellek katmanı, depolama katmanıyla tam tutarlılık sağlamak için sürüm numarası kontrolünü kullanır. Depolama katmanı, mekanik disk katmanı ise Paxos Group aracılığıyla çok kopyalı felaket kurtarma uygular. Seri yazı ile garantilidir. Ayrıca, verilerin ve trafiğin tek tip dağıtımını sağlamak ve bu özelliğin yatay genişletmeden sonra hala geçerli olmasını sağlamak için kendi merkezi olmayan veri yönlendirme algoritmamızı uyguladık.

    Yukarıda bahsedilen çabalar ve birbirine kenetlenen bağlantılar sayesinde, zaman serisi büyük verilere dayanan sıcak ve soğuk hiyerarşik mimarimiz, petabaytlarca verinin, yüz milyarlarca erişimin ve trilyonlarca anahtar değerin getirdiği zorlukları başarıyla karşıladı.

    Sistem tasarımı

    Veri örneği

    Bu makalede bahsedilen büyük verilerin sıcak ve soğuk hiyerarşik mimarisi, özellikle zaman serilerine dayalı veriler içindir. Ana özellikleri şunlardır:

    a) Veri anahtarı değerinin zaman damgası bilgisi vardır;

    b) Tek kullanıcı verileri, zaman içinde sürekli olarak oluşturulur.

    Tasarladığımız mimari, a) özelliğine dayanır ve her bağlantı temelde verileri dağıtmak veya verileri sıralamak için anahtardaki zaman damgasına dayanır. Anahtar değerde zaman damgasının nasıl üretileceğine, küresel olarak birleşik bir zamanın korunup korunmayacağına ve bunun nasıl sürdürüleceğine gelince, bu makalenin kapsamında değildir.Genellikle bu, ön uç iş özellikleri ve arka uç zaman sunucusu stratejisi tarafından belirlenir.

    B) özelliği, bu mimarinin gerekliliğini ve uygulanabilirliğini sağlar. Veri ölçeği sınırlı ise örnek olarak kullanıcının hesap bilgilerini alınız.Günlük hayatımızda bir hesap defteri gibidir.Sadece bir kopyası vardır ve tek bir kullanıcıya eklenmeyecektir. Daha sonra genellikle depolama için sabit bir makine kümesi kullanırız ve çok az değişiklik olur. Uğraşmamız gereken şey, her gün sürekli olarak yeni veriler üreten kullanıcının günlüğü veya muhasebe kitabıdır.

    Bu tür iş verilerinin aşağıdaki özelliklere sahip olduğunu göstermek için canlı ağdaki bir küme örneğini ele alalım:

    1. Veri miktarı büyüktür, PB düzeyinde veriler, trilyon düzeyinde anahtar değerler ve sürekli üretim halindedir, ancak yeni oluşturulan veriler geçmiş stok verilerinin küçük bir bölümünü oluşturur. Aşağıdaki şekil, her bir zaman dilimindeki küme verilerinin bir yüzdesini göstermektedir.

    2. Ziyaret sayısı büyük, zirve değeri dakikada milyarlarca ziyarete ulaşıyor Özellikle festival süresince kullanıcıların yüksek coşkusu hafta içi ziyaret sayısının üç ila beş katına dönüştürülebilir. Aynı zamanda farklı sıcak ve soğuk özellikleri vardır, gittikçe daha az okunur (okuma ve yazma oranı 100: 1'e bile ulaşabilir) Örneğin tatil sırasında ikiye katlanan ziyaret genellikle tatil sırasında oluşturulan yeni verilere yapılan ziyarettir. Aşağıdaki şekil, her bir dönemdeki küme ziyaretlerinin yüzdesini göstermektedir.

    3. Veri güvenliği gereksinimleri yüksektir.Bu tür veriler genellikle kullanıcı tarafından algılanan hassas verilerdir.Kaybedildiğinde, kullanıcı şikayetlerinin dönüşüm oranı yüksektir.

    sistem yapısı

    Sistem, şekilde gösterildiği gibi bellek katmanı, depolama katmanı (sıcak veri depolama katmanı) ve mekanik disk katmanı (soğuk veri depolama katmanı) olmak üzere üç katmandan oluşur. Zaman çizelgesinde, sundukları veriler sıcaktan soğuğa kadar değişir. Aşağıda gösterildiği gibi:

    Müşterinin bakış açısından, üç katman paraleldir ve müşteri, belirli bir katmandaki bir makineyle doğrudan iletişim kuracaktır. Spesifik fark, bellek katmanı ve mekanik disk katmanının müşteriye salt okunur olmasıdır. Tüm yazmalar, istemci tarafından doğrudan depolama katmanına yazılır. Merkezi olmayan yapılandırmayı istemci makineye dağıtırız. Yapılandırma türleri bellek katmanı yönlendirmesini, depolama katmanı yönlendirmesini ve diğer meta verileri içerir. İstemci, yapılandırmadaki zaman ayırma noktasına ve trafik oranına göre mevcut okuma talebini belirler Bellek katmanındaki veya depolama katmanındaki belirli makinelere dağıtılır. Yapılandırma hızlı dağıtımı ve dinamik yüklemeyi destekler ve saniyeler içinde güncellenebilir.

    Mekanik disk katmanının yönlendirilmesi müşteriye şeffaftır Depolama katmanı, mekanik disk katmanına batan veri bağlantısını kaydeder Bağlantı, dosya numarasını, dahili ofseti ve boyutu içerir ve müşteri bunun farkında değildir. Batan verilerin okuma talebi, depolama katmanı makinesine dağıtıldığında, depolama katmanı, soğuk veri depolama katmanındaki verilerin her bir kopyasına karşılık gelen makine adresini hesaplayacak ve ardından bunu ve müşteriye dosya bağlantısını yanıtlayacaktır. İstemci daha sonra rastgele bir stratejiye göre birden fazla kopya arasından bir okuma seçer.Bu perspektiften, soğuk veri depolama katmanı daha çok müşteri için bir uzak dosya sistemine benzer, inode bilgisi ve yönlendirme tablosu ise sıcak verilere yerleştirilir Depolama katmanı.

    Aşağıda her katmanın tasarım stratejilerini ayrıntılı olarak analiz edeceğiz.

    Bellek katmanı

    Bellek katmanı daha çok bir önbelleğe alma proxy'si gibi davranır, ancak normal önbelleğe alma, veri verimliliğini işlemede zayıftır. Yazarken elemek gibi yaygın stratejiler, geçersizliği sağlamak için depolama katmanına yazmadan önce her seferinde önbellekteki karşılık gelen verileri temizleyin. Bununla birlikte, veriler genellikle önbellekte birden çok kopyadır.Bu çözüm ağ bölümü hatalarını işleyemez ve yazma işlemi ortadan kalktığında birden çok RPC isteği üretilir, bu da sistem kaynaklarını aşırı tüketir. Diğer bir yaygın strateji, sınırlı veri tutarlılığı, yani eskime stratejisidir. Veriler önbelleğe yazıldığında, geçerli bir süre eklenir.Bu geçerli süre boyunca, veriler her zaman doğru kabul edilir ve gerçek durumun ne olduğu umurunda değildir. Bu tür bir önbelleğe alma, yalnızca yüksek gerçek zamanlı veri gerektirmeyen hizmetlere uygulanabilir. WeChat'in hassas işi için, güçlü veri tutarlılığı sağlayabilen dağıtılmış bir önbelleğe ihtiyacımız var.

    Bunu sürüm numarasıyla başardık. Önbellekteki her veri parçası için bir sürüm numarası ve depolama katmanında buna karşılık gelen bir kopya tutuyoruz. Yalnızca önbellekteki sürüm numarası, depolama katmanının sürüm numarasıyla tutarlı olduğunda, önbellekteki veriler geçerli sayılır. Bu nedenle, istemci bellek katmanına her okuma talebinde bulunduğunda, önbellek katmanı karşılık gelen bir okuma isteği oluşturacak ve bunu depolama katmanına gönderecektir. Geçerlilik kimliği ve süresi dolan verilerin güncellenmesi bir RPC talebinde tamamlanır.

    Sezgisel olarak, bu şemayı kullanan son derece tutarlı önbellek, depolama katmanındaki erişim baskısını azaltmaz. Çünkü istemcinin önbellek katmanına olan isteği, önbellek katmanının depolama katmanına olan isteği ile 1: 1'dir. Bununla birlikte, bu çözümün anahtarı, depolama katmanının bellek darboğazını başarılı bir şekilde gidermemizdir. Veri depolama katmanında saklama işlevi, önbellek katmanının belleğine aktarılır. Depolama katmanı için mevcut gereksinimimiz, olabildiğince çok sürüm numarasını önbelleğe alabilmek ve verimli sürüm numarası erişim yetenekleri sağlamaktır. Bu anlamda, bu güçlü tutarlı önbellek, depolama katmanı belleğinin bir uzantısıdır. Bu nedenle biz buna hafıza katmanı diyoruz. Avantajı, trafik oranını dinamik olarak ayarlayabilmesi ve yoğun ziyaretler sırasında kapasiteyi hızla artırabilmesidir. Aşağıdaki bölümlerde, sürüm numarası etkileşiminin neden olduğu kaynak tüketiminin mühendislik araçlarıyla nasıl optimize edileceğini de açıklıyoruz.

    Sistemin sağlamlığı için bazı anormal durumların da dikkate alınması gerekir.Bir bellek katmanı makinesi aniden çevrimdışı olursa, onlarca gigabaytlık önbelleğe alınmış veri geçersiz hale gelir. Elbette, bu onlarca gigabaytlık verinin baskısının tamamen düşeceğini ummuyoruz. Bir depolama makinesinin diskine. Bu şüphesiz sistem titremesine neden olacaktır. Bu nedenle, bellek katmanını grup halinde konuşlandırdık. Her grupta birden fazla makine var. Bir veri parçasının bu birden çok makinede birden çok kopyası olabilir. Müşteri bu makinelere rastgele bir sırayla erişir. Bu şekilde, tek düğüm arızasının tüm sistem üzerindeki etkisini önlemek için elimizden gelenin en iyisini yapıyoruz.

    Bellek katmanında değişken uzunluktaki verileri destekleyen basit, hafif bir önbellek yapısı tasarladık. Her makine düzinelerce LRU zinciri içerir ve her zincir, paylaşılan bellek biçiminde tek boyutlu bir dizidir. Tüm veriler dizinin en son konumuna eklenir ve döngü, sondan sonra baştan başlar. Doğal olarak, böyle bir yapı, verilerin konumunu kaydetmek için bir indeks gerektirir. Bu yöntem bir miktar bellek alanı israf etse de, belleğin dinamik olarak ayrılmasını önler.

    Depolama katmanı

    Depolama katmanı, tüm sistem mimarisinin merkezinde yer alır. Hem bellek katmanı hem de makine sabit disk katmanı, uygulanmasına bağlıdır. Daha önce de belirtildiği gibi, verimli ve hafif sürüm numarası erişim yetenekleri sağlamak, güçlü ve tutarlı bir bellek katmanının uygulanmasının anahtarıdır. Aynı zamanda, soğuk verilerin mekanik sabit disk katmanına çekilmesi için sürekli talep, depolama katmanında böyle bir özellik olması gerektiği anlamına gelir: Soğuk verilerin tüm verilerden ayrılması ve toplanması kolaydır. Bu, depolama katmanındaki veriler düz ve sıcak ve soğuk veriler birbirine karıştırılırsa, soğuk verileri çıkardığımızda, sabit diskteki tüm verileri bir tur boyunca taramamız gerektiği anlamına gelir ki bu şüphesiz daha fazla tüketir. Daha fazla sistem kaynağı.

    Bu nedenle, bu gereksinimi karşılamak için lsm ağacı algoritmasını benimsedik. Bu algoritma, B + ağacı gibi bir indeksleme tekniğidir. Aradaki fark, gecikmeli gönderim ve birleştirme sıralaması yoluyla birden çok bileşene (C0 \ C1 ve diğer bileşenler) dayalı olmasıdır, B + ağacının rastgele GÇ'sini bellek işlemlerine ve sıralı GÇ'ye dönüştürür. Erişim modelimize göre, tüm yazılar sıcak verilerdir ve yalnızca C0 bileşenine gönderilecektir. Ardından, uygun bir zamanda, C1 bileşenindeki verilerle çoklu birleştirme sıralaması gerçekleştirin. Bu algoritma sayesinde, veri katmanlama ve veri sıralama amacına aynı anda ulaşabiliriz.

    Leveldb, Google'ın lsm ağacı algoritması fikrine dayalı olarak geliştirilmiş açık kaynak depolama motoru kitaplığıdır. Bu nedenle, günlük biçimi, veri dosyası biçimi, bellek tablosu biçimi vb. Gibi olgun veri yapısı bileşenlerini yeniden kullandık. Ancak, çalışma zamanı stratejilerinden bazıları mevcut ağ operasyonlarımıza sorun çıkaracaktır. Örneğin, çalışma zamanında kısıtlanmamış kompakt strateji, veri dosyası dizinlerinin tembel yüklenmesi, vb., Kontrol edilemeyen disk okumasını tetikleyecek ve servis titremesine neden olacaktır; aynı zamanda, büyük miktarda dinamik bellek tahsisi, makineye belirli kontrol edilemeyen bellek kullanımı da getirecektir. unsurları. Bu nedenle, bu çalışma zamanı davranışlarını terk ettik ve sistemi daha kontrol edilebilir hale getirmek için kendi yönetim stratejilerimizi belirledik. Aynı zamanda, soğuk ve sıcak verilerin depolanmasını özelleştirmek, blok sıkıştırmanın ayrıntı düzeyini ve zaman dilimine göre dizin ayrıntı düzeyini tanımlamak ve CPU, bellek ve disk kapasitesini etkin bir şekilde uzlaştırmak için farklı veri erişiminin farkını kullanırız. , Disk GÇ ve diğer sistem kaynakları dönüştürme ilişkisi.

    Soğuk veri bağlantısı ve soğuk kümenin yönlendirme tablosu, depolama katmanına kaydedilir ve ön uçta görünmez. Spesifik tasarım fikirleri bir sonraki bölümde detaylandırılacaktır.

    Mekanik sabit disk katmanı

    Mekanik sabit diskin büyük bir kapasitesi olmasına rağmen, IO performansı düşük ve arıza oranı yüksektir. Yaygın bir fikir, soğuk veri depolama katmanının sıcak veri depolama katmanından bağımsız olması ve doğrudan müşteri tarafından görülebilmesidir - müşteri, soğuk veri depolama katmanına giden bir rotayı tutar ve bağımsız olarak yönlendirir - bu şüphesiz basit ve kolaydır Çözümü anlayın, ancak uygulama senaryolarımızda iki sorunla karşı karşıyayız: doğru hava savunması yapamama ve mekanik sabit disk katmanının IO gerilimini artırma.

    TB erişim hacmini, TB veri başına saniyedeki erişim sayısı olarak tanımlayın. Uygulama senaryomuzda, geçmiş verilerin TB'si başına gerçek erişim hacmi N olarak ayarlanmışsa, mekanik sabit diskin hizmet kapasitesi N'nin yalnızca yarısıdır. Soğuk veri depolama katmanı bağımsız ise, tüm veri dizinlerini tek başına tutması gerekir ve bellek kapasitesi düzinelerce T verisinin dizinini desteklemek için yeterli değildir. Dizin yalnızca diske yerleştirilebilir ve veriler her okunduğunda iki Rastgele okumalar. Bu nedenle, soğuk veri indeksini ve soğuk veri depolama katmanının yönlendirme tablosunu sıcak veri depolama katmanına koyarız ve ön uçtan görünmez.

    Afet toleransı için, her bir veri parçasının birden çok kopyasını saklamamız gerekir. İkili bir kopya şeması kabul edilirse, sistem başka bir kopyanın arızasıyla başa çıkabilmek için% 50 fazlalık erişim kabiliyetine ihtiyaç duyar.Bir io darboğazı gerekçesiyle, bu şema tavsiye edilmez. Bu nedenle, yedeklilik kapasitenin üçte biri olduğu sürece, üç kopya şemasını benimsedik. Her kopya, kampüs düzeyinde afet toleransı sağlayabilen farklı bir kampüste dağıtılır.

    Mekanik disklerin yüksek kapasitesi ve zayıf bilgi işlem gücü nedeniyle disk grubunu NO RAID kullanarak organize ettik. Tek bir disk arızasının neden olduğu veri kaybının felaketten kurtarılmasını daha iyi gerçekleştirmek için, aynı gruptaki üç makinenin aynı disk seviyesi verilerini elde ettik. Disk seviyesinde yük dengeleme sağlamak için, (data- > Makine- > tabak - > Dosya) monoton eşleme, verilerin anahtar değeri doğrudan diskin dizinine ve dosya numarasına yerleştirilebilir.

    Mekanik sabit disk katmanına ek olarak, soğuk veri havuzlama modülü gereklidir.Soğuk veri depolama katmanının tek Yazıcısı olarak, iki aşamalı gönderim yöntemi ile çökme sürecinin şeffaflığını sağlıyor ve kontrol süreci üzerinden başlatmanın zamanlamasını sağlıyoruz. Kaynakların kullanımı mevcut ağ hizmetlerini etkilemez.Önceden işgal ve seri yazma yoluyla veriler, soğuk veri depolama katmanının dosya seviyesinde tamamen tutarlıdır.

    Güçlü veri tutarlılığı garantisi

    İşletme, sistemin birden çok veri kopyası arasında güçlü bir tutarlılık sağlamasını gerektirir. Bu uzun süredir devam eden bir zorluktur. Bellek katmanında, depolama katmanında ve mekanik sabit disk katmanında güçlü veri tutarlılığının korunmasını dikkate alacağız.

    Güçlü tutarlı önbellek

    Yukarıda açıklandığı gibi, bellek katmanı güçlü bir şekilde tutarlı dağıtılmış bir önbellektir, tamamen depolama katmanına hizalıdır, verinin kendisinin geçerliliğini yargılayamaz ve birden çok kopya arasında etkileşime gerek yoktur. Ön uca salt okunurdur, tüm yazma istekleri içinden geçmez ve yalnızca depolama katmanındaki verilerin bir görünümü olarak kabul edilebilir. Bu nedenle, ön uç verilerinin geçerliliğine olan bağlılığı tamamen depolama katmanının doğruluğuna bağlıdır.

    Paxos Grubu

    Paxos Grubu bazında, depolama katmanında veri tutarlılığı sağladık Kirasız bir yaklaşım benimseyerek, sistem güçlü tutarlılık sağlarken maksimum kullanılabilirliğe ulaştı. Paxos algoritması, kağıtta Lesile Lamport tarafından geliştirilmiştir.

    Paxos Group sahipsiz bir modeli benimsediğinden, gruptaki tüm makineler herhangi bir zamanda aynı konumdadır. Paxos algoritması esasen çok kopyalı eşzamanlı bir yazma algoritmasıdır Yazma başarısı, yalnızca sistemdeki çoğunluk aynı değeri kabul ettiğinde döndürülür. Bu nedenle, herhangi bir tek düğümün başarısızlığı sistemin kullanılamamasına neden olmaz.

    Güçlü tutarlılık yazma protokolünün temel sorunu Paxos algoritmasının kendisinden kaynaklanmaktadır, çünkü verilerin sistemdeki çoğunluk tarafından kabul edilmesini sağlamak için çok aşamalı etkileşim gereklidir. Paxos algoritmasının yazma sürecindeki sorunları çözmek için aşağıdaki yöntemleri uyguladık: yazma algoritması, yazma miktarını ve protokol mesajı gönderme ve alma sayısını azaltan hızlı kabul protokolüne dayalı olarak optimize edildi ve son olarak yazma süresinin ve başarısızlığın azaltılmasını sağladı; Rastgele kaçınmaya ve tek bir Paxos yazısının Hazırlanmayı tetikleme sayısını sınırlamaya dayalı olarak, Paxos'taki canlı kilit sorununu çözer.

    Güçlü tutarlılık okuma protokolünün kendisinin Paxos algoritmasıyla hiçbir ilgisi yoktur.Çoklu kopyaların çoğunluğu onaylandığı sürece, en son veriler elde edilebilir. Kümedeki çoğu makinenin (kendisi dahil) paxos günlüğünün durumunu yayınlayarak elde ederiz ve ardından yerel verilerin geçerliliğini değerlendiririz.

    Sistemdeki tek düğüm başarısız olduğunda ve veriler tamamen kaybolduğunda - bu durum Paxos algoritmasının kör bölgesi olarak kabul edilebilir, çünkü algoritma tüm katılımcıların önceki sözlerini, yani Bizans'ın başarısızlığından kaynaklanan verilere dayanmayacağı gerçeğine dayanmaktadır. Tutarsız. Bu durum mevcut ağ işlemlerinde normaldir, bu nedenle, Yalnızca Öğrenci modunu tanıttık. Bu modda, hatalı makine yalnızca gönderilen verileri alır ve Paxos protokolünün yazma sürecine katılmaz, bu da veri kaybı nedeniyle herhangi bir taahhüdü ihlal etmeyeceği anlamına gelir. Ardından, diğer kopyalardan verileri hızla kurtarmak için zaman uyumsuz yakalama ve tam veri doğrulamasını kullanın.

    Birden fazla düğümün aynı anda başarısız olmasını önlemek için, farklı kampüslerdeki makinelerde birden çok veri kopyası dağıtıyoruz. Park, aynı şehirdeki farklı veri merkezlerinin konseptidir. Bu şekilde, yapımız tek bir veri merkezinin tam izolasyon seviyesi felaketiyle başa çıkmak için yeterlidir.

    Seri yazma

    İstemci için şeffaf olduğu ve soğuk veri çökme işlemi mekanik sabit disk katmanının tek yazıcısı olduğu için, bu katmanın veri tutarlılığına ulaşmak kolaydır. Birden fazla kopya arasında veri tutarlılığını, seri halinde üç kopya yazıp hepsini başarı olarak sunarak sağladık.

    Ek olarak, soğuk veri kümesi veri bloğuna bir CRC kontrolü ve tutarlılık kurtarma kuyruğu ekler Tek bir makinedeki veriler kullanılamadığında (kaybolduğunda veya hasar gördüğünde), istemci önce okuma için diğer yedeklemelere atlayacaktır (üç makine aynı anda harici okuma sağlar). Hizmet), tutarlı kurtarma kuyruğu, yerel verileri diğer yedekleme veri bloklarından eşzamansız olarak kurtarır.

    Raid Yok modunda düzenlenen disk grubu benimsendiğinden ve aynı gruptaki makinelerin disk düzeyindeki veri dosyaları tutarlı olduğundan, tek bir disk arızası veri kaybına neden olduğunda, diğer makinelerin aynı diskinden yalnızca veri dosyaları aktarılabilir.

    Veri bölümü

    Statik eşleme tablosu

    Veri bölümlemenin temel amacı, aynı katmandaki makineler arasında yük dengelemesini sağlamaktır ve makine ölçeği değiştiğinde, sonunda yine de bir yük dengeleme durumu elde edilebilir.

    Klasik tutarlı karma algoritmanın asıl amacı, adresleme için çalışma zamanında karma değerlerin ve sanal düğümlerin dinamik olarak hesaplanmasına dayanan sağlam bir dağıtılmış önbellek içindir. Veri depolama ile dağıtılmış önbellek arasındaki fark, depolamanın veri eşlemenin tekdüzeliğini sağlaması gerektiğidir, ancak önbellekte bu gereksinimi yoktur. Bu nedenle, klasik tutarlı karma, genellikle karmayı gerçekleştirmek için makine IP'sini bir parametre olarak kullanır ve bu da Bir yandan verilerin konumu zaman zaman değişir, diğer yandan yük genellikle düzensizdir. Biz de bu algoritmayı değiştirdik.

    Sanal düğümün rastgele sayısını önceden hesaplayarak, kesme halkası noktası ile fiziksel makine arasında bir eşleştirme tablosu oluşturduk. Eşleştirme tablosu, fiziksel makineler arasındaki segment uzunluğundaki farkı herhangi bir sayıda grupta% 2 içinde tutma gereksinimini karşılamak için 1000 gruba kadar bir küme boyutunu destekleyebilir ve herhangi bir sayıda grubu artırabilir (toplam grup sayısının üst sınırı 1.000 grubu aşmaz) , Değişiklikten sonra, fiziksel makineler arasındaki kesim uzunluğu% 2'lik farkı hala korumaktadır. Çalışma zamanında hesaplama sürecini önlemek için bu eşleştirme tablosunu sabit bir şekilde kodluyoruz.Veriler anahtar değer karma değerine göre adreslendiğinde, karşılık gelen fiziksel makinenin numarası yalnızca bir ikili arama ile elde edilebilir. Her katmanda veri yönlendirme algoritmasının tutarlılığını sağlamak için bu eşleştirme tablosunu bellek katmanında, depolama katmanında ve mekanik sabit disk katmanında kullanıyoruz. Mühendislik uygulaması açısından, bu özelliği, sonraki bölümlerde ayrıntılı olarak açıklanacak olan kaynak tüketimini azaltmak için talepleri gruplar halinde birleştirmek için makul bir şekilde kullanabiliriz.

    Grup içi denge

    Bir grup, bir veri bölümünün bağımsız bir birimi ve bir sanal düğüme karşılık gelen fiziksel bir birimdir. Gruplar birbirinden bağımsızdır. Her grup, Paxos Grubunun yürürlüğe girmesi için temel birim olan birden fazla fiziksel makineden oluşur. Gruptaki her makineye bir parça verinin birden çok kopyası dağıtılır. Gruptaki makinelerde yük dengesini sağlamak için veri kopyaları arasında erişim önceliğini belirleyen bir dizi algoritma da tasarladık.Ön uç önceliğe göre tek tek veri talep edecek, edinim başarılı olduğu sürece işlem kesintiye uğrayacaktır. Daha sonra kopyaları önceliğe göre gruptaki makinelere eşit olarak dağıtıyoruz, böylece grup içindeki yük dengesi gerçekleştirilebilir.

    veri göçü

    Statik haritalama tablosu çok esnektir Bir veya daha fazla makine grubu, grup sayısının üst sınırına ulaşılmadan rastgele eklenebilir. Elbette, geçmiş verilerin hareketini içeren bu süreçte bazı verilerin yönlendirme haritalaması değişti. Hizmeti etkilememek ve Nuo Teng sürecinde verilerin hala okunabilir ve yazılabilir olmasını sağlamak için, veri çift yazma ve eşzamansız veri aktarımı yoluyla geçiş bayrağı bitine dayalı, ön uca şeffaf, güvenli ve iade edilebilir bir yöntem geliştirdik. Emekli veri taşıma süreci.

    Minimum değişmez blok

    Depolama katmanı ve mekanik sabit disk katmanı, bir soğuk veri bağlantısı aracılığıyla birbirine bağlanır. İki katman aynı eşleştirme tablosunu kullandığından, depolama katmanı kapasite genişlemesi nedeniyle taşındığında, soğuk veri bağlantısının şüphesiz yeniden adreslenmesi gerekecek ve bir tur yeniden konumlandırma gerçekleştirilecektir. Soğuk veri bağlantılarını kaydedersek ve tek anahtar değerlerinin ayrıntı düzeyinde soğuk veri çökmesi gerçekleştirirsek, trilyon anahtar bağlamında verimlilik şüphesiz düşüktür. Bu nedenle, verileri toplamak ve veri anahtarı değerini soğuk veri depolama katmanının makine yönlendirmesinden izole etmek için iki aşamalı bir hash aracılığıyla en küçük değişmez blok için bir algoritma tasarladık. Bu algoritma sayesinde şunları başarabiliriz: soğuk verinin toplu dökümü, sıcak veri depolama katmanı soğuk veri bağlantılarının bloklar halinde toplu kaydı, sıcak veri depolama katmanı genişlediğinde, bloktaki veriler Genişletme parçalanmış olduğundan, bir bütün olarak yeni hedef makineye taşınabilir.

    Mühendislik gerçekleştirme

    Kötü mühendislik uygulaması, mükemmel bir sistem tasarımını mahvedebilir, bu nedenle, mühendislik uygulama sürecinde teknik araçlarla sistemin performansının nasıl iyileştirileceği de dikkate değerdir.

    Verimli önbellek

    Bellek katmanının tasarımı, büyük ölçüde depolama katmanının veri sürüm numarasının verimli bir şekilde elde edilmesine dayanır, bu nedenle tüm sürüm numarası taleplerinin belleğe düşmesi doğaldır. Bu nedenle, bu duruma yanıt olarak, sabit uzunlukta sürüm numarası için minimalist, hafif ve etkili bir önbellek tasarladık - bellek kapasitesi, tam sürüm numarası önbelleğini desteklemek için yeterli değil.

    Veri yapısı sadece iki boyutlu bir dizidir, bir boyut bir karma zinciri oluşturmak için kullanılır ve bir boyut bir LRU zincirini uygulamak için kullanılır. Her okuduğunuzda veya yazdığınızda, güncelleme için dizideki verileri taşımanız gerekir. Bu şekilde, on milyonlarca LRU zincir grubu aracılığıyla önbelleğin genel LRU ortadan kaldırılmasını sağladık. Sabit uzunluk, paylaşılan bellek taşıma, işlem yeniden başlatma kaybı olmaması ve yüksek bellek kullanımı avantajlarına sahiptir.

    Toplu işlem

    Sistem sunucusu için, ön uç tarafından erişilen bir isteğin karşılık gelen mantıksal işlemi seridir.Bu seri işlemdeki CPU tüketim noktalarını doğal olarak sıralayabilir ve optimize edebiliriz. Bununla birlikte, ana darboğaz kademeli olarak ortadan kaldırıldığında, CPU tüketim noktaları dağılır ve optimizasyon etkisi minimum hale gelir. Bu nedenle, yalnızca diğer dönüm noktalarını arayabiliriz.

    Depolama motorunun ve mutabakat protokol algoritmasının uygulama sürecinde, ağ etkileşimi, sabit disk okuma ve yazma ve diğer işlemleri içeren birçok mantıksal işlem adımı olduğunu bulduk. Bu nedenle, CPU tüketimini büyük ölçüde optimize eden toplu işlemlere ulaşmak için aynı adımları farklı isteklerde birleştirmeye karar verdik.

    Birleştirme maliyeti, zaman alıcıda hafif bir artıştır.Hızlı ve yavaş ayırarak, zaman alıcı kararsızlık faktörlerini ortadan kaldırmak ve zaman alıcı titreşimi azaltmak için yalnızca sıcak veri taleplerindeki mantıksal işlemleri birleştiririz.

    Birleştirme iste

    Bağımsız bilgisayarın mantıksal işlem performansı büyük ölçüde iyileştirildiğinden, erişim katmanının paketlenmesi ve paketten çıkarılması ve protokol işleme dahil olmak üzere ön ve arka uçların ağ etkileşim aşaması, ana kaynak tüketim noktası haline geldi. Toplu işlem deneyimine referansla, performansı optimize etmek için toplu iş teknolojisini de kullanıyoruz - arka plandan erişilen tek bir istek (Al), bellek katmanında bir toplu istek (Toplu Al) olarak toplanır.

    Rota yakınsaması

    Her veri anahtar değerine göre ayrı ayrı yönlendirildiğinden, istekleri birleştirmek istiyorsak, aynı toplu iş talebindeki verilerin aynı Paxos Grubuna gönderilmesini sağlamalıyız. Bu nedenle, bellek katmanında aynı depolama makinesine düşen Get isteklerini toplamalıyız. Önce bellek katmanında ve depolama katmanında aynı yönlendirme algoritmasını benimsedik ve ardından bu hedefi gerçekleştirmek için bellek katmanındaki grup sayısını depolama katmanındaki grup sayısı ile hizaladık.

    Alakalı iş

    Tasarım aşamasında, genel sistem mimarisinden belirli teknik noktalara kadar sektördeki çeşitli çözümleri derinlemesine araştırdık. Çeşitli çözümlerin kendi uygulama senaryoları vardır ve her birinin kendi avantajları vardır.İyi ve kötü arasında basitçe ayrım yapamayız.Ayrıca kendi iş senaryolarımıza göre uygun çözümü dikkatlice seçer veya atarız. Burada tarif etmeye çalışın.

    SNS hizmetleri tarafından üretilen verileri işlemek için, endüstri referans için çeşitli soğuk ve sıcak ayırma mimarilerine sahiptir. Örnek olarak Facebookun Soğuk Hava Deposu sistemini ele alalım. Aynı zamanda sıcak ve soğuk katmanlandırma fikrine dayanıyor ve fotoğraf işletme verilerini sunan bir depolama çözümü tasarladı. Aradaki fark, yazılım ve donanım kombinasyonunu kullanmasıdır.Bir yandan özel sunucuları (sabit diskler, güç kaynakları vb. Dahil) ve veri merkezlerini özelleştirir, diğer yandan soğuk veri yedekleme sayısını azaltır ve silme kodlarını artırır.

    Ancak onların deneyimlerini tam anlamıyla uygulayamıyoruz.İki ana sebep var: Kullanabileceğimiz makine modelleri sabit ve donanımı kendimiz için özelleştirme şartı yok. Aynı zamanda fotoğraflar gibi değeri büyük olan verilerle ilgilenir. Ve biz temelde bu tür metnin küçük değerli verileriyiz. Yukarıda bahsedilen terabayt erişim hacmi perspektifinden bakıldığında, işledikleri veriler kapasitede bir darboğazdır ve bizim uğraştığımız şey, çok soğuk olmayan verilerin getirdiği bir zorluk olarak kabul edilebilecek bir GÇ darboğazıdır. Bu nedenle, yalnızca kendi soğuk veri yönetimi stratejimizi uygulayabiliriz.

    Benzer şekilde, sektörün veri tutarlılığının nasıl sağlanacağına dair birçok çözümü vardır. Veri birden çok kopyasını elde etmek için eşzamansız senkronizasyon kullanan bir NWR protokolü olan WeChat kendi geliştirdiği Quorum protokolümüz dahil. Artık eşzamansız ve eşzamanlı olduğuna göre, birden fazla kopya nihai tutarlılığa ulaştığında bir zaman farkı olmalıdır.Daha sonra, tek bir makine çevrimdışı olduğunda, verilerin kullanılamama olasılığı belli olacaktır. Tek bir başarısızlık noktası altında tüm verilerin güçlü bir şekilde kullanılabilirliğini sağlamak istiyoruz.

    Bu nedenle, kira dışı sözleşmelerin PaxosStore mimarisinin yenilikçi bir özelliği olduğu bu hedefe ulaşmak için sahipsiz ve merkezi olmayan Paxos Grubunu benimsedik. Bir arıza durumunda, sistem genellikle gergin ve aralıklı koşullar olacaktır. Bu senaryodaki yaygın kiralama uygulamaları, tekrarlanan ana bilgisayar anahtarlamasına ve uzun vadeli kullanılamama eğilimindedir. PaxosStore'un kiralama dışı yapısı, bununla kolayca başa çıkabilir ve her zaman iyi sağlayabilir Hizmet. PaxosStore'un temel kodu derlenmekte ve açık kaynaklı olup, dördüncü çeyrekte resmi olarak piyasaya sürülmesi beklenmektedir.Aynı zamanda, projenin temel çerçevesi de açık kaynak kodlu kitaplığımız github.com/libco'ya dayanmaktadır.

    yazar hakkında

    Ping An Yang, 2012 yılında Tencent'e katıldı ve WeChat Teknik Mimari Departmanı'nın temel platform grubundaki depolama sistemlerinin geliştirilmesinden sorumludur. Ard arda QuorumKV \ PaxosStore gibi projelerde yer almış ve WeChat depolama ile büyümüştür. Yol boyunca WeChat depolama mimarisinin evrimine tanık olduk.

    Bugünün Tavsiyesi

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

    Java eski, hala yiyebilir misin?

    Çinli oyunculara iyi mallar getirin! Ondan fazla otantik Titan 2 ve Old Roll 5 ürünü raflarda
    önceki
    Kötü adam ortaya çıkıyor! DC "Thunder Shazan!" Amca Ma Qiang'ın Dr. Shivana Olarak Yeni Fotoğraflarını Açıkladı
    Sonraki
    Optane bellek, başka bir sabit disk yükseltme çözümü
    İdol erkek grubunun yeni üyesi romantizmi duyurmaktan mı şüpheleniyor? Netizenler, şirketin çeşitli yolları reddettiğini düşünüyor
    "Yeni Danganronpa V3" mini oyun yeni bilgiler, sürebilirsin
    190323 Wu Yifan basketbol maçı kırmızı halı envanteri yayınlandı
    Huawei Geliştirici Yarışması için İşe Alım: Siz ve milyon yuan bonusu parmaklarınızla kaydolabilirsiniz
    "Bilgi" de Zhao Liying'in teyzesini canlandıran kişi gürültülü ama sevimli ve uzun yıllardır oyunculukta popüler değil.
    Kan geliyor! Sanat posterinin tanıtım görüntüsünün "Reunion 4" sızdırılmış versiyonu Captain Marvel gitmeye hazır
    "YÜZDE DOKUZ" "Haberler" 190323 Merhaba Kun! Cai Xukun Fei Shanghai bir moda kralı ve agresif hale geldi
    Kim Soo-hyun ve Song Seung-hyun ona bir idol, estetik ameliyatı olmayan ender Koreli aktris adını verdi ve hayatı bir şiire dönüştü.
    "TFBOYS" "Haberler" 190323 TFBOYS Kumdan Heykel Tiyatrosu, "Ever and Everlasting" filmiyle ilgili
    IFA 2018Sony ve New Balance, e-kağıt konsept ayakkabılarını piyasaya sürdü
    "Do You Know" da Feng Shaofeng'e benziyor ve seyirci Zhao Liying'in erkek başrolde hata yapacağından mı endişeleniyor?
    To Top