Azure Cosmos DB'de akış tasarım desenlerini değiştirme

ŞUNUN IÇIN GEÇERLIDIR: NoSQL

Azure Cosmos DB değişiklik akışı, yüksek hacimli yazma işlemlerine sahip büyük veri kümelerinin verimli bir şekilde işlenmesini sağlar. Değişiklik akışı, nelerin değiştiğini belirlemek için veri kümesinin tamamını sorgulamaya bir alternatif de sunar. Bu makale, yaygın değişiklik akışı tasarım desenlerine, tasarım dezavantajlarına ve değişiklik akışı sınırlamalarına odaklanır.

Azure Cosmos DB, IoT, oyun, perakende ve operasyonel günlük uygulamaları için çok uygundur. Bu uygulamalarda yaygın olarak kullanılan tasarım deseni, verilerdeki değişiklikleri diğer eylemleri tetikleme amacıyla kullanmaktır. Bu eylemlere örnek olarak şunlar verilebilir:

  • Bir öğe eklendiğinde, güncelleştirildiğinde veya silindiğinde bir bildirim veya API çağrısı tetikleme.
  • IoT için gerçek zamanlı akış işleme veya işlem verileri üzerinde gerçek zamanlı analiz işleme.
  • Önbellek, arama altyapısı, veri ambarı veya soğuk depolama ile eşitleme gibi veri taşıma.

Azure Cosmos DB'deki değişiklik akışı, aşağıdaki görüntüde gösterildiği gibi bu desenlerin her biri için verimli ve ölçeklenebilir çözümler oluşturmanıza olanak tanır:

Gerçek zamanlı analiz ve olay odaklı bilgi işlem senaryolarını desteklemek için Azure Cosmos DB değişiklik akışını kullanmayı gösteren diyagram.

Olay bilgi işlem ve bildirimler

Azure Cosmos DB değişiklik akışı, belirli bir olayı temel alarak bir bildirim tetikleme veya API'ye çağrı göndermesi gereken senaryoları basitleştirebilir. Değişiklik akışı işlemcisini kullanarak kapsayıcınızda değişiklikler olup olmadığını otomatik olarak yoklayabilir ve her yazma, güncelleştirme veya silme işlemi olduğunda bir dış API çağırabilirsiniz.

Ayrıca, belirli ölçütlere göre bir bildirimi seçmeli olarak tetikleyebilir veya API'ye çağrı gönderebilirsiniz. Örneğin, Azure İşlevleri kullanarak değişiklik akışından okuyorsanız, yalnızca bir koşul karşılandığında bildirim göndermek için işlevine mantık ekleyebilirsiniz. Azure İşlevi kodu her değişiklik için yürütülse de, bildirim yalnızca koşul karşılandığında gönderilir.

Gerçek zamanlı akış işleme

Azure Cosmos DB değişiklik akışı, IoT için gerçek zamanlı akış işleme veya işletimsel veriler üzerinde gerçek zamanlı analiz işleme için kullanılabilir. Örneğin cihazlardan, algılayıcılardan, altyapıdan ve uygulamalardan olay verilerini alıp depolayabilir ve ardından Spark kullanarak bu olayları gerçek zamanlı olarak işleyebilirsiniz. Aşağıdaki görüntüde Azure Cosmos DB değişiklik akışını kullanarak lambda mimarisini nasıl uygulayabileceğiniz gösterilmektedir:

Alım ve sorgu için Azure Cosmos DB tabanlı lambda işlem hattını gösteren diyagram.

Çoğu durumda, akış işleme uygulamaları ilk olarak Azure Event Hubs veya Apache Kafka gibi geçici bir ileti kuyruğuna yüksek hacimli gelen verileri alır. Değişiklik akışı, Azure Cosmos DB'nin garantili düşük okuma ve yazma gecikme süresiyle sürekli yüksek veri alımını destekleme özelliğinden dolayı harika bir alternatiftir. Azure Cosmos DB değişiklik akışının ileti kuyruğuna göre avantajları şunlardır:

Veri kalıcılığı

Azure Cosmos DB'ye yazılan veriler değişiklik akışında gösterilir. En son sürüm modunu kullanarak okumanız durumunda veriler silinene kadar değişiklik akışında tutulur. İleti kuyrukları genellikle en uzun saklama süresine sahiptir. Örneğin Azure Event Hubs en fazla 90 günlük veri saklama süresi sunar.

