2017-05-20 35 views
5

arasındaki tabloya katılma Hala mikro hizmet mimarisi hakkında bir şeyler anlamaya çalışıyorum.Farklı Microservices

Farklı uygulamayı ayırma fikri (veritabanını dahil et) beni heyecanlandırıyor. Ancak iki mikro servis varsa, hala kafam karıştı. Ürün ve Kullanıcı. her ikisi de ürün ve kullanıcı kendi tablo ürün ve kullanıcı kendi veritabanında. Mikro hizmette en iyi uygulamaya göre, sadece veritabanına hizmetten erişebiliriz.

Sorun, kullanıcı_kalı sütunu olan ürün tablosumuz olduğunu varsayalım. Ürünü oluşturan kullanıcının adını da döndüren arama ürünü yapmak istiyoruz. Bu, ürün mikro hizmetindeki ürün tablosu ve kullanıcı mikro hizmetindeki kullanıcı tablosu arasında birleştirme gerektirir. Bununla nasıl başa çıkıyorsun?

cevap

2

Her bir mikro hizmet için bir arama yapmalı ve birleştirmeyi el ile yapmalı veya her bir hizmete ilgili kullanıcı kimliklerini iletmelisiniz.

UserMicroservice: geri id ler dahil Kullanıcıların

SELECT * FROM Users WHERE some condition is true 

alın listesi.

ProductMicroserivce:

SELECT * FROM Products WHERE some condition is true AND userId IN (.........) 

Böylece kullanıcılar ve ürünler hala iki farklı veritabanlarında olabilir, ürünlerin sadece Userid kavramını olması gerekir.

tersi de yapılabilir

, ProductMicroserivce:

SELECT * FROM Products WHERE some condition is true 

sonra UserMicroservice çağrı tüm userids Özü:

SELECT * FROM Users WHERE some condition is true AND id IN (.........) 
+1

Teşekkürler, ben deneyeceğim: D –

+0

bu yüzden api (Rest/http) kullanarak hizmeti birbirine bağlayalım mı? –

+0

Bu konuda bana yardımcı olabilir misiniz? http: // stackoverflow.com/questions/44083919/microservice-config-in-play-2-framework –

4

ben o Jan I önerdi şekilde yaparak hiçbir yanlış olduğunu düşünüyorum iken Mikroservislerin sisteminize eklemesi gereken farkın farklı bir doğaya sahip olduğunu eklemektir.

Yukarıdaki hizmetler ayrılığı, SOA dünyasında çok gördüğümüz şeydi ve çok fazla değer sunmadan çok hızlı bir şekilde karmaşık hale geldi.

Eğer siz ve bunun sadece bir örnek olduğunu anlıyorsanız, ürünlere bağlı kullanıcıyı sorgulamanız gerekiyor - hizmeti neden bölüştürüyorsunuz? Her ne kadar, belirli bir bağlam için gereksinimlerin ne olduğuna bakmak yerine, db-varlık başına bir hizmet tasarlamanızla sonuçlanırsınız.

Lars

+0

Tam olarak buna katılıyorum, mikroservisler için mikroservisler mantıklı değil. –

+0

Yani farklı mikro servislerin en iyi örneği nedir? Kullanıcı ve ürün aynı microservice içinde olsaydı –

+0

Evet, eğer kullanım durumlarınız bu 2 varlığın aynı zamanda çok sınırlı bir şekilde güncellendiğini/güncellendiğini gösteriyorsa, aynı sınırlı bağlamda yaşadıkları ve bu nedenle aynı microservice. Elbette, 2 varlığın çok gevşek bir şekilde eşleştiğini fark ettiğiniz durumlar olabilir; bu durumda, db düzeyinde verileri çoğaltmak isteyebilirsiniz, böylece 2 veya daha fazla mikro servis, birbirleriyle çok fazla etkileşim kurmak zorunda kalmadan bunlara erişebilir. – Lars

1
böyle senaryolara

En iyi yanıt CQRS olduğunu. Kullanıcı ve ürün ilişkisinin gerçekleşen görüşlerini koruyun. Yayınlanmış görünümler, NoSql DB'ler gibi okumada düşük gecikme sağlayan herhangi bir şey olabilir. Komut Kullanıcı veya Ürün'ü mikro servislerine göre güncellediğinde, ilgili olaylar oluşturulmalı ve bu materyalisedView'ı yöneten başka bir servis tarafından yakalanmalıdır. Bu hizmet, ilgilendiğiniz sorguyu almak için kullanılacaktır. Her zaman aklınızda bulundurun, Microservices mimarisi kesinlikle kesin olmayan bir şey olan Tutarlı Tutarlılığa inanır :) .Bu sorunuza cevap verir.

İlgili konular