Ters piramit modeli
Mimaride "ters piramit modeli'nedir?
Ters piramit modeli, en önemli ve en az gerekli bilgi/işlevselliğin ilk iletildiği ve garanti edildiği ve daha az kritik detayların aşamalı ve isteğe bağlı olarak eklendiği sistem ve protokolleri tasarlamanın bir yoludur. Terim, gazetecilikten bir fikir ödünç alır (asıl şey ilk başta), ancak mühendislik görevlerine uyarlanır: kritik yol her koşulda çalışır, diğer her şey "zenginleşme katmanları'dır.
Sezgisel resim: Üstteki dar üst kısım "minimum garanti sözleşmesi" (MGC), aşağıda kaynaklar/uyumluluk varsa sistemin uyguladığı uzantılar, optimizasyonlar ve zengin özellikler bulunmaktadır.
Uygulandığı yerde
Ağ protokolleri ve API'ler: REST/gRPC/GraphQL, webhooks, etkinlik brokerleri.
Akış kanalları: WebSocket, SSE, Kafka/NATS, RTC.
Hizmet mimarisi: kritik yol ve yan etkiler (denetim, analitik, önbellek ısınma).
Mobil/web istemcileri: Önce "iskelet" UI ve anahtar veri, sonra tembel medya yükleme ve öneriler.
Ödeme ve risk zincirleri: yetkilendirme/rezervasyon - öncelikli olarak; Anti-dolandırıcılık/analiz - asenkron, son teslim tarihleri ile.
Gözlemlenebilirlik: her zaman log/minimum seviye metrik; trace/profilleme - örnekleme ile.
Model ilkeleri
1. Minimum Garanti Sözleşmesi (MGC)
Betiğin anlam ifade etmediği bir dizi alan ve işlem. Kararlı, geriye dönük uyumludur ve önce geçer.
2. Aşamalı zenginleştirme
Ek alanlar/işlevler isteğe bağlı uzantılar olarak teslim edilir (yetenekler/özellik bayrakları/Müzakere).
3. Arıza olmadan bozulma
Aşırı yüklendiğinde veya kısmen kullanılamadığında, sistem MGC'yi çalışır durumda tutarak isteğe bağlı katmanları atar.
4. Açık önceliklendirme ve SLA'lar
Her katmanın kendi SLO'su (gecikme, kullanılabilirlik), kuyrukları ve hizmet sınıfları (QoS) vardır.
5. Devrelerin eklemeli evrimi
Yeni alanlar geçersiz/isteğe bağlı olarak eklenir, istemcileri kırmayın; Zor değişiklikler - sadece yeni sürümle.
6. Katmanlara göre gözlemlenebilirlik
Metrikler ve günlükler kritiklik ile işaretlenir: 'çekirdek. ',' enh. ',' toplu. Sistemin yük altında neleri feda ettiğini görmek için.
"Klasik" katman piramidi ile karşılaştırma
Klasik mimari (dipler - taban, üstler - UI) bağımlılıkları vurgular.
Ters piramit, teslimatın önemini ve sırasını vurgular: önce "çekirdek", sonra "sahip olmak güzel".
Model protokol tasarımı
1) REST/HTTP
MGC: minimum kaynak/uç nokta ve gerekli alanlar.
Uzantılar:- İçerik reddi ('Kabul et', 'Tercih et'),
- Parametreler mi? include ='/'? fields = 'seçici taneciklik için,
- Satır içi yerine'ağır "eklere (önceden imzalanmış URL'ler) bağlantılar.
- Bozulma: zaman aşımı olduğunda, iç içe koleksiyonlar olmadan MGC verin; 206 Büyük gövdeler için Kısmi İçerik
- Sürüm oluşturma: eski sözleşmeleri değiştirmeden eklemeli alanlar; Sadece değişiklikleri kırmak için ana sürüm.
2) gRPC
proto: güvenli etiket numaralandırmalı yeni 'işlevsel' alanlar; Silinen etiketleri tekrar kullanmayın.
Sunucu tarafı son teslim tarihleri ve yöntem başına QoS (öncelikli kritik RPC'ler).
Akış: ilk mesajlar - başlıklar/toplamlar, daha sonra parçalara göre detaylandırma.
3) Etkinlik otobüsleri (Kafka/NATS)
Event-core: 'event _ type','id ',' occured _ at ', minimal iş alanları.
Zenginleştirme: Biz dışarı kutu/CDC ve bireysel konular '-enriched' dışarı almak.
Önce özetleyin, daha sonra ayrıntıları: tüketiciler iş sürecini çekirdeğe göre tamamlayabilir ve ayrıntılar eşzamansız olarak yüklenir.
Ters piramit ile iyi oturan desenler
Önce Kritik Yol: Eşzamanlı "zorunlu'u eşzamansız yan etkilerden ayırın.
Write-ahead/Outbox: Olayın gerçeğini kaydedin, gerisi arka plan teslimidir.
Lazy & Incremental Fetch: sayfalama, imleçler, 'If-Modified-Since'/ETag.
Capabilities Discovery - Sunucu/İstemci açıkça hangi uzantıların desteklendiğini bildirir.
Backpressure ve Bütçeler: son tarihler, katman başına CPU/IO sınırları; Yük altındaki ikincil görevlerin iptali.
SLO-Scoped Önbelleğe Alma: "çekirdeği'daha agresif, zenginleştirme - daha kısa/daha ince önbelleğe alıyoruz.
Uygulama algoritması
1. Senaryo haritalama: Kullanıcı Yolculuğu'nu yazın ve "değer anını" vurgulayın.
2. MGC'yi tanımlayın: Değer elde etmek için minimum alanlar/işlemler.
3. Katmanlara bölün: 'çekirdek', 'genişletilmiş', 'analitik/toplu iş'.
4. Her katman için SLO/SLA ve QoS ayarlayın.
5. Tasarım bozulması: N % başarısızlık/p95 büyümesinde neleri atıyoruz?
6. Şemaların evrimi: sürüm politikası, önce katkı maddesi.
7. Gözlemlenebilirlik: metrikler/günlükler/izlerdeki katman etiketleri, "çekirdek" üzerindeki uyarılar.
8. Test: kaos mühendisliği ve katman katman hata enjeksiyonu.
9. Başlatma ve geri bildirim: ficheflags üzerindeki uzantıları açın ve kanaryaya çıkın.
Katmanlara göre metrikler ve SLO
Çekirdek: p95/p99 gecikme, başarılı kritik işlemlerin yüzdesi, bozulma sırasında hata toleransı.
Genişletilmiş: zenginleştirilmiş yanıtların yüzdesi, ortalama yükleme süresi.
Batch/Analytics: Gerçek zamanlı gecikme, pencere başına işlenen olayların oranı.
İş metrikleri: Aşırı yüklemeye karşı "değer noktasına" dönüşüm normaldir.
Anti-desenler
"Her şey özdür": uzantılar zorunlu hale gelir, bozulma imkansız hale gelir.
Yeni bir ana sürüm olmadan MGC değişikliklerini kırmak.
Gizli kırılganlık: Kritik yol, harici "ikincil" bağımlılıklara dayanır (örneğin, eşzamanlı sahtekarlık karşıtı çağrı).
Örtülü uzantılar: Müşteriler neyin etkinleştirilebileceğini/devre dışı bırakılabileceğini bilmiyor.
Gözlemlenebilirlik eksikliği: sistem "sessizce" bozulur ve nerede olduğunu göremezsiniz.
Örnekler
A. Kullanıcı Profili (REST)
MGC:'id ',' display _ name ',' avatar _ url ',' tier '.
Uzantılar: 'Rozetler []','sosyal _ bağlantılar [] ',' son _ etkinlik []'tarafından '? include = '.
Bozulma: zaman aşımına uğradığında, MGC ve paylaşılan kaynaklara (HATEOAS/URL'ler) bağlantılar verin.
B. ödeme yetkilendirmesi
MGC: yetkilendirme sonucu (onaylanmış/reddedilmiş), 'transaction _ id', 'amount', 'currency'.
Uzantılar: 3DS telemetri, risk oranı, coğrafi, ortak atıf - olay 'ödeme tarafından asenkron. yetkilendirildi '.
Bozulma: analitik başarısız olursa, ödeme gider ve denetim/puanlama yakalar.
B. Akış alıntılar
MGC: En son fiyat "anlık görüntü".
Uzantılar: cam derinliği, toplu göstergeler - anlık görüntüden sonra akış.
Bozulma: yük altında, uzantı güncellemelerinin sıklığı düşer, ancak anlık görüntü sabittir.
Sürüm oluşturma ve evrim
Ek-ilk: yeni alanlar 'isteğe bağlı/geçersiz', eski olanlar kalır.
Anlamsal Sürümler: Çekirdek için 'v1'; 'v1. x '- uzantıları;' v2 '- MGC değiştiğinde.
Koddaki sözleşmeler: JSON Schema/Protobuf + CI "kırılmayan" dağıtımların doğrulanması.
Güvenlik ve uyumluluk
MGC imzalı/doğrulanmış: minimum alan kümesi kriptografik bütünlüğe sahiptir.
En az ayrıcalık: Bireysel kapsamlarla zenginleştirmeye erişim.
PII/finansal veriler: uzantılara giriş, anahtar ayırma ve TTL.
Gözlemlenebilirlik ve hata ayıklama
Metrik önekler: 'çekirdek. talep. Süre ',' enh. takın. load_time', 'toplu. lag '.
Örnekleme: Çekirdek hatalar için %100 günlükler; Örnek uzantılar.
Özellik bayrakları telemetri: Hangi uzantıların hangi müşteriler için etkinleştirildiğini görebilirsiniz.
Uygulama kontrol listesi (kısa)
- MGC tanımlanmış ve belgelenmiştir.
- Uzantılar yetenekler/bayraklar aracılığıyla ilan edilir.
- Katmanlara göre yapılandırılmış SLO/QoS/kuyruklar.
- Kaos testleri ile test edilen bozulma.
- Şemaların evrimi, "kırılmalar" olmadan sadece katkı maddesidir.
- Metrikler/yollar/günlükler katmanlıdır.
- Uzantıları etkinleştirmek için müşteriler için belgeler.
SSS
Ters piramit katmanlı mimarinin yerini alır mı?
Hayır. Bu, ortogonal bir ilkedir: tanıdık katmanlar üzerinde işlevselliğin nasıl sağlanacağı ve önceliklendirileceği.
Ne zaman uygulanmamalı?
Çevrimdışı paketlerde, kısmi teslimatın anlamsız olduğu durumlarda (atomikliğe sahip kripto protokolleri) veya tüm alanlar eşit derecede kritik olduğunda.
Zarif bozulmadan farklı olan nedir?
Ters piramit başlangıçta asgari yeterli sözleşmeyi ve önceliklerini yansıtır ve zaten aşırı yüklenmiş sistemi "olaydan sonra" kurtarmaya çalışmaz.
Sonuç
Ters piramit modeli, mimarinin ve protokollerin herhangi bir yük altında yararlı kalmasına yardımcı olur: ana şey ilk ve kesinlikle; Mümkünse gerisi. Bu, kritik yolun kullanılabilirliğini artırır, özelliklerin görüntülenmesini hızlandırır ve arızalar olmadan evrimi basitleştirir.