Splync Hassas Kimlikler İçin İki Kimlik Kullanıyor
Splync'in veritabanında, her kullanıcı ve her proje iki farklı kimlikle tanımlanır: bir UUID ve otomatik artan bir sayı.
Otomatik artan sayı, çoğu kişinin aşina olduğu bir sayacıdır: 1, 2, 3, ve devamı. Splync, sunucudaki veritabanında neredeyse her tabloyu düzenlemek için bu sayıları kullanır, çünkü bunlar basit, hızlı ve birleşimler için etkilidir. Ancak, bu dahili numaraları uygulamaya asla göstermeyiz. Örneğin, 42. kullanıcı olarak kaydolduysanız, veritabanındaki dahili kimliğiniz 42 olurdu. Ancak iOS uygulamanız "42" görmez. Bunun yerine, uygulama sizi temsil etmek için bir UUID kullanır. Projeler için de aynı yaklaşımı uygularız — veritabanında "7" olan bir proje kimliği, uygulamada daima uzun bir UUID ile ifade edilir.
UUID Nedir
UUID, Evrensel Olarak Benzersiz Tanımlayıcı anlamına gelir. Splync, RFC 4122 ile uyumlu sürüm 4, varyant 1 UUID'leri kullanır — en yaygın kabul gören standartlardan biri. Bu, 949ca11c-a6ed-48a3-b40a-fa9727494917 gibi rastgele oluşturulmuş bir dizgidir. Bir UUID genellikle tirelerle ayrılmış beş bölüme ayrılmış 32 onaltılık karakter olarak yazılır. Küresel olarak benzersiz olacak şekilde tasarlanmıştır, yani farklı sunucular veya veritabanları arasında çakışmayacaktır. Matematiksel olarak, yaklaşık 16^32 = 2^128 olası kombinasyon vardır. Ancak, varyant ve sürümü belirtmek için altı bit ayrıldığından, sürüm-4, varyant-1 UUID'lerinin toplam farklı sayısı yaklaşık 2^122, yani yaklaşık 5.3 x 10^36'dır — pratik benzersizliği sağlayan astronomik bir sayı.
1 / 5.300.000.000.000.000.000.000.000.000.000.000.000 Ne Kadar Küçük
Her UUIDv4 çifti yaklaşık 1'e 5.3 × 10^36 olasılıkla eşleşir. Bu sayı o kadar küçüktür ki insan hayal gücünde neredeyse yok olur. Bunu hayal etmek için, aynı anda 47 zar attığınızı düşünün. Hepsinde bir gelme olasılığı — her zar "1" göstermesi — yaklaşık 1'e 6^47'dir, yani kabaca 1'e 3.7 × 10^36. Bu, bir UUID çakışmasının büyüklüğüyle aynıdır. Şimdi, dünyanın her yerindeki sekiz milyar insanın, bir trilyon yıl boyunca her milisaniyede 47 zar attığını hayal edin. Bu, toplamda yaklaşık 2.5 × 10^32 denemeye eşittir. Bunun sonrasında bile, birinin bir yerlerde aynı anda 47 tane bir atma şansı sadece onda bir bindir. İki UUIDv4'ün çakışması bu kadar olasılık dışıdır. Bu nadir değildir. Kozmik derecede saçmadır — matematikçilerin kahvesini yere düşürüp evreni hatalara karşı kontrol etmesini sağlayacak türden bir tesadüftür.
UUID Oluşturmak Kolay mı
İlk bakışta, bir UUID oluşturmak basit görünebilir — sonuçta bu, rastgele görünen alfanümerik bir dizgedir. Ancak birini kendi elinizle yazmayı deneyin. 36 karakter yazabilirsiniz, ancak bu egzersizi binlerce kez tekrar ederseniz, net kalıplar ortaya çıkacaktır. Belki 3 veya 8 gibi belirli rakamları tercih ediyorsunuz ve x gibi harflere nadiren yer veriyorsunuz. Bir bilgisayar bu önyargıları anında tespit edebilir. Kötü niyetli bir hacker, alışkanlıklarınızı analiz edip "rastgele" gizli dizgenizi bir günde daraltabilir. Ardından, her rakamı oluşturmak için bir bilgisayara başvurup rand(), klasik rastgele fonksiyonunu çağırırsanız ne olur. Bu daha iyi — ama yeterince iyi değil. Yaygın programlama ortamlarındaki birçok "rastgele" sayı üreteci, bir iç tohumdan başlayan öngörülebilir bir matematiksel diziyi takip eden pseudo-rastgeledir, ki bu genellikle sistem saatine dayanır. Biri bu tohumu keşfeder veya tahmin ederse, üretecinizin ürettiği her değeri yeniden üretebilir.
Bir UUID Ne Kadar Mükemmel Rastgeledir
Mükemmel rastgelelik gerçekten var değildir — tıpkı mükemmel bir zar olmadığı gibi veya mükemmel bir zar atışı olmadığı gibi. Her fiziksel veya dijital süreç, bazı temel kurallara uyar. Yine de matematikçiler ve mühendisler, gerçek rastgeleliğe mümkün olduğunca yaklaşan algoritmalar tasarlamak için onlarca yıl harcamışlardır. Splync yeni bir sürüm-4 UUID oluşturduğunda, zar atmak gibi "rastgele sayılar seçmez." İşletim sisteminden küçük belirsizlik izlerini ister — örneğin, CPU'nuzun bir görevi bitirdiği kesin an, donanım içindeki zayıf elektriksel gürültü veya bellek içindeki arka plan zamanlama dalgalanmaları gibi. Bu entropi parçacıkları toplanır ve 128 bitlik veriye karıştırılır — birler ve sıfırlardan oluşan uzun bir sıra. Sonuç, uygulama kullanıcıları veya potansiyel kötü niyetli saldırganlar için tahmin edilmesi veya tekrar edilmesi pratikte imkansız olan bir koddur.
Splync'in Çift Kimlik Yaklaşımı
Splync, kullanıcı kimlikleri ve proje kimlikleri gibi hassas tanımlayıcılar için UUID'leri kullanır, çünkü bunlar son derece rastgele ve güvenlidir.
Aynı zamanda, sunucusunda bu UUID'leri büyük veri kümelerinde daha hızlı arama ve analiz için otomatik artan sayılara dönüştürür. Bu çift kimlik yaklaşımı, güvenlik ve kolaylık arasında denge kurar — harici gizlilik ile dahili performans. Splync'in hedefi, stressiz, basit ve güvenli bir bütçe takibi uygulaması olmaktır. Görünür arayüzün arkasında, yapıyı pürüzsüz, güvenli ve sessizce akıllı tutmak için mimarimizi geliştirmeye devam ediyoruz.