Mimari, üç katmanlı dağıtılmış Zanzibar-ilhamlı yetkilendirme hizmeti üzerine kuruludur: durumsuz Kontrol Motoru değerlendirme düğümleri, dünya genelinde dağıtılmış grafik depolama Anlık Veri Tabanı ve önbellek geçersiz kılma için olay odaklı İzleme Boru Hattı. Bu tasarım, okumaya ağır basan yetkilendirme kontrollerini yazmaya ağır basan izin güncellemelerinden ayırarak, değerlendirme kapasitesinin bağımsız ölçeklenmesine olanak tanırken ilişki mutasyonları için güçlü tutarlılık garantilerini sürdürür. Sistem, Google'ın zookie modelini kullanarak, kenar önbelleğinin performans avantajlarından ödün vermeden bayatlığı sınırlamaktadır.
Kenar konumlarına konuşlandırılan Kontrol Motoru düğümleri, yerel bellek içi önbellekler ve kompakt izin bitmap'leri kullanarak yetkilendirme sorgularını değerlendirir. Bu düğümler, bir çoğaltılmış etcd kümesinden ad alanı yapılandırmalarını yükler ve ilişki demetlerini coğrafi olarak bölümlenmiş CockroachDB veya Spanner örneğinden çözer, bu da dış tutarlılığı TrueTime veya hibrit mantıksal saatler aracılığıyla sağlar. Her düğüm, ilişkilerin kesinlikle mevcut olmadığı durumlarda veritabanına ulaşan önbellek hatalarını önlemek için Bloom filtreleri tutar.
"Yeni düşman problemi" olarak bilinen, yakın tarihli iptallerin kenar önbelleklerinde görünmez olabileceği durumu yönetmek için, sistem, hassas işlemler için yapılandırılabilir bir belirsizlik penceresi içinde önbellek hatalarını zorlayan, anlık tutarlılığı kodlayan saydam olmayan zaman damgaları olan zookie token'larını uygulamaktadır. Müşteriler, ilk kontrol işlemleri ile bu token'ları alır ve yüksek değerli kaynaklara erişirken bunları tekrar sunmak zorundadır, böylece yakın zamanda iptal edilen izinler hemen görünür hale gelir ve küresel önbellek geçersiz kılma gerektirmez. Bu mekanizma, düşük gecikme ihtiyacını güvenlik gereksinimiyle dengelemektedir.
Önbellek geçersiz kılma, Apache Kafka destekli İzleme Boru Hattını kullanarak demet değişikliklerini tüm kenar Kontrol Motorlarına yayıyor ve tutarlı hashleme ile sağlandığından, iptal fırtınalarının senkronize veritabanı bombardımanına neden olması yerine ardışık önbellek yenilemelerini başlatmasını sağlıyor. Boru hattı, geniş kapsamlı paylaşılmış nesnelerde izin değişiklikleri meydana geldiğinde thundering herd etkilerini önlemek için titreyen üstel geri çekilme yöntemini kullanır. Bu mimari, sistemin önbellek vuruşları için 10ms altı gecikme sürdürebilirken, coğrafi olarak dağıtılmış düğümler arasında izin güncellemeleri için neden-söz dizilimi tutarlılığını garanti eder.
50 milyon işletme kullanıcısına hizmet veren global bir belge işbirliği platformu, karmaşık paylaşım hiyerarşilerini değerlendirirken yoğun saatlerde felaket seviyesinde gecikme zirveleri yaşadı. Her belge erişimi, monolitik bir PostgreSQL kümesinde depolanan iç içe geçmiş grup üyelikleri ve miras alınan izinleri aşmayı gerektiriyordu ve bu da 500ms+ sorgu sürelerine ve çalışanların departman veya projeleri değiştiğinde toplu izin güncellemeleri sırasında sık sık zaman aşımına yol açıyordu. Mühendislik ekibi, kademeli iptaller sırasında katı güvenlik garantileri sağlarken 10ms altı gecikme süresine sahip bir çözüm bulmak zorundaydı.
İlk yaklaşım, agresif Redis malzeme görüntüleri ile izin yollarını önbellekleyecek merkezi bir PostgreSQL kümesi korumayı değerlendirdi. Artıları arasında, iptallerin anlık görünürlüğünü sağlamak için güçlü ACID garantileri ve karmaşık çoklu tablo güncellemeleri için basit işlem kavramları bulunuyordu. Eksileri, toplu izin değişiklikleri sırasında ciddi yazma darboğazları, popüler belgeler güncellendiğinde kaçınılmaz önbellek fırtınası riskleri ve güvenlikle kritik kararlar için kabul edilemez çoğaltma gecikmesini getiren karmaşık okuma kopyaları olmadan coğrafi olarak okuma verimliliğini ölçekleme yeteneğiydi.
İkinci yaklaşım, uygulama tarafında izin çözümü ve TTL tabanlı önbellek sona ermesi ile tam denormalize bir Apache Cassandra dağıtımı önerdi. Artılar arasında, ilişki mutasyonları için mükemmel yazma verimliliği ve tekil hata noktaları olmadan doğal çok bölgeli kullanılabilirlik bulunuyordu. Eksiler, iptal edilen izinlerin, dedikodu protokol gecikmeleri nedeniyle dakikalarca görünür kalması gibi kabul edilemez sonuçsuz tutarlılık uzlaşmalarını ortaya çıkardı ve atomik kademeli silme eksikliği, kullanıcıların ana gruplardan çıkarıldıklarında kaynaklara erişimlerini korumalarına neden olan güvenlik açıkları yarattı, bu da en az ayrıcalık ilkesini ihlal etti.
Ekip, nihayetinde, ilişki demet depolaması için CockroachDB kullanarak, Politika Uygulama Noktaları olarak Envoy yan hizmetlerini ve Bloom filtreleri ile önceliği olan LRU önbellekleri olan yatay ölçeklenmiş Kontrol Motoru düğümlerini içeren Zanzibar tarzı bir mimaride karar kıldı. Bu seçim, izin yazımlarında güçlü tutarlılık ihtiyacını, yerel değerlendirme önbellekleri ve Apache Kafka destekli geçersiz kılma akışları aracılığıyla kenar performansı gereksinimleri ile dengeledi. Sonuç olarak, p99 yetkilendirme gecikmesini 500ms'den 4ms'ye düşürdü, dünya genelinde saniyede 15 milyon kontrolü destekledi ve izin iptallerinin tüm kenar düğümlerine 150 milisaniye içinde yayılmasını sağladı, aynı zamanda %99.99 dostępność sağladı.
Bir izin iptali hemen ardından yetkilendirme kontrollerinin bayat "izin ver" kararları döndürmemesini nasıl sağlarsınız, dağıtılmış önbelleğin performans avantajlarından ödün vermeden?
Adaylar sıklıkla zookie modelini veya sürüm vektörlerini gözden kaçırırlar ve bunun yerine her kontrol için küresel önbellek geçersiz kılmayı veya veritabanı okumalarını önerirler. Çözüm, yetkilendirme hizmetinin her kararla birlikte, kullanılan verilerin anlık zaman damgasını kodlayan bir tutarlılık token'ı döndürmesini gerektirir. Hassas işlemler için veya yakın zamanlı iptal olaylarından sonra, istemci bu token'ı sunmak zorundadır, bu da Kontrol Motorunun yerel önbelleğinin token zaman damgasından daha önce olup olmadığını doğrulamasını zorunlu kılar. Bu, küresel önbellek geçersiz kılmaya gerek kalmadan neden-söz dizilimi tutarlılığını sağlar ve çoğu istek için okuma performansından ödün vermez.
Geniş kapsamlı bir paylaşılmış nesnenin izinleri değiştirilmesi durumunda, aynı anda milyonlarca önbellek yenilemesini tetiklemekten kaçınmak için önbellek geçersiz kılma mekanizmasını nasıl tasarlarsınız?
Ana tekniği, önbellek anahtarlarının tutarlı hashlenmesi ile titreyen üstel geri çekme ve kenar düğümlerinde istek birleştirmeyi bir araya getirmek oluşturur. İzleme Boru Hattı, bir demet değişikliğini yaydığında, kenar düğümleri hemen geçersiz kılma işlemi yapmaz, bunun yerine yenilemeleri zamansal bir pencereye yaymak için nesne kimliğinin bir hash'ini kullanarak zamanlamaya alır. Ayrıca, her Kontrol Motoru, tamamlanmakta olan kontroller için bir uçuş grubu tutar; böylece aynı nesneye yönelik eşzamanlı talepler, veritabanı aşırı yüklenmesini önlemek amacıyla tek bir arka uç sorgu sonuçları paylaşır.
Neden basit bir yönlendirilmiş grafik gezimi ReBAC politikalarını modellemek için yetersizdir ve dağıtılmış değerlendirme ortamında kesişme ve hariç tutma kısıtlamalarını nasıl ele alırsınız?
Basit grafik gezimi, "kullanıcı A grubunda ve grup B'den HİÇ BİRİ olmayacaksa izin ver" gibi karmaşık politikalar için gerekli küme işlemleri gerçekleştiremez. Çözüm, ad alanı yapılandırmalarının karar ağaçlarına derlendiği ve ters dizin sorguları aracılığıyla değerlendirildiği bir yeniden yazım sisteminin uygulanmasıdır; burada hem pozitif hem de negatif ilişki demetleri açıkça depolanmaktadır. Kesişim kısıtlamaları için sistem, her iki küme için sorgulama yapar ve Kontrol Motorunda kesişimi hesaplar; hariç tutmalar ise erken sonlandırma ile kısa devre değerlendirmesi kullanır. Bu yaklaşım, karmaşık boolean mantığının çoklu veritabanı gidip gelmeleri gerektirmeden verimli bir şekilde değerlendirilmesini sağlar.