Sorgu yeteneği

Azure Cosmos DB kapsayıcısının değişiklik akışından okumanın yanı sıra, Azure Cosmos DB'de depolanan veriler üzerinde SQL sorguları da çalıştırabilirsiniz. Değişiklik akışı, zaten kapsayıcıda bulunan verilerin yinelenme şekli değildir, bunun yerine yalnızca verileri okumanın farklı bir mekanizmasıdır. Bu nedenle, değişiklik akışındaki verileri okursanız veriler her zaman aynı Azure Cosmos DB kapsayıcısının sorgularıyla tutarlı olur.

Yüksek kullanılabilirlik

Azure Cosmos DB %99,999'a kadar okuma ve yazma kullanılabilirliği sunar. Birçok ileti kuyruğundan farklı olarak Azure Cosmos DB verileri küresel olarak kolayca dağıtılabilir ve sıfır kurtarma süresi hedefi (RTO) ile yapılandırılabilir.

Değişiklik akışındaki öğeleri işledikten sonra gerçekleştirilmiş bir görünüm oluşturabilir ve toplanan değerleri Azure Cosmos DB'de kalıcı hale getirebilirsiniz. Bir oyun oluşturmak için Azure Cosmos DB kullanıyorsanız, tamamlanan oyunlardan alınan puanlara göre gerçek zamanlı puan tabloları uygulamak için değişiklik akışını kullanabilirsiniz.

Veri taşıma

Gerçek zamanlı veri taşıma için değişiklik akışından da okuyabilirsiniz.

Örneğin, değişiklik akışı aşağıdaki görevleri verimli bir şekilde gerçekleştirmenize yardımcı olur:

  • Önbelleği, arama dizinini veya veri ambarlarını Azure Cosmos DB'de depolanan verilerle güncelleştirin.

  • Başka bir Azure Cosmos DB hesabına veya farklı bir mantıksal bölüm anahtarına sahip başka bir Azure Cosmos DB kapsayıcısına sıfır kapalı kalma süresi geçişi gerçekleştirin.

  • Uygulama düzeyinde veri katmanlama ve arşivleme uygulama. Örneğin, Azure Cosmos DB'de "sık erişimli verileri" depolayabilir ve "soğuk verileri" Azure Blob Depolama gibi diğer depolama sistemlerinde eskitebilirsiniz.

Bölümler ve kapsayıcılar arasında verileri normalleştirmeniz gerektiğinde, kapsayıcınızın değişiklik akışından bu veri çoğaltma için kaynak olarak okuyabilirsiniz. Değişiklik akışıyla gerçek zamanlı veri çoğaltma yalnızca nihai tutarlılığı garanti edebilir. Değişiklik akışı işlemcisinin Azure Cosmos DB kapsayıcınızdaki değişiklikleri işlemede ne kadar geride kaldığını izleyebilirsiniz .

Olay kaynağını belirleme

Olay kaynağını belirleme düzeni, söz konusu veriler üzerinde gerçekleştirilen eylemlerin tamamını kaydetmek için yalnızca ekleme deposu kullanmayı içerir. Azure Cosmos DB değişiklik akışı, tüm veri alımının yazma (güncelleştirme veya silme olmadan) olarak modellendiği olay kaynağını belirleme mimarilerinde merkezi bir veri deposu olarak harika bir seçimdir. Bu durumda Azure Cosmos DB'ye yapılan her yazma işlemi bir "olay" olduğundan değişiklik akışında geçmiş olayların tam bir kaydı vardır. Merkezi olay deposu tarafından yayımlanan olayların tipik kullanımları gerçekleştirilmiş görünümleri korumak veya dış sistemlerle tümleştirmektir. Değişiklik akışı en son sürüm modunda bekletme için zaman sınırı olmadığından, Azure Cosmos DB kapsayıcınızın değişiklik akışının başından itibaren okuyarak tüm geçmiş olayları yeniden oynatabilirsiniz. Birden çok değişiklik akışı tüketicisinin aynı kapsayıcının değişiklik akışına abone olmasını bile sağlayabilirsiniz.

