Neden ihtiyacımız var?
Mikro hizmetlerin muazzam yararı - ve daha çok, SOA - içsellerin soyutlama seviyesidir - sadece uygulama değil, aynı zamanda kullanılan teknolojilerdir. Örneğin, bir sistem beş ekip tarafından beş mikro hizmet şeklinde geliştirilirse, bir ekip diğer ekiplerden fikirlerini bile sormadan tamamen farklı bir teknolojik yıla (örneğin Microsoft yığınından LAMP'a) geçmeye karar verebilir.
Amazon AWS veya Twilio'ya bakın. Hizmetlerinin Java veya Ruby'de uygulanıp uygulanmadığını biliyor musunuz? Oracle veya PostgreSQL veya Cassandra veya MongoDB kullanıyorlar mı? Kaç makine kullanıyorlar? Bunu önemsiyor musun bile; diğer bir deyişle, bu teknolojik tercihler bu hizmetleri kullanma şeklinizi etkiliyor mu? Ve daha da önemlisi, farklı bir veritabanına geçmeleri halinde, istemci uygulamanızı buna göre değiştirmeniz gerekir mi?
Şimdi, iki hizmet aynı veritabanını kullanırsa ne olur? Ortaya çıkabilecek sorunların küçük bir kısmı:
Takım geliştirme hizmeti 1, SQL Server 2012'den SQL Server 2016'ya geçmek istiyor. Ancak, takım 2, SQL Server 2016'da kaldırılan kullanımdan kaldırılmış bir özelliğe dayanıyor.
Hizmet 1 büyük bir başarı. Veritabanını iki makinede (ana ve yük devretme) barındırmak artık bir seçenek değil. Ancak kümeyi birden çok makineye ölçeklemek, parçalama gibi stratejiler gerektirir. Bu arada, takım 2 mevcut skaladan memnun ve başka bir şeye geçmek için hiçbir neden görmüyor.
Hizmet 1, varsayılan kodlaması olarak UTF-8'e taşınmalıdır. Ancak Service 2, Windows Latin 1 Kodunu kullanmaktan mutluluk duyar.
Hizmet 1, belirli bir ada sahip bir kullanıcı eklemeye karar verir. Ancak, bu kullanıcı birkaç ay önce ikinci ekip tarafından oluşturulmuş durumda.
Hizmet 1, birçok farklı özelliğe ihtiyaç duyar. Hizmet 2 son derece kritik bir bileşendir ve saldırı riskini azaltmak için veritabanı özelliklerini minimumda tutmalıdır.
Hizmet 1 için 15 TB disk alanı gerekir; hız önemli değil, bu yüzden sıradan sabit diskler gayet iyi. Hizmet 2 en fazla 50 GB gerektirir, ancak mümkün olduğunca hızlı bir şekilde erişmesi gerekir, yani veriler bir SSD'de depolanmalıdır.
...
Her küçük seçim herkesi etkiler. Her kararın, her takımdan insanlar tarafından işbirliği içinde alınması gerekir. Ödün verilmelidir. Bunu, SOA bağlamında istediğiniz her şeyi yapma özgürlüğü ile karşılaştırın.
çok [...] yönetilemez.
O zaman yanlış yapıyorsun. Sanırım elle konuşlandırıyorsunuz .
İşlerin böyle yapılması gerekmiyor. Veritabanını çalıştıran sanal makinelerin (veya Docker kapsayıcılarının) dağıtımını otomatikleştirmeniz gerekir. Bunları otomatikleştirdikten sonra, iki sunucu veya yirmi sunucu veya iki bin sunucu dağıtmak çok farklı değildir.
Yalıtılmış veritabanlarıyla ilgili sihirli şey, son derece yönetilebilir olmasıdır . Düzinelerce ekip tarafından kullanılan devasa bir veritabanını yönetmeyi denediniz mi? Bu bir kabus. Her takımın belirli istekleri vardır ve bir şeye dokunduğunuzda birisini etkiler. Bir uygulama ile eşleştirilmiş bir veritabanı ile kapsam çok dar hale gelir, yani düşünülecek çok daha az şey vardır.
Büyük bir veritabanı özel sistem yöneticileri gerektiriyorsa , yalnızca bir ekip tarafından kullanılan veritabanları bu ekip tarafından yönetilebilir (DevOps da bu konuda) ve sistem yöneticilerinin zamanını serbest bırakır.
çok pahalı
Maliyeti tanımlayın.
Lisanslama maliyetleri veritabanına bağlıdır. Bulut bilişim döneminde, tüm büyük oyuncuların lisanslarını, büyük bir veritabanı yerine çok sayıda küçük veritabanının bulunduğu içeriğe uyacak şekilde yeniden tasarladıklarından eminim. Değilse, farklı bir veritabanına geçmeyi düşünebilirsiniz. Bu arada birçok açık kaynak var.
İşlem gücü hakkında konuşuyorsanız, hem sanal makineler hem de kaplar CPU uyumludur ve büyük bir veritabanının aynı işi yapan çok sayıda küçük veritabanından daha az CPU tüketeceğinden çok olumlu olmayacağım.
Sorununuz bellekse, sanal makineler sizin için iyi bir seçim değildir. Konteynerler vardır. İhtiyaçtan daha fazla RAM tüketmeyeceklerini bilerek, istediğiniz kadar kapsama alanı sağlayabileceksiniz. Toplam bellek tüketimi, çok sayıda küçük veritabanı için büyük bir veritabanına kıyasla daha yüksek olsa da, farkın çok önemli olmayacağını düşünüyorum. YMMV.