Giriş
Dağıtık mimarilerde ve özellikle microservice mimarisinde aynı mesaj birden fazla kez gelebilir. Bu mesajların ayıklanmasına deduplication deniliyor. Kullanılabilecek bazı yöntemler şöyle
1. Idempotent Consumer Pattern
Idempotency (Denkgüçlülük) Nedir yazısına taşıdım. Ancak kısaca tüketen taraf
- ya mesajları bir sayı ile takip eder ve tekrar gelen mesajları ayıklar
- ya da tüm işleri en baştan yapar
2. Transactional Outbox
Outbox Pattern yazısına taşıdım. Ancak kısaca üreten ve tüketen taraflar birbirlerini direkt çağırmazlar. Bunun yerine aracı olarak veri tabanını kullanırlar. Böylece
- üreten taraf veri tabanına yazmayı başardığında mesajın gideceğini garanti eder.
- tüketen taraf mesajı başarıyla işleyip veri tabanından sildiğinde mesajın tüketildiğini garanti eder
- tüketen taraf için kod yazmak şart değil. CDC araçlarından birisi de kullanılabilir
3. Kafka Transaction API — for exactly-once delivery semantics
Bu çözüm tabii ki eğer Kafka kullanıyorsak geçerli. Apache Kafka Message Delivery Semantics yazısına taşıdım. Aslında Transactional Outbox ile aynı mantık. Farklı olarak veri tabanı yerine Kafka kullanılıyor. Böylece
- üreten taraf Kafka Transaction'ınını başarıyla commit'lerse mesajın gideceğini garanti eder.
- tüketen taraf mesajı başarıyla işleyip Kafka Transaction'ınını başarıyla commit'lerse mesajın tüketildiğini garanti eder
Hiç yorum yok:
Yorum Gönder