Yanlış çerçeve: bir geri al düğmesi
Bir agent'a "geri al düğmesi ekleme" talebi, geçerli olmayan bir modeli varsayar. Bir metin düzenleyicinin bir tuş vuruşunu ele alması gibi, tek bir tersinir işlemi varsayar. Bir agent çalışması bir işlem değildir. Farklı tutarlılık modellerine sahip sistemler arasında heterojen yazma işlemlerinin bir dizisidir: bir veritabanına eklenen bir satır, bir kuyruğa yayınlanan bir mesaj, nesne depolamaya yazılan bir dosya, alt akış iş akışını tetikleyen bir HTTP çağrısı, baytları uzak bir MTA'ya çoktan teslim etmiş bir sağlayıcı üzerinden gönderilen bir e-posta. Bunların her birinin, yazma işlemini geri almanın ne anlama geldiğine dair kendi kavramı vardır ve birkaçında böyle bir kavram hiç yoktur.
Geri al düğmesi, bir durum problemini gizleyen bir arayüz kolaylığıdır. Tek bir veri deposuna sahip tek kullanıcılı bir uygulamada, durum problemi gizlenebilecek kadar küçüktür. Sistemleri kapsayan bir agent'ta ise durum problemi, tasarım problemidir. Düğme, onu çözdükten sonra geriye kalandır; onu çözmek için inşa ettiğiniz şey değildir.
Etkiler tekdüze değildir
Etkileri bir izde nasıl göründüklerine göre değil, tersine çevirmenin maliyetine göre ayırmak faydalıdır.
Bazı etkileri tersine çevirmek ucuzdur. Bir taslak belge, bir staging yazımı, bir karalama şemasındaki bir satır, bir test ortamında değiştirilen bir feature flag. Tersine çevirme, aynı türden, aynı yetkiye karşı yapılan başka bir yazımdır ve maliyeti sınırlıdır.
Bazıları pahalıdır. Gönderilen bir e-posta geri alınamaz; yalnızca bir düzeltme takip edebilir ki bu da kendi kitlesi ve kendi sonuçları olan yeni bir iletişimdir. Bir ödeme iade edilebilir, ancak iade; ücretler, zamanlama ve mutabakat etkileri olan yeni bir işlemdir. Silinen bir kayıt bazen bir yedekten geri yüklenebilir, ancak geri yükleme kısmi, belirli bir ana ait bir işlemdir ve ilgisiz değişiklikleri ezebilir.
Bazıları imkânsızdır. İfşa edilen bir sır artık ifşa edilmemiş hale getirilemez. Bir kimlik bilgisi, bir müşteri kaydı veya bir iç belge güven sınırının dışına çıktığında, hiçbir telafi edici işlem dünyayı önceki durumuna döndürmez. İlgili kontrol, tersine çevirme değil önlemedir.
Dolayısıyla tasarım sorusu, geri alma sunulup sunulmayacağı değildir. Hangi araçların bir tersine çevirme yolu olmadan çağrılabileceği ve hangi ön koşullar altında çağrılabileceğidir.
Araç etkilerini sınıflandırma