Azure Cosmos DB, yatay ölçeklenebilirlik ve yüksek kullanılabilirlik özellikleri nedeniyle olay kaynağını belirleme düzeninde yalnızca merkezi bir ek kalıcı veri deposudur. Buna ek olarak, değişiklik akışı işlemcisi herhangi bir olayı işlemeyi kaçırmadığınızdan emin olarak "en az bir kez" garanti sunar.

Geçerli sınırlamalar

Değişiklik akışında, her birinde anlamanız gereken önemli sınırlamalar bulunan birden çok mod vardır. Değişiklik akışını en son sürüm modunda veya tüm sürümlerde ve silme modunda kullanan bir uygulama tasarlarken dikkate almanız gereken birkaç alan vardır.

Ara güncelleştirmeler

En son sürüm modunda, değişiklik akışına yalnızca belirli bir öğe için en son değişiklik eklenir. Değişiklikleri işlerken, kullanılabilir en son öğe sürümünü okursunuz. Kısa bir süre içinde aynı öğede birden çok güncelleştirme varsa, ara güncelleştirmeleri işlemeyi kaçırabilir. Bir öğeye yönelik tek tek güncelleştirmeleri yeniden oynatmak isterseniz, bu güncelleştirmeleri bir dizi yazma işlemi olarak modelleyebilir veya tüm sürümleri ve silme modunu kullanabilirsiniz.

Silme

Değişiklik akışı en son sürüm modu silmeleri yakalamaz. Kapsayıcınızdan bir öğeyi silerseniz, öğe değişiklik akışından da kaldırılır. Silmeleri işlemenin en yaygın yöntemi, silinen öğelere geçici bir işaretçi eklemektir. adlı deleted bir özellik ekleyebilir ve silme sırasında olarak true ayarlayabilirsiniz. Bu belge güncelleştirmesi değişiklik akışında gösterilir. Daha sonra otomatik olarak silinebilmesi için bu öğe üzerinde Bir Yaşam Süresi (TTL) ayarlayabilirsiniz.

Bekletme

En son sürüm modundaki değişiklik akışının bekletme süresi sınırsızdır. Kapsayıcınızda bir öğe olduğu sürece değişiklik akışında kullanılabilir.

Garantili sipariş

Tüm değişiklik akışı modları, bölüm anahtarı değeri içinde garantili bir düzene sahiptir, ancak bölüm anahtarı değerleri arasında yoktur. Size anlamlı bir sipariş garantisi veren bir bölüm anahtarı seçmelisiniz.

Örneğin, olay kaynağını belirleme tasarım desenini kullanan bir perakende uygulaması düşünün. Bu uygulamada, Azure Cosmos DB'ye yazma olarak modellenen her "olay" farklı kullanıcı eylemleridir. Aşağıdaki sırayla bazı örnek olayların gerçekleştiğini düşünün:

  1. Müşteri alışveriş sepetine A Öğesi ekler.
  2. Müşteri alışveriş sepetine B Öğesi ekler.
  3. Müşteri alışveriş sepetinden A Öğesini kaldırır.
  4. Müşteri kullanıma alır ve alışveriş sepeti içeriği gönderilir.

Her müşteri için geçerli alışveriş sepeti içeriğinin gerçekleştirilmiş görünümü korunur. Bu uygulama, bu olayların gerçekleştiği sırayla işlenmesini sağlamalıdır. Örneğin, sepet ödemesi A Öğesi kaldırılmadan önce işlenecekse, büyük olasılıkla A Öğesi müşterinin istediği öğeyi değil, B Öğesi'ni müşteriye göndermiştir. Bu dört olayın oluşum sırasına göre işlendiğini garanti etmek için, aynı bölüm anahtarı değeri içinde yer almalıdır. Bölüm anahtarı olarak (her müşterinin benzersiz bir kullanıcı adı vardır) seçeneğini belirlerseniz username , bu olayların değişiklik akışında Azure Cosmos DB'ye yazıldıkları sırada gösterilmesini garanti edebilirsiniz.

Örnekler

En son sürüm modu için sağlanan örneklerin kapsamını aşan bazı gerçek dünya değişiklik akışı kodu örnekleri aşağıda verilmiştir:

Sonraki adımlar