Boş önbelleğe üç kişi aynı anda bakarsa

Bilgi asistanında bir belgenin özeti henüz hazır değil. Üç kullanıcı aynı anda aynı kapsamda özeti istiyor. Her istek önbelleğin boş olduğunu görüp ayrı bir üretim başlatırsa aynı hesap üç kez yürüyebilir. Önbellek anahtarının doğru olması bu eşzamanlı başlangıcı tek başına önlemez. Devam eden işi aynı anahtar için paylaşmak, hazır sonucu saklamaktan ayrı bir koordinasyon davranışıdır.

Go singleflight paketinin Do yöntemi, aynı anahtar için bir iş sürerken gelen diğer çağıranların onu bekleyip aynı sonucu almasını tanımlar. Bu yazı Go hizmeti çalıştırma raporu değildir; salt okunur özet üretimini temsil eden küçük bir sözleşme tasarımıdır. İş bittikten sonra sonucun kalıcı saklanması, birden çok sunucu arasında koordinasyon ve yan etkili isteklerin tekilleştirilmesi ayrı konulardır.Kaynak: Go — singleflight.Group.Do

Paylaşılabilir işi önce tanımlayın

Özgün denemede D7 belgesinin v3 sürümü Türkçe özetlenecek. A, B ve C aynı güncel erişim kapsamına sahip, aynı istem sürümünü kullanıyor. Paylaşım anahtarı belge, revizyon, dil, erişim kapsamı ve istem sürümünü içerir. Yalnız soru metnini anahtar saymıyoruz. D7/v4 isteği veya farklı erişim kapsamı ayrı iştir. Paylaşmaya katılmadan önce her çağıranın güncel erişimi ayrıca doğrulanmış olmalıdır.

Sentetik devam eden iş kaydı
Anahtar K = D7 / v3 / tr / rolR / P1.
A, B, C: K için eşzamanlı ve izinli istekler.
D: D7 / v4 / tr / rolR / P1; ayrı anahtar.
İş: yalnız sentetik özet hesabı. Dış kayıt oluşturma ve mesaj gönderme yok.
Kalıcı önbellek: bu alıştırmada bulunmuyor.

Anahtar alanları sıradan metin birleştirmesiyle çakışmayacak biçimde temsil edilmelidir. Buradaki eğik çizgiler okuyucuya alanları göstermek içindir; gerçek uygulamada yapılandırılmış anahtar veya açık kaçış sözleşmesi kullanılır. Aynı rol adı farklı kurumlarda başka belge erişimi verebilir; kapsam kimliği buna göre kurulmalıdır. Bu örnekte tek kurum ve önceden doğrulanmış ortak rol varsayımı vardır. Başka kullanıcı bağlamlarını bu anahtara otomatik eklemeyin.

Üretici ile katılımcıları ayrı sayın

Açıklama için hazırlanmış eşzamanlı iz
AnOlayÜretim sayısı
t0A, K için kayıt açar ve üretici olur1
t1B, K sürüyor diye aynı sonucu bekler1
t2C, K sürüyor diye aynı sonucu bekler1
t3D farklı v4 anahtarında üretici olur2
t4K işi biter; A/B/C aynı sonucu alır2
t5K sürmekte olan işler listesinden çıkarılır2

Dört çağıran için iki üretim vardır. A/B/C bir işin üç alıcısıdır; üçünü üç bağımsız model denemesi diye raporlamayın. Üç kişinin aynı cevabı alması sonucun üç kez doğrulandığı anlamına gelmez. Üretici hata yaparsa paylaşanlar da aynı hatalı sonucu görebilir. Bu mekanizma iş tekrarını azaltır; doğruluk kontrolünün veya kaynak doğrulamasının yerini almaz.

Üretici kaydı, pahalı iş başlatılmadan önce diğer çağrılara görünür olmalıdır. Üç çağrı da önce boşluğu okuyup sonra kayıt açarsa üçü birden üretici olabilir. Küçük tek süreçli bir uygulamada aynı anahtara ait promise kaydı eşzamanlı girişleri ortak beklemeye bağlayabilir. Birden fazla süreç veya sunucu için yalnız bellek içindeki harita ortak değildir; bu sınır test ve dağıtım tasarımında açıkça belirtilir.

İş bittikten sonraki çağrı farklıdır

t6’da E aynı K anahtarını isterse bu alıştırmada yeni bir üretim başlar. Çünkü yalnız sürmekte olan işler paylaşılmış, bitmiş sonuç önbelleğe alınmamıştır. Toplam üretim sayısı üç olur. Bir mekanizmanın aynı anda tek iş yürütmesi, gün boyunca aynı anahtarı yalnız bir kez hesaplayacağı anlamına gelmez. Hazır sonuç saklamak isteniyorsa süre, kaynak değişimi ve erişim koşulları olan ayrı bir önbellek sözleşmesi gerekir.

