1 Şubat 2021 Pazartesi

Yazılım Mimarisi - Microservices Architecture - Database Per Service yani No Shared Database

Giriş
Açıklaması şöyle
Each microservice should have its own databases and Data MUST not be shared via a database. This rule removes a common cause that leads to tight coupling between services. For example, if two services share the same database, the second service will break if the first service has changed the database schema. Then teams will have to talk to each other before changing databases, leading to delays, taking us backward.

I think this rule is a good one and should not be broken.

However, there is a problem. We often share the database when two services share the same data (e.g. bank account data, shopping cart) and need to update the data transactionally, using database transactions to enforce consistency.
Servis Başına Veri Tabanı Farklı Bir Şekilde de Düşünülebilir
Açıklaması şöyle. Yani her servis bir bir veri tabanı teknolojisi de kullanabilir.
A different way to think about the database per service pattern
The database per service pattern is a bit of a misnomer because the database itself is actually less important than the data model when it comes to microservices. Thinking of the database per service pattern as a “data model per service” instead recognizes the importance of selecting the right data model ..
Şeklen şöyle


Güncellemeyi Tek Servise İndirgemek
Eğer aynı veriyi iki microservice güncellemek istiyorsa, sıkıntı çıkabiliyor. Güncellemeyi tek service yaptırmak için bazı çözümler şöyle

1.  İki servis arasına message queue yerleştirmek
Böylece sadece bir microservice güncelleme yapar ve veriyi diğerine gönderir.

2. İki servisi birleştirmek 
Bu yapılabiliyorsa güzel olabilir.

Eğer Güncellemeyi Tek Servise İndiremiyorsak
1. Transaction kullanmak
Eğer iki servis birleşemiyorsa transaction kullanmak gerekir. Eğer transaction kullanmak istemiyorsak bazı çözümler şöyle

2. Use Compensation and other lesser Guarantees
Burada bir başarısızlık varsa, bir microservice bunu düzeltici işi de yerine getiriyor.

Distributed Transaction
Sanırım buradaki sıkıntı şöyle
...it’s quite impossible to have a distributed transaction spanning all the services.

Hiç yorum yok:

Yorum Gönder