Aracılığıyla paylaş


Azure Service Fabric Güvenilir Koleksiyonları'nda işlemler ve kilit modları

İşlem

İşlem, tek bir mantıksal iş birimi olarak gerçekleştirilen bir işlem dizisidir. Veritabanı işlemlerinin ortak ACID (bölünmezlik, tutarlılık, yalıtım, dayanıklılık) özelliklerini gösterir:

  • Bölünmezlik: İşlem, atomik bir çalışma birimi olmalıdır. Başka bir deyişle, tüm veri değişiklikleri gerçekleştirilir veya hiçbiri gerçekleştirilmez.
  • Tutarlılık: İşlem tamamlandığında tüm verileri tutarlı bir durumda bırakmalıdır. İşlemin sonunda tüm iç veri yapıları doğru olmalıdır.
  • Yalıtım: Eşzamanlı işlemler tarafından yapılan değişiklikler, diğer eşzamanlı işlemler tarafından yapılan değişikliklerden yalıtılmalıdır. ITransaction içindeki bir işlem için kullanılan yalıtım düzeyi, işlemi gerçekleştiren IReliableState tarafından belirlenir.
  • Dayanıklılık: İşlem tamamlandıktan sonra etkileri sistemde kalıcı olarak uygulanır. Sistem hatası durumunda bile değişiklikler devam eder.

Yalıtım düzeyleri

Yalıtım düzeyi, işlemin diğer işlemler tarafından yapılan değişikliklerden yalıtılması gereken dereceyi tanımlar. Güvenilir Koleksiyonlar'da desteklenen iki yalıtım düzeyi vardır:

  • Yinelenebilir Okuma: Deyimlerin değiştirilmiş ancak henüz diğer işlemler tarafından işlenmemiş verileri okuyamayacağını ve geçerli işlem bitene kadar başka hiçbir işlemin geçerli işlem tarafından okunan verileri değiştiremeyeceğini belirtir.
  • Anlık görüntü: bir işlemdeki herhangi bir deyim tarafından okunan verilerin, işlemin başlangıcında var olan verilerin işlem açısından tutarlı sürümü olduğunu belirtir. İşlem yalnızca işlem başlamadan önce kaydedilmiş olan veri değişikliklerini tanıyabilir. Geçerli işlem başladıktan sonra diğer işlemler tarafından yapılan veri değişiklikleri, geçerli işlemde yürütülen deyimlere görünmez. Bunun etkisi, bir işlemdeki deyimler, işlemin başlangıcında olduğu gibi işlenen verilerin anlık görüntüsünü alır gibi olur. Anlık görüntüler Güvenilir Koleksiyonlar arasında tutarlıdır.

Güvenilir Koleksiyonlar, işleme ve işlemin oluşturulduğu sırada çoğaltmanın rolüne bağlı olarak belirli bir okuma işlemi için kullanılacak yalıtım düzeyini otomatik olarak seçer. Güvenilir Sözlük ve Kuyruk işlemleri için yalıtım düzeyi varsayılanlarını gösteren tablo aşağıdadır.

İşlem \ Rol Birincil İkincil
Tek Varlık Okuma Yinelenebilir Okuma Anlık Görüntü
Numaralandırma, Sayı Anlık Görüntü Anlık Görüntü

Not

Tek Varlık İşlemleri için yaygın örnekler şunlardır: IReliableDictionary.TryGetValueAsync, IReliableQueue.TryPeekAsync.

Hem Reliable Dictionary hem de Reliable Queue , Yazmalarınızı Okuma özelliğini destekler. Başka bir deyişle, bir işlem içindeki tüm yazma işlemleri, aynı işleme ait olan aşağıdaki okuma işlemine görünür.

Kilitler

Güvenilir Koleksiyonlar'da tüm işlemler sıkı iki aşama kilitleme uygular: bir işlem, bir iptal veya işleme ile sonlandırılana kadar aldığı kilitleri serbest bırakmaz.

Reliable Dictionary, tüm tek varlık işlemleri için satır düzeyi kilitleme kullanır. Reliable Queue, katı işlem fifo özelliği için eşzamanlılığı dengeler. Güvenilir Kuyruk, ve/veya TryDequeueAsync ile TryPeekAsync bir işlem ve bir kerede bir işlem EnqueueAsync sağlayan işlem düzeyi kilitleri kullanır. FIFO'yı korumak için, güvenilir TryPeekAsync kuyruğun boş olduğunu gözlemleyen veya TryDequeueAsync gözlemleyenler de kilitlenir EnqueueAsync.

Yazma işlemleri her zaman Özel kullanım kilitleri alır. Okuma işlemleri için kilitleme birkaç faktöre bağlıdır:

  • Anlık görüntü yalıtımı kullanılarak yapılan tüm okuma işlemleri kilitsizdir.
  • Tüm Yinelenebilir Okuma işlemleri varsayılan olarak Paylaşılan kilitleri alır.
  • Ancak, Yinelenebilir Okuma'yı destekleyen herhangi bir okuma işlemi için kullanıcı Paylaşılan kilit yerine bir Güncelleştirme kilidi isteyebilir. Güncelleştirme kilidi, birden çok işlem daha sonra olası güncelleştirmeler için kaynakları kilitlediğinde oluşan yaygın bir kilitlenme biçimini önlemek için kullanılan asimetrik bir kilittir.

Kilit uyumluluk matrisi aşağıdaki tabloda bulunabilir:

İstek \ Verildi Hiçbiri Paylaşılan Güncelleştir Özel
Paylaşılan Çakışma yok Çakışma yok Çakışma Çakışma
Güncelleştir Çakışma yok Çakışma yok Çakışma Çakışma
Özel Çakışma yok Çakışma Çakışma Çakışma

Reliable Collections API'lerindeki zaman aşımı bağımsız değişkeni kilitlenme algılaması için kullanılır. Örneğin, iki işlem (T1 ve T2) K1'i okumaya ve güncelleştirmeye çalışıyor. Her ikisi de Paylaşılan kilidine sahip olduğundan kilitlenmeleri mümkündür. Bu durumda işlemlerden biri veya her ikisi de zaman aşımına uğradı. Bu senaryoda, bir Güncelleştirme kilidi böyle bir kilitlenmeyi önleyebilir.

Sonraki adımlar