Generating Unique IDs with Twitter Snowflake Approach
Günümüzde yüksek verimlilik ve ölçeklenebilirlik gerektiren dağıtık sistemlerde, benzersiz ve sıralı kimlik üretimi önemli bir gereksinimdir. Özellikle veritabanı işlemlerinde veya mikroservis mimarilerinde, aynı anda milyonlarca isteği karşılayan sistemlerin benzersiz ID üretimi sırasında çakışmalardan kaçınması gerekir. Unique Id
üretimi gerektiren sistemlerde, geliştiricilerin en sık karşılaştığı yöntemlerden bazıları Guid (Global Unique Identifier)
‘dir. Ancak her yöntemde olduğu gibi avantajlar ve dezavantajlar karar aşamasında başvuracağımız en önemli kriterler olacaktır. Guid
zaman bazlı sıralamayı desteklemez. Zaman bazlı sıralama, benzersiz kimliklerin (ID) oluşturulmasında ve dağıtık sistemlerde işlem takibi yapılmasında kritik bir rol oynar. Zaman bazlı sıralama, kimliklerin üretildiği andan itibaren belirli bir sıraya göre sıralanabilmesini sağlar. Bu özellik, sistemlerin kimliklerin oluşturulma zamanına göre veri işleme, indeksleme ve analiz yapmasına olanak tanır. Zaman bazlı sıralanabilen Guid
üretebilmek için Sequential Guid
kavramına göz atabilirsiniz. Bu makalede, Twitter’ın kendi altyapısında geliştirdiği Snowflake Algoritmasını inceleyeceğim ve Guid
Sequential Guid
ve Twitter Snowflake
arasında karşılaştırmalar yapacağım.
Twitter Snowflake Approach?
Twitter Snowflake algoritması, 64 bitlik bir sayı kullanarak benzersiz ID’ler üretir. Bu ID’ler aşağıdaki bileşenlere ayrılır:
- Zaman Damgası (Timestamp): 41 bit
- Veri Merkezi Kimliği (Datacenter ID): 5 bit
- Makine Kimliği (Worker ID): 5 bit
- Sıra Numarası (Sequence): 12 bit
Bu yapı sayesinde toplamda 64 bit (8 byte) boyutunda benzersiz bir ID oluşturulur. Zaman damgası, belirli bir başlangıç tarihinden (epoch) itibaren geçen süreyi milisaniye cinsinden tutar ve her yeni ID üretildiğinde artar. Veri merkezi ve makine kimlikleri, ID’lerin dağıtılmış ortamda hangi makineden ve hangi veri merkezinden geldiğini belirtmek için kullanılır. Sıra numarası ise aynı milisaniye içinde birden fazla ID üretilmesi durumunda devreye girer ve aynı makineden gelen ID’lerin benzersizliğini sağlar. Bu yapı sayesinde distributed bir yapıda, sunucular arasında senkronizasyona gerek kalmadan benzersiz id üretmeyi mümkün kılar.
|41 bit - Timestamp| 5 bit - Datacenter ID | 5 bit - Worker ID | 12 bit - Sequence|
Bu yapıya göre:
- Zaman damgası, 69 yıla kadar benzersiz ID üretimi sağlar. (69 yıl sonra timestamp overflow)
- Veri merkezi ve makine ID’leri ile toplam 1024 farklı makine desteklenebilir.
- Her bir milisaniyede 4096 farklı ID üretilebilir.
Avantajlar
- Benzersizlik Garantisi: ID’ler makine, veri merkezi ve zaman bilgisi ile benzersiz hale getirilir.
- Zaman Bazlı Sıralama: ID’ler, üretildikleri zamana göre sıralanabilir. Bu, veritabanı sıralama işlemlerini hızlandırır.
- Yüksek Performans: Makineler kendi ID’lerini ürettiği için merkezi bir sunucuya ihtiyaç duyulmaz.
- Yatay Ölçeklenebilirlik: Veri merkezleri ve makineler arasında ID üretimi dağıtılabilir.
Dezavantajlar
- Zaman Senkronizasyon Problemi: Sunucular arasında saat senkronizasyonu bozulursa ID çakışmaları veya hata durumu ortaya çıkabilir.
- Sabit Yapı: ID yapısındaki her bir bit sayısı sabittir. Uygulamaya özel ihtiyaçlar değişirse yapı esnetilemez.
- Sınırlı Miktarda ID: Saniye başına üretilen ID sayısı ve maksimum makine sayısı kısıtlıdır.
- Zaman Temelli Sıralama Kısıtları: Üretilen ID’lerin sıralaması, sadece aynı veri merkezi ve makine için geçerlidir.
Snowflake vs Guid vs Sequential Guid
GUID, 128 bit uzunluğunda benzersiz bir kimlik üretme yöntemidir. Herhangi bir merkezi sisteme veya saate bağlı kalmadan benzersiz kimlikler üretme yeteneğine sahiptir. Bu nedenle, dağıtık sistemlerde veya merkezi olmayan ortamlarda kullanılmaya oldukça uygundur.
- Format: GUID’ler 16 byte (128 bit) boyutunda ve genellikle “8–4–4–4–12” formatında (örneğin:
550e8400-e29b-41d4-a716-446655440000
) temsil edilir. - Benzersizlik Garantisi: GUID’lerin benzersizlik oranı çok yüksektir, çünkü kimlikler, makine saati ve rastgele sayılarla kombinlenerek oluşturulur.
- Çakışma Riski: Neredeyse sıfırdır. Ancak tamamen merkezi olmayan ve birbirinden bağımsız ortamlar için bile kullanılabilir.
Sequential GUID, klasik GUID formatına benzer şekilde benzersiz kimlikler üretir ancak önemli bir farkı vardır: Üretilen kimlikler, belirli bir sıraya göre düzenlenir ve sıralanabilir niteliktedir. Bu, özellikle veritabanlarında indeks performansı açısından önemli bir avantaj sağlar.
- Format: Sequential GUID de 16 byte uzunluğundadır, ancak kimlikler genellikle zaman bazlı olarak düzenlenir.
- Veritabanı Performansı: Sıralı olarak indekslendiği için özellikle veritabanı işlemlerinde veri ekleme ve indeks oluşturma işlemlerini hızlandırır.
- Sıralı Olma Özelliği: Zaman bazlı sıralama sağladığı için veritabanı tablolarında fragmentasyon ve yavaşlama sorunlarını önler.
Gelişen teknolojiyle birlikte sistemlerin ölçeği, karmaşıklığı ve yaşam süreleri de giderek artıyor. Bu değişimler, kimlik üretimi gibi temel yapı taşlarını yeniden düşünmeyi ve sağlam çözümler geliştirmeyi gerektiriyor. Twitter Snowflake algoritması, zaman bazlı sıralamanın ve dağıtık sistemlerde benzersiz kimlik üretmenin ne kadar kritik bir unsur olduğunu bizlere gösteriyor. 69 yıllık bir benzersizlik süresi uzun gibi görünse de, bu sınıra yaklaşıldığında uygun önlemler alınmazsa karşılaşılan kimlik çakışma sorunları büyük çaplı sistemlerde ciddi sonuçlar doğurabilir.
Snowflake, GUID, ve Sequential GUID gibi kimlik oluşturma yöntemleri, farklı kullanım senaryolarında güçlü çözümler sunarken, ne zaman hangi yöntemi kullanmanız gerektiği konusundaki kararlar proje başarınızı doğrudan etkileyebilir. Eğer dağıtık ve ölçeklenebilir bir sistem inşa ediyorsanız, zaman bazlı sıralama ve benzersizlik kriterlerini göz önünde bulundurmanız kaçınılmazdır. Sonuç olarak, ihtiyaçlarınıza en uygun algoritmayı seçmek, gelecekte karşılaşabileceğiniz olası problemleri şimdiden çözüme kavuşturacaktır.
Bu yazıda ele aldığımız bilgilerle, Snowflake algoritmasının detaylarını öğrenmiş, alternatif çözümleri tartışmış ve 69 yıl sonrasını düşünerek sistemi nasıl geleceğe hazır hale getirebileceğimizi kavramış olduk. Yazılım dünyasında benzersizlik ve ölçeklenebilirlik gibi konular her zaman önemini koruyacaktır ve bu yüzden, zaman damgasının ötesini görüp, sisteminizi geleceğe güvenle taşıyan çözümler geliştirebilmeniz dileğiyle… 👋