CQR'ler hakkında bilmeniz gerekenler
CQRS, Alan Adı (DDD) ve olayların tedariki tarafından yönetilen tasarımla bağlantılı olarak çağrılan mimari bir modeldir. Greg Young 2010 terimi, içerik açısından Bertrand Meyer'in CQ tasarım modeline dayanmaktadır. Geride ne var?
CQS tasarım modeli (komut sorgusunun ayrılması), iki kategori nesnesinin yöntemlerinin atanmasını önerir: bir yöntem nesnenin dahili durumunu değiştirir, ancak bu nedenle hiçbir şey döndürmez. Bu yönteme “Komut” denir. Veya bir yöntem bilgi döndürür, ancak iç durum değişmez. Bu yönteme “Sorgu” denir.
CQ'lara göre, bir yöntem asla aynı anda olmamalıdır. Örneğin, yığın ortak veri yapısına bakarsanız, push-Bir komutu ortadan kaldırmak, top Öte yandan bir soru var. POP işlevi son olarak CQS modelini ihlal eder, çünkü yığının iç durumunu değiştirir ve aynı zamanda bilgileri döndürür.
Temel olarak, CQS tek bir nesne ile ilgili yazma ve okuma süreçlerinin ayrılmasıyla ilgilidir. Bu, örneğin, kodun paralelleştirilmesi gerektiğinde özellikle alakalı hale gelir: yan etkilerin eksikliği nedeniyle sorular kolayca paralelleştirilebilir, ancak komutlar değildir.
2010'daki CQS modeline dayanarak Greg Young, CQRS Mimarlık Modelini (Komut Sorgusu Sorumluluğunun Ayrılması) modelledi. Ayrıca mektubu API ile ilgili olarak okumadan ayırır. Bu nedenle, biri uygulamanın durumunu değiştiren kontrol yollarına, diğeri sorgu yollarını, uygulamanın durumu hakkındaki bilgileri değiştiren ayrı arılar önermektedir.
Teknik olarak, bu HTTP'de, örneğin, komut arılarının sadece ruti sonrası ile uygulanacağı şekilde uygulanabilir, ancak sorgu arıları ise sadece GET yollarıyla uygulanır. Gerçek anlambilim URL'ye taşınır. Örneğin, bir siparişten vazgeçmek için “/gönderme” rotasında bir talep sonrası talep edilir. Bu, sadece HTTP fiillerine fiiller olarak izin veren ve profesyonel semantiklerin API düzeyinde zaten kaybolduğu geri kalanın aksine.
CQRS fikrini çevirirseniz, veritabanının arıların arkasındaki ayrılması bile iki veritabanına makul görünüyor. Okumaya optimize edilmiş, örneğin, biri, diğeri, ancak diğeri gösterilmelidir. Yolda, iyi bütünlük ve tutarlılık yazarken, yazma sırasında garanti edilebilir, ancak aynı zamanda verimlilik ve yüksek performans ve performans elde edilebilir.
Önerilen editoryal içerik
Rızanızla, burada harici bir YouTube videosu (Google Ireland Limited) burada davet edilir.
YouTube videosu her zaman yüklenir
YouTube videosu artık yüklüyor
CQRS nedir?
CQRS ile API geliştirin
CQRS'yi birleştirmek için bir API uygulamak istiyorsanız, rotaları posta ile ayırmak ve almak yeterli değildir. Ayrıca bir komutun hiçbir şeyi nasıl döndürmediğini düşünmelisiniz: HTTP'de bu mümkün değildir, çünkü en az bir durum kodu istemciye teslim edilmelidir.
En basit durumda, her zaman komutun sunucuya ulaştığını belirten bir durum kodu 200 döndürün. Alternatif durum kodları sadece 400, 401 veya 500 olabilir, ancak teknik bilgiler iade edilmez. Gerçek tepki gövdesi genellikle boştur. Durum, komutun verilerini ve meta verilerini iletmek için kullanılan istek gövdesi ile farklıdır.
Sorgu API'sı benzerdir: Burada URL yolu, parametrelerin bu durumda olduğu, bir jet yeniden yargısı olduğu, ancak sorgu dizesinin yardımıyla iletilen istenen sorguyu açıklar. Sorgu erişimi okuma için optimize edilmiş belirtilen veritabanına eriştiğinden, sorgu hızlı ve verimli bir şekilde gerçekleştirilebilir.
Bununla birlikte, bir müşterinin bir komutun zaten işlenip işlenmediğini ve hangi sonucun elde edildiğini öğrenmemesi sorunludur. Bu nedenle, olaylar hakkında bilgi sağlayan, HTTP akışı veya benzer bir mekanizma hakkında bilgi sağlayan üçüncü bir arı olan etkinliğin arılarının kullanılması tavsiye edilir.
Graphql'i bilen ve komutları, sorguların ve olayların arılarını tanımladıklarında mutasyon, sorgu ve abonelik kavramları kavramlarını iyi izleyen herkes iyi bir yoldadır: GraphQL, CQR'lere dayalı arıların uygulanması için idealdir.
Önerilen editoryal içerik
Rızanızla, burada harici bir YouTube videosu (Google Ireland Limited) burada davet edilir.
YouTube videosu her zaman yüklenir
YouTube videosu artık yüklüyor
CQRS ile API geliştirin
CQRS, DDD ve Etkinlik Kaynağı
Başlangıçta belirtildiği gibi, CQRS genellikle etki alanı (DDD) ve olayların tedariki tarafından yönetilen tasarımla bağlantılı olarak çağrılır. Üç kavram birbirinden bağımsız olmasına rağmen, iyi tamamlanıyorlar.
CQRS'ye dayalı bir uygulamanın komut API'sına gönderilen bir komut, DDD anlamında bir toplam için bir komut olarak da yorumlanabilir. Bu nedenle agrega, bir etkinlik dükkanında arşivlenebilen ve daha sonra agreganın çoğaltılması için kullanılan bir veya daha fazla etki alanı olayı üretir.
Buna ek olarak, oluşturulan etki alanı olayları da olayların EPI'sine iletilir, bu da bunları uygulama içindeki teknik süreçler yoluyla gerçek zamanlı güncellemelerle bu şekilde bildirilen çeşitli bağlı istemcilere sağlar.
Ayrıca, görünümleri (alkol öncesi) güncellemek için etki alanı olayları da uygulama okuma sayfasına iletilir. Bu amaçla, hangi alaka düzeyinin, vizyonun vizyonu için teknik bir alan olayı olduğuna karar veren ve bu nedenle ilgili görüşleri ham talimatların yardımına göre uyarladığına karar veren bir projeksiyon kullanılır.
Bu senaryoda, etkinlik dükkanı, herhangi bir görünümün daha sonra inşa edilebileceği tek bir gerçek kaynağıdır. Bununla birlikte, görüşlere yazmanın etkinlik mağazasında yazılarak ayrıldığına dikkat edilmelidir, bu yüzden kendilerini şapka teoremi ve herhangi bir tutarlılıkla geliştirici olarak tanımalısınız.
Önerilen editoryal içerik
Rızanızla, burada harici bir YouTube videosu (Google Ireland Limited) burada davet edilir.
YouTube videosu her zaman yüklenir
YouTube videosu artık yüklüyor
CQRS, DDD ve Etkinlik Kaynağı
Kapak ve kayma
Prensip olarak, kaput teoremi, köşeleri “tutarlılık”, “kullanılabilirlik” ve “bölme toleransı” olan bir üçgen tanımlar. Dağıtılmış bir uygulama, istemcide onaylanmadan önce yazmaya erişimin uygulamanın diğer tüm düğümlerine ilk kez çoğaltılması durumunda tutarlıdır (tutarlılık), böylece dağıtılmış sistemin tüm düğümleri her zaman tek tip bir yanıt sağlayabilir.
Kullanılabilirliğin (kullanılabilirlik) görünümü ise, dağıtılmış bir sistemin herhangi bir zamanda okuma ve yazma isteklerine tepki verebileceğini açıklar, bu nedenle sistem koşulu nedeniyle reddedilen bekleme sürelerine veya isteklere asla ulaşmaz. Son olarak, arıza güvenliği (bölüm toleransı), tek tek düğümler aralarındaki ağ bağlantılarını başarısız veya düşürse bile dağıtılmış bir uygulamanın gerçekleştirilmesini gerektirir.
Şapka teoremi artık bu üç yönden sadece ikisinin her zaman mümkün olduğunu belirtiyor. Özellikle, bu, her zaman tutarlı ve mevcut bir sistemin (ca), ancak herhangi bir donanım arızası hariç tutulabiliyorsa mümkün olduğu anlamına gelir, bu da pratik olarak imkansız olmalıdır. Bu nedenle, pratikte yalnızca CP ve AP arasında bir seçime sahip olacaksınız, yani dağıtılmış bir sistemin sunucu veya ağ hataları durumunda kullanılabilirlik veya tutarlılıktan vazgeçmesi gerektiği sorusu.
Tutarlılığın feragat edilmesi başlangıçta tehlikeli görünüyor, ancak bu “tutarlılık yok” değil, bir tür “gecikmiş tutarlılık”. Son olarak, olağandışı sunuculara ulaşılabilir ulaşılmaz tutarlılık geri yüklenir. “Nihai tutarlılık” teriminin tam olarak budur, Almanca'da “nihayetinde tutarlı” veya “nihayet tutarlı” olarak eşit olma olasılığı daha yüksektir.
Belirli güvenlik alanları (kamu altyapıları, tıbbi sistemler …) için uygulamalar geliştirilinceye kadar, herhangi bir tutarlılık sorun olmamalıdır. Bu nedenle, her zaman garanti edilen güçlü tutarlılığın feragat edilmesi, özellikle web ve bulut ortamında büyük bir avantaj (kurumsal) olabilecek çok daha erişilebilir ve reaktif bir uygulamaya yol açar. Buna ek olarak, gerçekliğin çok az durumda gerçek bir tutarlılığı olduğu için desteklenmelidir.
Önerilen editoryal içerik
Rızanızla, burada harici bir YouTube videosu (Google Ireland Limited) burada davet edilir.
YouTube videosu her zaman yüklenir
YouTube videosu artık yüklüyor
Kapak ve kayma
Neden CQRS?
Son olarak, soru devam ediyor çünkü CQR'leri bile yönetmelisiniz. Açık bir neden, DDD, etkinlik kaynak kullanımı ve GraphQL gibi diğer birçok kavrama bariz bir eklemeyi temsil etmesidir. Buna ek olarak, yazma ve okumayı ayıran CQRS, en baştan dağıtılan mimariyi hedefler, bu da web veya bulutta gerçekleştirilen hizmetlere dayalı sistemlerde kullanılmak üzere önceden belirlenir.
CQRS ayrıca hizmete dayalı bir mimarinin tüm avantajlarını, örneğin bireysel hizmetlerin azaltılması, beklemesi ve bireysel ifadelerini sunar. Bir şirket mantığının farklı sürümlerinin işletilmesi de CQRS ile basittir ve bireysel hizmetlerin erişim hakları da özellikle sınırlı olabilir ve bu da genel sistemin güvenliğine fayda sağlar.
Bununla birlikte, dezavantaj, klasik bir müşteri sunucusu sisteminden daha karmaşık ve karmaşık bir mimaride yatmaktadır, ancak CQR'lerin fiyatları olan bir dizi avantaj sunduğu unutulmamalıdır.
CQR'nin en önemli güçlerinden biri, teknik kodu teknik koddan, özellikle DDD'li bir ağda ve etkinlikler için kaynak kullanımıdır. Bu nedenle, kurumsal mantık teknik alt yapıyı değiştirmek zorunda kalmadan düzenlenebilir. Aynı şey doğrudur, ki bu çok daha önemlidir, hatta tam tersi, uzun vadeli istikrar ve kurumsal mantığa karşı temel güven lehine.
Bahsedilen karmaşıklık nedeniyle, uygulamanızı zaten CQR'leri ve etkinlik tedarikini uygulayan yeterli bir çerçevede oluşturup oluşturmadığınızı düşünmeniz tavsiye edilir, böylece bir geliştirici olarak esas olarak teknik kodun tasarımına ve yazımına odaklanabilirsiniz. Bu çerçeve, JavaScript, TypeScript ve Node.js için bir bulut kitine dahil olan çok sayıda teknoloji, dil ve platform için mevcuttur.
Önerilen editoryal içerik
Rızanızla, burada harici bir YouTube videosu (Google Ireland Limited) burada davet edilir.
YouTube videosu her zaman yüklenir
YouTube videosu artık yüklüyor
Neden CQRS?
Çözüm
CQRS, özellikle DDD ile etkileşimde ve olayların tedarikinde güçlü yönlerini oynayabilen dağıtılmış mimariye heyecan verici bir yaklaşımdır. Karmaşıklık, klasik bir müşteri sunucusu mimarisininkini aşıyor, ancak aynı zamanda temel profesyonelliği daha iyi yansıtabilecek çok daha ölçeklenebilir bir uygulama elde edersiniz.
()