Beklenen sayım ve kapsam
A/B/C aynı K işinde: 3 çağıran, 1 üretim.
D farklı v4: 1 çağıran, 1 ayrı üretim.
E, K tamamlandıktan sonra: 1 yeni üretim.
Toplam 5 çağıran, 3 üretim. Bu fark gerçek maliyet veya süre kazancı ölçümü değildir.

Zaman kazancı iddiası için gerçek üretim süresi, bekleme ve hata düzeltme maliyeti ayrıca ölçülür. Burada tek bildiğimiz başlatılan iş sayısıdır. Bir üretici çok uzun beklerse katılımcılar da ona bağlı kalabilir. Her çağıranın iptal veya bekleme süresi davranışı tanımlanmalıdır. Bir katılımcının vazgeçmesi bütün diğerlerinin ortak işini otomatik olarak iptal etmek zorunda değildir; bu tercih iş sözleşmesinde ayrıca kararlaştırılır.

Başarısız işi sonsuza kadar paylaşmayın

Üretici başarısız olursa aynı denemeyi bekleyen A/B/C bu hatayı alır. Sürmekte olan iş kaydı temizlenmeli ki daha sonraki izinli bir istek yeni denemeye başlayabilsin. Hatalı promise haritada kalırsa yeni çağrılar hiç yeni iş başlatmadan aynı eski hataya bağlanabilir. Buna karşılık çok hızlı ve sınırsız yeni üretim de istenmeyebilir; yeniden deneme sayısı ve bekleme kuralı ayrı bir katmanda denetlenir.

İş paylaşımı için denetim istemi
K=D7/v3/tr/rolR/P1. A/B/C eşzamanlı, aynı kapsamda izinli ve salt okunur özet istiyor. D v4 için ayrı anahtar kullanıyor. Sürmekte olan her anahtarda tek üretici, diğerleri aynı sonucu beklesin; bitince kayıt temizlensin. Kalıcı önbellek yok. E aynı K’yı iş bittikten sonra isterse yeni üretimi say. Hata halinde bütün bekleyenlerin durumu ve temizleme kuralını göster. Gerçek model, maliyet kazancı veya dağıtık tekillik garantisi iddia etme.

Yan etkili bir talebi bu örnekle otomatik birleştirmeyin. İki kullanıcı aynı metinle iki ayrı kayıt oluşturmak istiyor olabilir; aynı gövde, aynı iş niyeti demek değildir. Buradaki hesap salt okunurdur ve paylaşılabilir sonuç tanımı önceden kurulmuştur. İşlem tekilleştirme, kalıcı istek kimliği ve tekrarın hangi dış etkiyi temsil ettiği başka bir sözleşme gerektirir. Bu ayrım mekanizmanın yanlış amaçla kullanılmasını önler.

  • İş gerçekten paylaşılabilir bir hesap mı?
  • Anahtar bütün sonuç bağlamını taşıyor mu?
  • Üretici kaydı işe başlamadan görünür mü?
  • Başarı ve hata yollarında kayıt temizleniyor mu?

Hata ve farklı dil senaryosunu ayırın

A ve B aynı Türkçe K işini beklesin. C aynı belge ve sürümü İngilizce istesin; ayrı anahtardır. Türkçe üretici hata versin, İngilizce üretici başarılı olsun. Kayıtlar temizlendikten sonra D tekrar Türkçe istesin. Kaç üretim başlatılır ve hangi kullanıcılar aynı hata sonucunu paylaşır? İngilizce sonucu çevirip Türkçe hatayı sessizce başarılı saymayın.

Alıştırmanın cevabı
İlk aşamada iki üretim: Türkçe A/B ortak, İngilizce C ayrı. A ve B aynı Türkçe denemesinin hatasını alır; C başarılıdır. Temizlikten sonra D yeni Türkçe üretim başlatır. Toplam üç üretim; D’nin sonucu henüz verilmediği için başarı uydurulmaz.

Bilgi asistanının ölçüm kaydında çağıran sayısını, üretici sayısını ve paylaşım anahtarını ayrı tutun. Böylece aynı yanıtın çok kişiye dönmesini çok sayıda bağımsız başarı saymaz, önbellekle devam eden iş paylaşımının farklı davranışlarını açıkça değerlendirebilirsiniz.

Kaynaklar ve doğrulama

  • Go — singleflight.Group.Do

    Aynı anahtarda sürmekte olan tek işin sonucunu eşzamanlı çağıranlara paylaşma.

    Erişim ve kontrol:

İlgili okumalar

Yöneticiler İçin Yapay Zekâ

Yöneticiler İçin Yapay Zekâ eğitimine aynı sorunun eşzamanlı gelişini içeren bir bilgi asistanı senaryosu taşıyabilirsiniz. Üretim sayısını, yetki kapsamını ve hata sonrası davranışı birlikte kabul ölçütü yapın.

  • Kuruma özel planlanır