Birkaç mikro hizmet arasında veriyi arayın


13

Bir mikro hizmet ve eski bir veritabanı arasında dağıtılmış belirli bir etki alanı için veri var. Hem eski hem de mikro hizmet veritabanındaki alanları kapsayan bir arama var. Önceden (mikro servis bölünmeden önce), 1 sql sorgu ile yapıldı. Şimdi bir REST çağrısı ve bu arama işlevselliğini sunmak için eski veritabanına bir sorgu gerekir. Burada birkaç milyon satırdan bahsediyoruz. Bunu en iyi nasıl modelleyebilirim? Veri hacmi nedeniyle, REST çağrısı genellikle sayfalandırılmış sonuçları da döndürür. Bir SQL çağrısı başlatmak ve sonuçları REST yanıtı ile birleştirmek ve birleştirmek için saf bir yaklaşım çok yavaş ve gerçekten pratik değil.

Yanıtlar:


21

Bir arama özelliği, bahsettiğiniz iki hizmetten ayrı sorumluluğa sahip ayrı bir hizmet olarak modellenebilir. Bu nedenle, buradaki yaklaşım yeni bir hizmet ('arama') oluşturmak ve her iki hizmetten verilerin bir kopyasını dizine ve aramaya kolay, muhtemelen de hızlı bir şekilde sonuç vermek için normalleştirilmemiş bir biçimde saklamasını sağlamak olabilir. istediğiniz biçime.

Örneğin, örneğin mySql kullanan eski SQL veritabanına, örneğin MongoDB kullanan diğer mikro hizmete ve daha rahat erişim için zaten birbirine yapıştırılmış (normalleştirilmiş) verilerle elasticsearch kullanan yeni arama hizmetine sahip olabilirsiniz. elbette ayrıntılar yapmanız gereken arama türüne bağlı olacaktır.

İki hizmetten elde edilen veriler en iyi şekilde, verimi artırmak ve hizmetler arasındaki bağlantıyı azaltmak için Kafka veya Hermes gibi bir olay veri yolu üzerinden arama dizinine eşzamansız olarak aktarılır. İki hizmetin herhangi birindeki bir değişiklik, arama hizmetini verilerini güncellemesi için bilgilendiren bir olay gönderir.

Tabii ki hizmetlerdeki ve arama servisindeki değişiklikler arasında ek bir gecikmenin maliyeti vardır, ancak mikro hizmetler genellikle dağıtılan sistemlerde kullanıldığından, bazı gecikmeler ve geçici tutarsızlıklar zaten kaçınılmazdır. Ek bir hizmete sahip olmak ve zaten diğer iki hizmette olan verilerin bir kopyası için fazladan depolama alanı kullanmak, mikro hizmetler kullanarak oldukça dağıtılmış ve ölçeklenebilir bir sisteme sahip olmanın tipik bir maliyetidir.


Zaten ayrı bir hizmet oluşturmayı düşünüyorum. Bana biraz rahatsızlık veren tek şey - sadece arama için başka bir veritabanı oluşturmak (elastiki beslemek başka bir seçenek olurdu, ancak bazı altyapı darboğazlarımız var)
senseiwu

7
@zencv Maalesef mikro hizmetler böyle maliyetlerle geliyor. Yatay ölçeklendirme yapabilmek, bağlantının zayıf olması gerektiği anlamına gelir ve bu da genellikle veri çoğaltma olacağı anlamına gelir. Ayrıca çok daha fazla ağ trafiği elde edersiniz. Ölçeklenebilirlik çoğu zaman donanım birimi başına performansta bir düşüş anlamına gelir ve bir mimariyi diğerine göre (örn. Mikro hizmetler vs monolit) seçmek bu dengeyi hesaba katmalıdır.
Michał Kosmulski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.