Ali P8 Mimar Konuşması: Dağıtılmış Sistemde Küresel Benzersiz Kimliğin Tanıtımı ve Özellikleri

Dağıtılmış sistem şunları içerir: iyi bilinen dağıtılmış oturum teknolojilerine, veri tutarlılığına, yük dengelemeye, vb. ek olarak, dağıtılmış küresel benzersiz kimlik gibi teknik ayrıntıları da içerir.

01

-

Dağıtılmış benzersiz kimlik nedir

Karmaşık dağıtılmış sistemlerde, genellikle büyük miktarlarda veri ve mesajı benzersiz bir şekilde tanımlamak gerekir.

Örneğin, finans, e-ticaret, ödeme ve diğer ürünler sistemlerinde veriler gün geçtikçe büyüyor. Veriler alt veritabanı ve tablo olduktan sonra, bir veri veya mesajı tanımlamak için benzersiz bir kimlik gerekir. Veritabanının kendi kendine artan kimliği açıkça talebi karşılayamaz. Küresel olarak benzersiz bir kimlik oluşturabilen bir sistem çok gereklidir.

02

-

Dağıtılmış Benzersiz Kimliğin Özellikleri

  • Küresel benzersizlik : Yinelenen kimlik numarası görünemez, benzersiz bir tanımlayıcı olduğu için bu en temel gereksinimdir.
  • Artan eğilim : Kümelenmiş dizin, MySQL InnoDB motorunda kullanılır.Çoğu RDBMS, dizin verilerini depolamak için B-ağaç veri yapısını kullandığından, birincil anahtarları seçerken yazma performansını sağlamak için sıralı birincil anahtarları kullanmak için elimizden gelenin en iyisini yapmalıyız.
  • Monoton olarak artan : İşlem sürüm numarası, IM artımlı mesaj, sıralama ve diğer özel gereksinimler gibi sonraki kimliğin önceki kimlikten daha büyük olması gerektiğinden emin olun.
  • bilgi Güvenliği : Kimlik sürekli ise, kötü niyetli kullanıcının toplama işi çok kolaydır, sadece belirtilen URL'yi sırayla indirin; sipariş numarası ise daha da tehlikelidir ve rekabet günlük sipariş miktarımızı doğrudan bilebilir. Bu nedenle, bazı uygulama senaryolarında düzensiz ve düzensiz kimlikler gereklidir.
  • Aynı zamanda, kimlik numarası için gerekliliklere ek olarak, işletmenin ayrıca kimlik numarası oluşturma sisteminin kullanılabilirliği için son derece yüksek gereksinimleri vardır.Kimlik oluşturma sistemi çökerse bunun bir felaket getireceğini düşünün.

    Bu, sonraki kimlik oluşturma sisteminin aşağıdakileri yapması gerektiği sonucuna varır:

  • Ortalama gecikme ve TP999 gecikmesi olabildiğince düşük olmalıdır;
  • Kullanılabilirlik 59;
  • Yüksek QPS.
  • 03

    -

    Dağıtılmış benzersiz kimlik oluşturmanın 5 yolu

    1.UUID

    UUID'nin (Evrensel Benzersiz Tanımlayıcı) standart biçimi, 8-4-4-4-12'lik 36 karakter biçiminde kısa çizgilerle beş parçaya bölünmüş 32 onaltılık basamak içerir, örneğin: 550e8400-e29b-41d4-a716 -446655440000. Şimdiye kadar, endüstride UUID oluşturmanın 5 yolu vardır. Ayrıntılar için, lütfen IETF tarafından yayınlanan UUID belirtimine Evrensel Olarak Benzersiz Bir Tanımlayıcı (UUID) URN Ad Alanı'na bakın.

    avantaj:

    • Çok yüksek performans: yerel üretim, ağ tüketimi yok.

    Dezavantajları:

    • Saklanması kolay değil: UUID çok uzun, 16 bayt ve 128 bit, genellikle 36 uzunluklu bir dizeyle temsil edilir ve bu birçok senaryoda uygulanamaz.
    • Bilgi güvenli değil: MAC adresine dayalı olarak UUID oluşturan algoritma, MAC adresinin açığa çıkmasına neden olabilir Bu güvenlik açığı, Melissa virüsünü oluşturan kişinin konumunu bulmak için kullanıldı.
    • Kimlik birincil anahtar olarak kullanıldığında, belirli ortamlarda bazı sorunlar olacaktır.Örneğin, DB'nin birincil anahtarının kullanıldığı senaryoda UUID çok uygun değildir:

    2. Veritabanı üretimi

    MySQL'i örnek olarak alın.Kimliğin otomatik olarak artmasını sağlamak için auto_increment_increment ve auto_increment_offset'i kullanın. İşletme, kimlik numarasını almak için MySQL'i okumak ve yazmak için aşağıdaki SQL'i her kullandığında.

    Bu şemanın avantajları ve dezavantajları aşağıdaki gibidir:

    avantaj:

    • DBA tarafından düşük maliyetli, profesyonel bakım elde etmek için mevcut veritabanı sisteminin işlevlerini kullanmak çok basittir.
    • Kimlik numarası monotondur ve kendiliğinden artar, bu da kimlik için özel gereksinimleri olan bazı hizmetleri gerçekleştirebilir.

    Dezavantajları:

    • DB'ye güçlü bir güven, DB anormal olduğunda tüm sistem kullanılamaz, bu da ölümcül bir sorundur. Ana-bağımlı çoğaltmanın yapılandırılması, kullanılabilirliği olabildiğince artırabilir, ancak veri tutarlılığını özel durumlarda garanti etmek zordur. Master-slave geçişindeki tutarsızlık, tekrarlanan numara verilmesine neden olabilir.
    • Kimlik sorunu performans darboğazı, tek bir MySQL'in okuma ve yazma performansıyla sınırlıdır.

    3. Redis, kimlik oluşturur

    Kimlik performansı oluşturmak için bir veritabanı kullanmak yeterli olmadığında, ID oluşturmak için Redis'i kullanmayı deneyebiliriz.

    Bu, esas olarak Redis'in tek iş parçacıklı olmasına bağlıdır, dolayısıyla küresel olarak benzersiz bir kimlik oluşturmak için de kullanılabilir. Redis'in atomik işlemleri INCR ve INCRBY ile uygulanabilir.

    Her gün 0'dan başlayan bir seri numarası oluşturmak için Redis kullanmak daha uygundur. Örneğin, sipariş numarası = tarih + kendi kendine artan gün sayısı. Her gün Redis'te bir Anahtar oluşturabilir ve biriktirmek için INCR kullanabilirsiniz.

    avantaj:

    1) Veritabanına bağlı değildir, esnek ve kullanışlıdır ve performans veritabanından daha iyidir.

    2) Dijital kimlik doğal olarak sıralanır, bu da sayfalama veya sıralanması gereken sonuçlar için çok faydalıdır.

    Dezavantajları:

    1) Sistemde Redis yoksa, sistem karmaşıklığını artırmak için yeni bileşenlerin eklenmesi gerekir.

    2) Kodlama ve yapılandırmanın iş yükü nispeten büyüktür.

    4. Benzersiz bir kimlik oluşturmak için hayvan bakıcısı kullanın

    Zookeeper, seri numarasını esas olarak 32-bit ve 64-bit veri sürüm numaralarını oluşturabilen znode veri sürümü aracılığıyla üretir. İstemci bu sürüm numarasını benzersiz bir seri numarası olarak kullanabilir.

    Nadiren benzersiz bir kimlik oluşturmak için zookeeper'ı kullanır. Bunun ana nedeni, zookeeper'a güvenmeniz ve API'yi birden çok adımda çağırmanız gerektiğidir.Yüksek rekabet varsa, dağıtılmış kilitler kullanmayı düşünmeniz gerekir. Bu nedenle, yüksek oranda eşzamanlı dağıtılmış bir ortamda performans ideal değildir.

    5. Kar Tanesi (kar tanesi algoritması) şeması

    Genel olarak konuşursak, bu şema ad alanını bölerek kimlik üretmek için bir algoritmadır (UUID de sayılır, çünkü daha yaygındır, bu yüzden ayrı olarak analiz edilir) Bu şema 64 biti birden çok parçaya böler ve makineyi belirtmek için ayırır. , Zaman, vb., Örneğin, kar tanesindeki 64 bit, aşağıdaki şekli temsil eder (ağdan resim):

    41-bit zaman ifade edilebilir (1L < < 41) / (1000L * 3600 * 24 * 365) = 69 yıl, 10 bitlik makineler sırasıyla 1024 makineyi temsil edebilir. IDC bölümü için bir talebimiz varsa, 10-bit'i 5-bit'i IDC'ye ve 5-bit'i iş makinesine bölebiliriz. Bu şekilde 32 IDC temsil edilebilir ve her bir IDC kendi ihtiyaçlarına göre tanımlanabilen 32 makineye sahip olabilir. Kendinden artan on iki seri numarası 2 ^ 12 kimliği temsil edebilir. Teorik olarak, kar tanesi şemasının QPS'si yaklaşık 409,6 w / s'dir. Bu tahsis yöntemi, IDC'lerin herhangi bir milisaniyede herhangi bir IDC'nin herhangi bir makinesi tarafından oluşturulmasını sağlayabilir. Farklı.

    Bu yaklaşımın avantajları ve dezavantajları şunlardır:

    avantaj:

    • Milisaniye sayısı yüksek konumdadır, otomatik artış dizisi düşük konumdadır ve tüm kimlik eğilimi artmaktadır.
    • Veritabanları gibi üçüncü taraf sistemlere dayanmaz ve daha yüksek kararlılıkla bir hizmet olarak konuşlandırılır ve kimlik oluşturma performansı da çok yüksektir.
    • Bitler, çok esnek olan kendi iş özelliklerine göre tahsis edilebilir.

    Dezavantajları:

    • Makinenin saatine güçlü bir güven, makinedeki saat geri çevrilirse, tekrarlanan aramalara neden olur veya servis kullanılamaz.

    Uygulama örnekleri Mongdb nesne kimliği

    Resmi MongoDB belgesi ObjectID, kar tanesine benzer bir yöntem olarak sayılabilir. "Time + machine code + pid + inc" üzerinden toplam 12 bayttır ve son olarak 4 + 3 + 2 + 3 yöntemi ile 24 uzunluklu onaltılık olarak tanımlanır. Sistem karakterleri.

    -son-

    500 günlük kullanımın ardından sorunsuz olduğu iddia edilen Huaweiin en iyi işlemcisi burada
    önceki
    [Serie A] Juventus deplasmanda 2-0 Cagliari, Keane arka arkaya gol attı
    Sonraki
    Wang Jianlin'in beklemediği şey, Jack Ma'nın "yeni perakende" dönemi geldi
    Cep telefonu asla kapanmayacak, üretici bir cep telefonu şarjı artefaktı geliştirdi
    Juventus deplasmanda 2-0 Cagliari, Keane gol attı
    Tek noktadan danışmanlık Çocuğum kötü öksürürse ne yapmalıyım? Safra kesesi taşları nasıl tedavi edilir?
    Beklenen beyaz özel baskı geliyor. Arctis Pro GameDAC tushang
    Google VoLTE'yi dağıtmaya başladı, ancak üç büyük yerel operatör hala geziniyor
    2018'e geri bakış ping Xi Jinping'in yılı
    En iyi on WeChat dolandırıcılık vakasına göz atın, geçen yıl aldanmayın!
    Tek elle ve irfan kaçıran Wu Lei'nin iyi performansı sadece bir gol borçlu
    [Premier Lig] Her kurt kazanır! On kişilik Manchester United, Wolves'a 1-2 kaybetti, Smalling kendi başına
    Uçak biletlerinin yurt içi ana sistem yeniden yapılandırmasında RxJava öğrenme ve deneyim paylaşımı
    Kötü amaçlı yazılımlara dikkat edin! APP, bu şekilde kullanmak güvenlidir!
    To Top