Bu yazıyı okudum ve kafam karıştı.
Her ikisi de aynı veritabanını paylaşan 1 webapp ve "işçi" olarak çalışan 1 farklı uygulama düşünelim .
Oh, "paylaşım" dedim .. ama makale ne hakkında uyarıyor? :
Dördüncü olarak, uygulamalar (veya hizmetler) arasında veri tabanı paylaşmak kötü bir şeydir. Amorf bir paylaşılan durumu oraya koymak çok cazip ve bilmeden önce çok büyük bir canavara sahip olacaksınız.
=> katılmıyorum. Farklı uygulamaların hala aynı birimin bir parçası olduğu bazı durumlar vardır ve bu nedenle “eşleştirme konusu” kavramı bu durumda bir anlam ifade etmemektedir.
Devam edelim: webapp, istemci HTTP isteklerini yerine getirir ve herhangi bir zamanda, bazı etki alanlarını (DDD terimi) güncelleyerek ilgili etki alanı olaylarını oluşturabilir.
İşçinin amacı, gerekli işleri işleyerek bu etki alanı olaylarını ele almaktır.
Önemli olan:
Olay verileri işçiye nasıl iletilmelidir?
Okunan makalenin teşvik ettiği ilk çözüm, RabbitMQ'yu kullanmak, mesajlara yönelik harika bir yazılım aracı kullanmak olacak.
İş akışı basit olurdu:
Ne zaman web dyno bir etkinlik yaratırsa, çalışanı besleyen RabbitMQ aracılığıyla yayınlar.
Dezavantajı, hiçbir şeyin toplam güncelleme taahhüdü ile olayın yayınlanması arasındaki olası tutarlı gönderim hataları veya donanım sorunları ile uğraşmadan gerçekleşen tutarlılığı garanti edemeyeceği ; bu başka bir ana konudur.
Örnek: Toplu güncellemenin başarısı olmadan bir etkinliğin yayınlanması ... alan modelinin yanlış temsilini temsil eden bir olayla sonuçlanabilir.
Küresel XA'nın (iki aşamalı taahhüt) var olduğunu iddia edebilirsiniz, ancak bu tüm veritabanlarına veya orta ölçekli araçlara uygun bir çözüm değildir.
Öyleyse bu acil tutarlılığı sağlamak için iyi bir çözüm ne olabilir? :
Etkinliği, veritabanında, toplam güncelleştirme ile aynı yerel işlemde depolayan IMO.
Basit bir asenkronize zamanlayıcı oluşturulacak ve mevcut yayınlanmamış olayların veritabanından sorgulanmasından sorumlu olacak ve bunları çalışanı dolduracak olan RabbitMQ'ya gönderecekti.
Fakat neden webapp tarafında ve bu arada fazladan bir programlayıcıya ihtiyaç duyuyor: neden bu durumda RabbitMQ'a ihtiyaç duyuyor?
Bu çözümle, mantıksal olarak görünür ki, RabbitMQ, özellikle veritabanı paylaşıldığı için gereksiz olabilir.
Aslında, durum ne olursa olsun, derhal tutarlılığın veritabanından yapılan bir oylamayı içerdiğini gördük .
Öyleyse, neden bu anketten doğrudan işçi sorumlu olmayacak?
Bu nedenle, neden web'deki bu kadar çok makalenin, mesaj odaklı katman yazılımını tanıtırken veritabanı sıralamasını zor eleştirdiğini merak ediyorum.
Makalenin alıntı:
Basit, iş için doğru aracı kullanın: bu senaryo bir mesajlaşma sistemi için ağlıyor. Yukarıda açıklanan tüm sorunları çözer; daha fazla yoklama, verimli mesaj teslimi, tamamlanmış mesajları kuyruklardan silmeye gerek yok ve paylaşılan durum yok.
Ve derhal tutarlılık yoksayıldı mı?
Özetlemek gerekirse, durum ne olursa olsun, paylaşılan veya paylaşılmayan veritabanı anlamında, veritabanında oylamaya ihtiyacımız var gibi görünüyor .
Bazı kritik kavramları özledim mi?
Teşekkürler