Bence burada biraz daha teorik olmak yardımcı olabilir. Mikro hizmetlerin arkasındaki motive edici fikirlerden biri, hiçbir şey paylaşılmaz, mesaj gönderme süreçleridir. Bir mikro hizmet, Aktör modelinde bir oyuncu gibidir. Bu, her bir sürecin kendi yerel durumunu koruduğu anlamına gelir ve bir işlemin diğerinin durumuna erişmesinin tek yolu ileti göndermektir (ve o zaman bile diğer işlem bu iletilere benzer şekilde yanıt verebilir). "Her mikro servisin kendi veri tabanı vardır" ile kastedilen, aslında bir sürecin (yani mikro hizmet) yerel ve özel olmasıdır . Büyük ölçüde, bu "veritabanı" nın ortaklaşa bırakılması gerektiğini göstermektedir.mikro servis ile, yani "veri tabanı" saklanmalı ve mikro servis ile aynı mantıksal düğümde çalıştırılmalıdır. Mikro hizmetin farklı "örnekleri" ayrı işlemlerdir ve bu nedenle her birinin kendi "veritabanı" olması gerekir.
Küresel bir veritabanı veya mikro hizmetler veya hatta bir mikro hizmet örnekleri arasında paylaşılan bir veritabanı, bu açıdan, paylaşılan durum oluşturacaktır. Bunu mikro servisler perspektifinden ele almanın "uygun" yolu, paylaşılan veri tabanına bir "veri tabanı" mikro hizmetinin aracılık etmesidir. Veritabanının içeriğini bilmek isteyen diğer mikro servisler bu "veri tabanı mikro servisine" mesajlar gönderir. Bu, tipik olarak, orijinal mikro hizmetler için yerel duruma (yani mikro hizmet için örnek "veritabanlarına" göre) olan ihtiyacı ortadan kaldırmayacaktır! Değişen şey, yerel devletin temsil ettiği şeydir. "Kullanıcı Sally bir yöneticidir" saklamak yerine, "Veritabanı mikro hizmeti" Kullanıcı Sally bir yöneticidir "dedi, beş dakika önce. Başka bir deyişle, diğer mikro servislerin durumu hakkında.
Bunun faydası, her mikro hizmetin kendi kendine yetmesidir. Bu, bir mikro hizmetin atomik bir başarısızlık birimi olmasını sağlar. Siz (çoğunlukla), kısmen işlevsel bir durumda olan bir mikro hizmet için endişelenmenize gerek yoktur. Tabii ki, sorun mikro-servis ağına taşınmıştır. Bir mikro hizmet, diğer mikro hizmetlerle temas kuramadığı için istenen işlevi yerine getirmekte başarısız olabilir. Bununla birlikte, bunun yararı, mikro hizmetin iyi tanımlanmış bir durumda olacağı ve örneğin eski tarihli inançları çözerek düşük veya sınırlı hizmet sunabileceğidir. Olumsuz tarafı, bir bütün olarak sistemin tutarlı bir anlık görüntüsünü elde etmenin çok zor olmasıdır ve oldukça fazla (istenmeyen) fazlalık ve çoğaltma olabilir.
Tabii ki, öneri bir Oracle örneğini her Docker konteynerine yapıştırmak değildir. İlk olarak, her mikro hizmetin bir "veritabanı" na ihtiyacı yoktur. Bazı işlemlerin düzgün çalışması için kalıcı bir duruma gerek yoktur. Örneğin, iki protokol arasında çeviri yapan bir mikro servis mutlaka kalıcı bir duruma ihtiyaç duymaz. Kalıcı duruma ihtiyaç duyulduğunda, "veritabanı" kelimesi "kalıcı durum" için sadece bir kelimedir. İçinde JSON ile bir dosya veya bir SQLite veritabanı veya Oracle yerel olarak çalışan kopyasını isterseniz veya dışındaki herhangi bir yöntemle olabilir lokalsürekli veri depolamak. Eğer “veritabanı” yerel değilse, saf bir mikro hizmet bakış açısından ayrı (mikro) bir hizmet gibi ele alınmalıdır. Bu amaçla, bir RDS örneğinin bir mikro hizmet için "veritabanı" olması hiçbir zaman anlamlı değildir. Yine, bakış açısı “kendi RDS veritabanlarına sahip bir grup mikro hizmet” değil, “ RDS veritabanlarıyla iletişim kuran bir grup mikro hizmet ”. Bu noktada, verilerin aynı veritabanı örneğinde depolanıp saklanmadığı önemli değildir.
Pragmatik olarak, bir mikro hizmet mimarisi büyük miktarda karmaşıklık ekler . Bu karmaşıklık, kısmi başarısızlıkla ciddi bir şekilde uğraşmanın bedeli. Birçokları için, faydaya değmeyecek kadar büyük bir ihtimal. Sisteminizi, en faydalı görünen yöntemle oluşturmakta özgürsünüz. Basitlik ve verimlilikle ilgili endişelerin saf bir mikro hizmet mimarisinden sapmalara yol açması olasılığı yüksektir. Maliyet, hizmetler arasında görünmeyen etkileşimler ve istediğiniz gibi konuşlandırma ve ölçeklendirme özgürlüğünüzdeki kısıtlamalar gibi kendi karmaşıklıklarını ortaya çıkaran ekstra birleşme olacaktır.