Snowflake Kimlik Oluşturucu - Benzersiz Dağıtılmış Kimlikler Oluştur
Ücretsiz Snowflake kimlik oluşturucu ve ayrıştırıcı. Dağıtılmış sistemler için benzersiz 64-bit kimlikler oluşturun. Mevcut kimlikleri zaman damgası, makine kimliği ve sıra bilgilerini çıkarmak için ayrıştırın.
Snowflake Kimlik Oluşturucu
İsteğe bağlı: Milisaniye cinsinden Unix zaman damgası (varsayılan olarak geçerli zaman)
Makine Kimliği (0-31)
Veri Merkezi Kimliği (0-31)
Sıra Numarası (0-4095)
Belgeler
Snowflake Kimlik Oluşturucu Nedir?
Snowflake kimlik oluşturucu, zaman damgası, makine tanımlayıcısı ve sıra numarasından benzersiz bir 64 bitlik sayı oluşturur. Twitter, her tweet'e birçok sunucunun aynı anda, birbirlerine "bu sayı daha önce kullanıldı mı?" diye sormasına gerek kalmadan üretebileceği bir tanımlayıcı vermek için bu biçimi 2010 yılında oluşturdu. Bu araç, girilen değerlerden bir Snowflake kimliği oluşturur ve bu değerlerin 64 biti nasıl doldurduğunu gösterir.
Bu Snowflake Kimlik Oluşturucu Nasıl Çalışır?
Oluşturucu dört girdi alır:
- Zaman damgası: Milisaniye cinsinden Unix zaman damgası. Geçerli zamanı kullanmak için boş bırakın.
- Makine kimliği: 0 ile 31 arasında bir tam sayı (5 bit). Bu, Twitter'ın özgün "işçi kimliği"dir.
- Veri merkezi kimliği: 0 ile 31 arasında bir tam sayı (5 bit).
- Sıra numarası: Aynı milisaniyede oluşturulan kimlikleri birbirinden ayırmak için kullanılan, 0 ile 4095 arasında bir tam sayı (12 bit).
Araç, dört değeri tek bir 64 bitlik kimlikte birleştirir. Ardından sonucu, zaman damgası, veri merkezi, makine ve sıra bölümlerine ayrılmış ikili biçimde gösterir.
Zaman damgası, Twitter dönemi adı verilen sabit bir başlangıç noktasından itibaren ölçülür: 4 Kasım 2010, 1:42:54,657 UTC veya Unix döneminden sonra geçen 1.288.834.974.657 milisaniye. Bu oluşturucu, bu başlangıç noktasının değiştirilmesine izin vermez. Oluşturduğu her kimlik, aynı sabit tarihten itibaren ölçülür.
Snowflake Kimlik Yapısı
Snowflake kimliği, en anlamlı bitten başlayarak okunan ve dört bölüme ayrılmış 64 bitlik bir tam sayıdır:
| Bitler | Alan | Değer kümesi |
|---|---|---|
| 1 | İşaret biti | her zaman 0 |
| 41 | Zaman damgası | Twitter döneminden bu yana geçen milisaniyeler |
| 5 | Veri merkezi kimliği | 0–31 |
| 5 | Makine (işçi) kimliği | 0–31 |
| 12 | Sıra numarası | 0–4095 |
Baştaki bit her zaman 0 olduğundan Snowflake kimliği her zaman pozitif bir sayıdır. 41 bitlik zaman damgası ve 12 bitlik sıra alanı, Snowflake kimliklerini sıralamada kullanışlı kılan iki bölümdür: Daha sonra oluşturulan kimliklerin zaman damgası bölümü daha büyüktür; bu nedenle önceki kimliklerin ardından sıralanırlar.
Snowflake Kimlik Formülü
Oluşturucu, kimliği şu formülle oluşturur:
burada d farkı, t milisaniye cinsinden girilen zaman damgasını, I tamamlanmış kimliği, c veri merkezi kimliğini, m makine kimliğini ve s sıra numarasını belirtir.
<< sola bit kaydırmadır. Bir sayıyı 22 bit sola kaydırmak, onu 2²² veya 4.194.304 ile çarpmakla aynıdır. Kaydırma miktarları (22, 17, 12) doğrudan alan genişliklerinden gelir: Sıra alanı 12 bit genişliğinde olduğundan makine kimliği 12 bit yukarıda yer alır; makine alanı 5 bit genişliğinde olduğundan veri merkezi kimliği 17 bit yukarıda yer alır (12 + 5); diğerleri de aynı şekilde belirlenir.
Snowflake Kimliği Nasıl Hesaplanır: Çözümlü Örnek
Bir kişinin şu değerleri girdiğini varsayalım:
- Zaman damgası: 1.288.834.975.657 (Twitter döneminden tam olarak 1.000 ms sonra)
- Veri merkezi kimliği: 1
- Makine kimliği: 1
- Sıra numarası: 0
1. adım — Farkı bulun. Dönemi zaman damgasından çıkarın: 1.288.834.975.657 − 1.288.834.974.657 = 1.000.
2. adım — Her alanı yerine kaydırın.
- Zaman damgası: 1.000 << 22 = 4.194.304.000
- Veri merkezi kimliği: 1 << 17 = 131.072
- Makine kimliği: 1 << 12 = 4.096
- Sıra: 0
3. adım — Bit düzeyinde VEYA ile birleştirin. Kaydırılan alanların hiçbiri çakışmadığından, bunları toplamak VEYA işlemine tabi tutmakla aynı sonucu verir:
4.194.304.000 + 131.072 + 4.096 + 0 = 4.194.439.168
Bu, bu girdi için Snowflake kimliğidir. Aracın sonuç görünümü, aynı 64 bitlik ikili diziyi bir 41 bitlik zaman damgası bloğuna, 5 bitlik veri merkezi bloğuna, 5 bitlik makine bloğuna ve 12 bitlik sıra bloğuna ayırarak gösterir; böylece sayının yapısı görünür kalır.
Snowflake Kimlikleri Nerelerde Kullanılır?
Twitter, her sunucunun kontrol etmesi gereken merkezi bir sayaç olmadan, binlerce veritabanı makinesindeki tweet'lere benzersiz ve yaklaşık olarak zaman sıralı kimlikler vermek için bu biçimi geliştirdi. Discord ve Instagram daha sonra mesajlar ve gönderiler için benzer 64 bitlik kimlik tasarımlarını benimsedi. Aynı fikir, veritabanı parçalamada, e-ticaret sistemlerindeki sipariş kimliklerinde ve dağıtık uygulamalardaki olay günlüklerinde de görülür. Birçok makinenin kimlikleri bağımsız olarak dağıttığı ve bunların yine de yaklaşık olarak zamana göre sıralanması gereken her ortama uygundur.
Snowflake Kimliklerinin Sınırlamaları
Üretim ortamındaki bir Snowflake oluşturucu normalde kendi saatini sürekli izler: aynı milisaniyede oluşturulan her kimlik için sıra numarasını artırır ve sıra 4.095 değerine ulaştığında bir sonraki milisaniyeyi bekler. Bu araç, hesaplamalar arasında bellekte değer tutmaz. Girilen değerlerden tek bir kimlik oluşturur; bu nedenle biçimi incelemek için kullanışlıdır, ancak çalışan bir üretim hizmetinden farklıdır.
Tasarımın, onu uygulayan hizmetten bağımsız olarak sabit sınırları vardır:
- Sabit dönem: bu oluşturucu yalnızca 4 Kasım 2010 tarihindeki veya sonrasındaki zaman damgalarını kabul eder (Twitter dönemi). Daha önceki tarihler kodlanamaz.
- Zaman damgası üst sınırı: 41 bitlik zaman damgası alanı yaklaşık olarak Temmuz 2080 tarihinde tükenir. Bundan sonra dönemden itibaren geçen fark 41 bite sığmaz.
- Sıra sınırı: değerler tekrarlanmadan önce aynı milisaniyede tek bir makine tarafından yalnızca 4.096 farklı kimlik (0–4095) verilebilir.
- Makine alanı: makine kimliği ve veri merkezi kimliği için ayrı ayrı 5 bit kullanıldığında, bir dağıtım çakışma olmadan dağıtmak üzere 1.024 farklı makine kimliğine (32 × 32) sahip olur.
- Küresel değil, yerel sıralama: Kimlikler yalnızca saatleri eşzamanlanmış makinelerden geldiklerinde birbirlerine göre doğru sıralanır. Makineler arasındaki saat sapması kesin zaman sıralamasını bozabilir.
Snowflake Kimliğinin Tarihçesi
Twitter, birçok bağımsız veritabanı sunucusunda ölçeklenemeyen basit otomatik artan veritabanı kimliklerinin yerine geçmesi için Snowflake kimlik biçimini 2010 yılında duyurdu. Adı, gerçek kar taneleri gibi oluşturulan hiçbir iki kimliğin birbirinin aynısı olmadığı fikrinden gelir. Tasarım daha sonra açık kaynak hâline getirildi ve aynı gereksinime sahip diğer büyük platformlar tarafından değiştirilmiş biçimde kopyalandı: birçok makine tarafından aynı anda oluşturulan benzersiz ve sıralanabilir kimlikler.
Sık sorulan sorular
Snowflake kimliği nedir? Snowflake kimliği, birçok makinenin birbirleriyle koordinasyon kurmadan benzersiz kimlikler oluşturabilmesi için tasarlanmış, zaman damgası, makine tanımlayıcısı ve sıra numarasından oluşan 64 bitlik bir sayıdır.
Snowflake kimlik formülü nedir?
id = ((timestamp − epoch) << 22) | (dataCenterId << 17) | (machineId << 12) | sequence; burada dönem sabit bir başlangıç tarihidir ve << sola bit kaydırmadır.
Bu oluşturucuda dönemi değiştirebilir miyim? Hayır. Bu araç, zaman damgasını her zaman sabit Twitter döneminden, 4 Kasım 2010 tarihinden itibaren ölçer. Farklı bir başlangıç tarihi belirlemek için bir alan yoktur.
Bu araç mevcut bir Snowflake kimliğini çözümler mi? Hayır. Yalnızca girilen zaman damgası, makine kimliği, veri merkezi kimliği ve sıra numarasından yeni bir kimlik oluşturur, ardından bu yeni kimliğin bit dağılımını gösterir.
Bir makine milisaniyede kaç Snowflake kimliği oluşturabilir? En fazla 4.096 kimlik; sıra alanı 12 bit genişliğindedir (değerler 0 ile 4.095 arasındadır).
Bu oluşturucu hangi yıla kadar geçerli zaman damgaları üretebilir? Yaklaşık Temmuz 2080 tarihine kadar. 41 bitlik zaman damgası alanı, sabit 2010 döneminden itibaren ölçülen yaklaşık 69,7 yılı tutabilir; bundan sonra değer alanı aşar.
Kaynaklar
- "Snowflake'i duyuruyoruz." Twitter Mühendislik Blogu, 2010.
- "Snowflake ID." Wikipedia, https://en.wikipedia.org/wiki/Snowflake_ID