İşe yarar bir taksonominin üç sınıfı vardır ve her araç bildirimi tam olarak birini taşımalıdır.
Tersinir. Araç, orijinalle aynı yetkiye sahip telafi edici bir işlem sunar. Telafi simetriktir: aynı principal, aynı kapsam, aynı tutarlılık garantileri. Birincil anahtara göre eşleşen bir silme işlemiyle birlikte bir veritabanı ekleme tersinirdir. Sabitlenmiş bir artefakta geri alma ile birlikte bir staging dağıtımı tersinirdir. Test, telafi edici çağrının aynı agent kimliği tarafından yeni bir onay olmadan yapılıp yapılamayacağı ve sonucun, çalışmanın önemsediği amaçlar açısından çağrı öncesi duruma eşdeğer olup olmadığıdır.
Telafi edilebilir. Bir tersine çevirme vardır, ancak kendi yan etkileri ve kendi onayı olan yeni bir eylemdir. Bir iade telafi edilebilirdir: bir tahsilatın ekonomik etkisini tersine çevirir, ancak yeni bir defter kaydı oluşturur, bir ücret doğurabilir ve bir eşiğin üzerinde insan yetkilendirmesi gerektirebilir. Tüketicilerin çoktan işlediği yayınlanmış bir mesaj, yalnızca bir düzeltmenin yayınlanabileceği anlamında telafi edilebilirdir; orijinal tüketim geri alınamaz. Telafi edilebilir araçlar, ilginç mühendisliğin çoğunun yaşadığı yerdir; çünkü telafi, kendisi bir ön koşul, bir onay yolu ve bir kayıt gerektiren birinci sınıf bir işlemdir.
Tersinmez. Hiçbir telafi edici işlem yoktur. Harici bir e-posta göndermek, bir sırrı ifşa etmek, yedeği olmayan bir kaydı silmek, üçüncü tarafın tersine çevirme sunmadığı bir üçüncü taraf eylemini çağırmak. Bunlar, sonradan geri alma değil ön yetkilendirme gerektirir. Kontrol, çağrının arkasındaki prosedür değil, çağrının önündeki kapıdır.
Sınıflandırma agent başına değil, araç başınadır. Çoğunlukla tersinir olan bir agent yine de bir tersinmez araç içerecektir ve planlayıcı onu izole etmekle kısıtlanmadıkça, bu tek araç tüm çalışma için özerklik tavanını belirler.
Tersinirliği birinci sınıf bir alan haline getirme
Taksonomi ancak makine tarafından okunabilir olduğunda işe yarar. Her araç bildirimi bir tersinirlik sınıfı ve varsa telafi edici işleminin tanımlayıcısını taşımalıdır. Bir şemada bu, aracın adı, parametreleri ve yetki kapsamının yanında küçük bir alan kümesi gibi görünür.
{
"name": "send_customer_email",
"reversibility": "irreversible",
"compensating_operation": null,
"preconditions": ["recipient_verified", "template_approved", "human_gate_passed"]
}
{
"name": "create_invoice",
"reversibility": "compensable",
"compensating_operation": "void_invoice",
"compensation_requires_approval": true
}
{
"name": "write_staging_record",
"reversibility": "reversible",
"compensating_operation": "delete_staging_record",
"comrver-rack-network-cables-6c483a-2ef0de.jpg)
Bundan iki mekanizma doğar. Birincisi, planlayıcı sınıf tarafından kısıtlanır. Tersinmez araçlar spekülatif olarak çağrılamaz, kardeş bir başarısızlığın kısmi bir etkiyi askıda bırakacağı paralel dallara yerleştirilemez ve belirsiz bir başarısızlıkta açık bir mutabakat adımı olmadan yeniden denenemez. Telafi edilebilir araçlar çağrılabilir, ancak telafileri örtük bir temizlik değil, planlayıcının zamanlaması gereken bir araç çağrısıdır. Tersinir araçlar, yetki kapsamları içinde serbestçe kullanılabilir.
İkincisi, çalışma kaydı telafi edici işlemi etkinin yanında saklar. Telafi edici işlemi olan bir araç başarılı olduğunda, çalışma günlüğü etki tanımlayıcısını ve telafi tanımlayıcısını, telafiyi çağırmak için gereken argümanlarla birlikte yazar. Böylece geri alma, bir yeniden inşa değil bir arama haline gelir. Bir olaya müdahale eden operatörün, agent'ın ne yaptığını çıkarımsaması ve bir tersine çevirme tahmin etmesi gerekmez; kayıt, işlemi ve argümanlarını adlandırır. Sınırlı bir kurtarma prosedürü ile ucu açık bir soruşturma arasındaki fark budur.
## Bunun kazandırdıkları
İlk kazanç asimetrik özerkliktir. Bir agent'a, bir hatanın telafi edici bir çağrıya mal olduğu tersinir yüzeyler üzerinde yüksek özerklik ve bir hatanın bir ifşaya veya bir müşteri ilişkisine mal olduğu tersinmez yüzeyler üzerinde sıkı kapılar verilebilir. Bu, tersinir işi ya aşırı kısıtlayan ya da tersinmez işi yeterince kısıtlamayan tek bir küresel özerklik seviyesinden daha faydalıdır. Özerkliğin değişmesi gereken eksen, tersinirlik sınıfıdır.
İkinci kazanç olay müdahalesidir. Her etki telafisiyle birlikte kaydedildiğinde, kurtarma prosedürü bir arama değil bir listedir. Operatör hangi etkilerin tersinir olduğunu, hangilerinin telafi edilebilir olup onay gerektirdiğini ve hangilerinin tersinmez olduğunu ve dolayısıyla tamamen farklı bir müdahale gerektirdiğini bilir: geri alma değil, bildirim, sınırlama ve ifşa.
Üçüncü kazanç değerlendirmedir. Araç bildirimleri tersinirlik taşıyorsa, değerlendirme düzeneği bir çalışmanın ön koşulları sağlanmadan önce bir tersinmez araca ne sıklıkla uzandığını ölçebilir. Bu, aşırı hevesli özerkliğin öncü bir göstergesidir ve bir üretim olayını beklemeden ölçülebilir. Ayrıca değerlendirme, aynı görevde planlayıcı varyantlarını karşılaştırmasına olanak tanır: tersinmez çağrıları ön koşullar sağlanana kadar erteleyen varyant, görevi aynı sıklıkta tamamlıyor mu ve bunu kaç adım maliyetle yapıyor?
## Dürüst ödünleşim
Bu tasarımın maliyeti verimdir. Planlayıcıyı tersinmez araçları izole etmekle kısıtlamak ve telafi edilebilir olanlar için açık telafi zamanlaması gerektirmek, daha az kısıtlanmış bir planlayıcının kullanacağı paralelliği ve spekülatif yürütmeyi ortadan kaldırır. Çoğunlukla tersinir olan görevlerde kısıt neredeyse bedavadır. Tersinir ve tersinmez etkileri karıştıran görevlerde planlayıcı tersinmez çağrılar etrafında serileştirecek ve çalışma, kısıtlanmamış bir çalışmadan daha yavaş ve daha uzun olacaktır. Bu ödünleşim bilinçlidir: alternatif, kurtarılamaz hale gelene kadar hızlı olan bir çalışmadır.
İkinci bir maliyet bakımdır. Tersinirlik sınıfı, aracın soyut olarak bir özelliği değildir; aracın dağıtıldığı haliyle, mevcut yetkisi, mevcut yedekleme duruşu ve mevcut alt akış tüketicileriyle bir özelliğidir. Arka deposunun belirli bir ana ait kurtarması olduğunda tersinir olan bir araç, bu kurtarma penceresi kısaltıldığında telafi edilebilir hale gelir. Sınıflandırma, bildirim sırasında bir kez belirlenmek yerine araçla birlikte gözden geçirilmelidir.
## Sonuç
Tersinirlik, her aracın bir durum özelliğidir; agent'ın üzerine katmanlanan bir kolaylık değildir. Yapılacak iş, her aracın etkisini sınıflandırmak, varsa telafi edici işlemi kaydetmek, planlayıcıyı sınıfa göre kısıtlamak ve özerkliği asimetrik olarak vermektir. Geri al düğmesi, eğer görünürse, bu işin yüzeyidir. Onun yerine geçmez.
