Yıllık Yıllık ödeyin, tüm ücretli planlarda 2 ay ücretsiz. Planları gör
Giriş yap Ücretsiz başla

Harcama Sayfası Yüksek Okudu, Hiç Para Hareket Etmedi

Gerisini okurken en kolay kaybedilecek kısımla başlayalım: hiç para alınmadı. Hiçbir cüzdan iki kez borçlandırılmadı, hiçbir karttan çekim yapılmadı, olmamış bir iş için hiçbir abonelik ödeneği harcanmadı. Bozulan şey ek…

Gerisini okurken en kolay kaybedilecek kısımla başlayalım: hiç para alınmadı. Hiçbir cüzdan iki kez borçlandırılmadı, hiçbir karttan çekim yapılmadı, olmamış bir iş için hiçbir abonelik ödeneği harcanmadı.

Bozulan şey ekrandaki bir sayıydı. Bazı hesaplarda, kendi hesap sayfanızdaki kullanım dökümü yüksek okuyordu — ölçtüğümüz en kötü hesapta, özetlemesi gereken defterin 2,4 katı. Defterin kendisi baştan sona doğruydu. Tamamen başka bir yerden okunan aylık tavanlar da öyle. Bu bir gösterim hatasıydı, düzeltildi ve sebebi şu.

Kimsenin yazmadığı bir şeyi arayan anahtar

Yaptığınız bir şey yüzünden olan işler — günlük kullanım özetini güncellemek, bir referans bonusunu işlemek, bir bildirimi dağıtmak — isteğinizin içinde olmaz. İstek bir mesaj yazar, bir arka plan tüketicisi az sonra onu alır; hızlı bir sayfayı yavaş bir yan etkinin yavaşlatmasını önleyen şey budur.

Bu düzenlemedeki tehlike aynı işi iki kez yapmaktır, çünkü bir aracı bir aksaklıktan sonra aynı mesajı seve seve yeniden teslim eder. Savunma bir gelen kutusudur: tüketici, işlemeden önce o mesajın anahtarını taşıyan bir satır yazarak mesajı sahiplenir ve benzersiz bir indeks ikinci bir sahiplenmeyi imkânsız kılar.

Bizimki bir çift üzerinden sahipleniyordu — mesajın ait olduğu kiracı, artı mesaj anahtarı — ve bu çifti, mesaj zarfının taşıdığı ve dolu olan kiracı kimliğiyle arıyordu.

Sahiplenme satırları ise hiçbir kiracı kimliği taşımıyordu. Hepsi boştu ve en başından beri öyleydi. Varlığın kendi belgesi, çerçevenin bunu ekleme sırasında damgaladığını aynen böyle yazıyordu. Hiç damgalamamıştı. Bulduğumuz gün üretim ortamında ölçüldü: 3.344 gelen kutusu satırının tamamı boş, buna karşılık üreten taraftaki 1.451 satırın 1.174'ü gerçek bir kiracı taşıyor — okuyan taraftan kimsenin şüphelenmemesinin sebebi tam olarak bu.

Yani arama (kiracı, anahtar) istiyordu, kayıtlı satır (hiçbir şey, anahtar) idi ve asla eşleşemezdi.

Hiçbir şey patlamadı, haftalarca sürmesinin sebebi bu

Asla eşleşemeyen bir arama, ilk denemede hata vermesi gereken bir şeye benzer. Tam tersini yaptı.

Sahiplenme mesajın yeni olduğuna karar verdi. Ekleme sonra benzersiz indekse çarptı ve yinelenmiş sayılarak reddedildi — doğru şekilde, çünkü satır zaten oradaydı. Bir yedek dal bu reddi yakaladı ve iyimser okudu: başka bir teslimat bunu almış olmalı, burada yapılacak bir şey yok. Zarf "hâlâ işlenecek" durumunda bırakıldı, dolayısıyla bir sonraki teslimat onu alıp işi yeniden yaptı.

Her tüketici kendi birikmiş işini kabaca kırk beş saniyede bir, sonsuza dek yeniden çalıştırıyordu. Bunu yirmi altı tanesi yapıyordu. Bir üretim satırı, geldikten 333 saat sonra tamamlandı ve bu sürenin çoğunda defalarca tamamlanıp durdu.

Asıl neyi bozdu

O yirmi altı tüketicinin dördü üzerine yazmak yerine biriktiriyor. O dördü, kullanım sayfasının okuduğu faturalandırma izdüşümleri ve bu iş orada yüzeye çıktı.

