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

Azure Cosmos DB değişiklik akışı, yüksek yazma birimlerine sahip büyük veri kümelerini verimli bir şekilde işlemenizi sağlar. Değişiklikleri tanımlamak için veri kümelerinin tamamını sorgulamaya bir alternatif sağlar. Bu makalede, ölçeklenebilir çözümler oluşturmanıza yardımcı olacak yaygın değişiklik akışı tasarım desenleri, bunların dezavantajları ve sınırlamaları açıklanmaktadır.

Scenarios

Azure Cosmos DB IoT, oyun, perakende ve operasyonel günlük uygulamaları için idealdir. Bu uygulamalarda yaygın bir tasarım deseni, verilerdeki değişiklikleri diğer eylemleri tetikleme amacıyla kullanmaktır. Bu eylemler şunlardır:

  • Bir öğe eklendiğinde, güncelleştirildiğinde veya silindiğinde api'ye yönelik bir bildirim veya çağrı tetikleme.
  • IoT için gerçek zamanlı akış işleme veya operasyonel veriler üzerinde analiz.
  • Önbellek, arama motoru, veri ambarı veya soğuk depolama ile eşitleme gibi veri hareketi.

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

Azure Cosmos DB değişiklik akışının gerçek zamanlı analiz ve olay odaklı bilgi işlem senaryolarını nasıl güçlendireceğini gösteren diyagram.

Olay bilgi işlem ve bildirimler

Azure Cosmos DB değişiklik akışı, belirli bir olayı temel alarak bildirim tetikleyen veya API çağıran senaryoları basitleştirir. Değişiklik akışı işlemcisini kullanarak kapsayıcınızda otomatik olarak değişiklik yoklaması yapın ve her yazma, güncelleştirme veya silme işlemi için bir dış API çağırın.

Belirli ölçütlere göre bir bildirimi seçmeli olarak tetikleme veya API çağırma. Örneğin, Azure İşlevleri'ni kullanarak değişiklik akışından okuyorsanız, işleve yalnızca bir koşul karşılandığında bildirim göndermek için mantık ekleyin. 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 gerçekleştirmenizi sağlar. Örneğin, cihazlardan, algılayıcılardan, altyapıdan ve uygulamalardan olay verilerini alıp depolar ve Spark kullanarak bu olayları gerçek zamanlı olarak işlersiniz. Aşağıdaki görüntüde Azure Cosmos DB değişiklik akışını kullanarak lambda mimarisinin nasıl uygulandığı gösterilmektedir:

Azure Cosmos DB tabanlı bir lambda veri alma ve sorgu 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.

Veri kalıcılığı

Azure Cosmos DB'ye yazılan veriler değişiklik akışında görünür. En son sürüm modunda veriler silinene kadar değişiklik akışında kalır. İleti kuyrukları genellikle en uzun saklama süresine sahiptir. Örneğin, Azure Event Hubs en fazla 90 günlük veri saklama olanağı 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ı çalıştırın. Değişiklik akışı, 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 sağlar. Birçok ileti kuyruğundan farklı olarak Azure Cosmos DB verileri genel olarak 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şturun ve toplanan değerleri Azure Cosmos DB'de kalıcı hale getirebilirsiniz. Örneğin, tamamlanan oyunlardan alınan puanlara göre gerçek zamanlı puan tabloları uygulamak için Azure Cosmos DB'nin değişiklik akışını kullanın.

Veri taşıma

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

Örneğin, değişiklik akışı aşağıdaki görevleri verimli bir şekilde gerçekleştirmenizi sağlar:

  • Azure Cosmos DB'de depolanan verilerle bir önbelleği, arama dizinini veya veri ambarı güncelleştirme.

  • Kesintisiz geçişi başka bir Azure Cosmos DB hesabına veya farklı bir mantıksal bölüm anahtarına sahip bir Azure Cosmos DB kapsayıcısına yapın.

  • Uygulama düzeyinde veri katmanlama ve arşivleme. Örneğin, sıcak verileri Azure Cosmos DB'de depolayın ve soğuk verileri Azure Blob Depolama gibi diğer depolama sistemlerine taşıyın.

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

Olay kaynağını belirleme

Olay Yönlendirme Deseni, verilerde gerçekleştirilen eylemlerin tamamını kaydetmek için yalnızca ekleme yapılan bir depo kullanır. Azure Cosmos DB değişiklik akışı, tüm veri alımının yazma işlemi (güncelleştirme veya silme olmadan) olarak modellendiği olay kaynak 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ı bulunur. Merkezi olay deposu tarafından yayımlanan olayların tipik kullanım alanları 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 bir süre 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 konusundaki güçlü yönlerinden dolayı olay kaynak deseninde merkezi bir eklemeli kalıcı veri deposudur. Buna ek olarak, değişiklik akışı işlemcisi, herhangi bir olayı işlemeyi kaçırmadığınızdan emin olmak için "en az bir kez" garantisi sağlar.

Mevcut sınırlamalar

Değişiklik akışında, her birinin anlamanız gereken önemli sınırlamaları olan birden çok mod vardır. Değişiklik akışını en son sürüm modunda veya tüm sürümler ve silmeler modunda kullanan bir uygulama tasarlarken göz önünde bulundurmanı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çırmak mümkündür. Bir öğeye yapılan tek tek güncelleştirmeleri yeniden oynatmak için bu güncelleştirmeleri bir dizi yazma işlemi olarak modelleyip tüm sürümleri ve silme modunu kullanın.

Siler

En son sürüm modunda olan değişiklik akışı, silme işlemlerini yakalamaz. Kapsayıcınızdan bir öğeyi sildiğinizde, öğe değişiklik akışından kaldırılır. Silme işlemlerini işlemek için en yaygın yöntem, silinen öğelere geçici bir işaretçi eklemektir. deleted adlı bir özellik ekleyebilir ve silme sırasında bunu true olarak 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.

Retention

En son sürüm modundaki değişiklik akışının sınırsız saklama süresi vardı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ının bölüm anahtarı değeri içinde garantili bir sırası vardır, ancak bölüm anahtarı değerleri arasında değildir. Size anlamlı bir düzen garantisi veren bir bölüm anahtarı seçmelisiniz.

"Event sourcing" tasarım desenini kullanan bir perakende uygulaması düşünün. Bu uygulamada, farklı kullanıcı eylemlerinin her biri "olay" olarak kabul edilir ve Azure Cosmos DB'ye yazma işlemleri olarak modellenir. Aşağıdaki sırada 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 Öğe B'yi ekler.
  3. Müşteri alışveriş sepetinden A Öğesini kaldırır.
  4. Müşteri ödeme yapar ve alışveriş sepetinin içeriği gönderilir.

Her müşteri için mevcut alışveriş sepeti içeriğinin oluşturulmuş bir görünümü korunur. Bu uygulama, bu olayların gerçekleştiği sırayla işlenmesini sağlamalıdır. Örneğin, sepetin ödemesi A Öğesi kaldırılmadan önce işlenirse, müşterinin istediği B Öğesi yerine büyük olasılıkla A Öğesi müşteriye gönderilecektir. Bu dört olayın sırayla işlenmesini sağlamak 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.

Examples

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