Tam da buna karşı açık bir korumaları vardı; ağustostaki, tek bir olayın bir göstergeye dokuz kez uygulandığı olaydan sonra yazılmıştı. Bu koruma satırı işlemeden önce başarılı olarak işaretler, böylece yeniden teslimat işareti bulur ve durur. İşaret her seferinde doğru yazıldı. Sonraki sahiplenme ise onu aynı bozuk anahtarla aradı ve bulamadı. Garanti, gönderildiği günden beri boştu.

Bunun neye dokunmadığını tam olarak saymaya değer, çünkü "faturalandırma izdüşümü" kulağa endişe verici geliyor, gerçekler ise değil:

  • Defter doğruydu. Her yapay zekâ çağrısı kendi fiyat anlık görüntüsünü taşıyan tam olarak bir fatura kaydı yazar ve bu yolda hiçbir şey onları yazmaz.
  • Hiçbir cüzdan hareket etmedi. Bakiyeler defterden gelir, asla bir özetten değil.
  • Hiçbir tavan hareket etmedi. Bütçe koruması ayrı bir sayaç okur; bu ay ne harcadığınızın tek doğruluk kaynağı odur. Şişmiş bir sayı yüzünden kimse erken kesilmedi ve geçmemesi gereken kimse geçmedi.

Etkilenen özeti okuyan tek şey, kendi hesap sayfanızdaki kullanım geçmişidir — toplamınız ve neye harcandığının dökümü. Tüm etki alanı bu kadar ve yaptığı şey yüksek okumaktı.

Kimsenin bakmadığı yarısı

Aynı bozuk arama ikinci bir yerde daha duruyordu: bir mesaj başarısız olduğunda çalışan yol. Orada güncellemesi gereken satırı hiç bulamıyordu ve hemen altında "pratikte ulaşılamaz" yorumunu taşıyan bir dal vardı — her hatada "bu hata nihaidir" döndüren dal.

Böylece yeniden deneme sayacı hiç ilerlemedi ve hiçbir zehirli mesaj ölü mektup kuyruğuna düşmedi. Koca bir hata işleme katmanı, onu okuyan herkese burada bakılacak bir şey olmadığını söyleyen bir yorumun arkasında kapalı duruyordu.

Düzeltme

Her iki arama da artık tüketici grubu içinde mesaj anahtarına göre çalışıyor; benzersiz indeksin zaten dayattığı şey bu. Mesaj anahtarları, onları üreten şeyin kimliğinden türetilir, dolayısıyla kiracılar arasında yapısal olarak çakışamazlar.

Damgalamayı iddia eden belge silinmek yerine düzeltildi. O cümle tuzağın kendisiydi ve silmek, sonunda birinin kontrol ettiğini söyleyen hiçbir şey bırakmazdı.

Davranışı dokuz test sabitliyor. Altısı eski kodda başarısız oluyor; eski kodu geri koyarak doğruladık.

Sonrasını temizlemek

Şişmiş satırlar kendi kendini onarıyor. Bir işçi, günlük özetleri her saat, iki günlük bir pencere boyunca defterden yeniden kuruyor. Bu işçi baştan beri çalışıyordu ve kaybediyordu: saatte bir çalışmak, kırk beş saniyede bir yeniden uygulayan bir tüketiciye karşı adil bir yarış değil.

Tüketici artık yeniden çalışmadığına göre kazanıyor. O pencerenin içinde kalan iki gün, düzeltme canlıya çıkar çıkmaz defterden yeniden kuruldu. Daha önceki iki gün pencerenin dışına çıkmıştı; onlarda kalan şey kendi hesaplarımızdan biri ve başka bir yerde önemsiz bir fark — bu yüzden peşine düşmek için üretimde bir pencereyi genişletmek yerine onları öylece bıraktık, ki bu da taramanın eksiksiz olduğunu ima etmekten iyi göründü.

Bundan çıkardığımız

Bir yineleme-önleme anahtarı, kodun yazıldığına inandığı şeyi değil, indeksin fiilen dayattığı şeyi yansıtmak zorundadır. Bunun iki yarısı farklı alanlardan besleniyordu ve hiçbiri diğerine karşı ölçülmemişti. Artık ikisi de ölçüldü ve bunu kanıtlayan test, yanlış olan sürümde kırmızıya dönüyor.

Paylaş LinkedIn X E-posta
Kendi işinizde deneyinHer cevap neye mal olduğunu gösterir. Ücretsiz planla başlayın. Ücretsiz başla
Gürültü değil, ürün güncellemeleri alın Yeni modeller, özellikler ve değişiklik günlüğü öne çıkanları - gerçekten bir şey yayınlandığında kısa bir e-posta.
Abone olarak ToRun ürün güncellemesi e-postalarını almayı kabul edersiniz. Aboneliğinizi istediğiniz zaman sonlandırabilirsiniz. Gizlilik Politikası