Mikro hizmetler nedir?
- 7 dakika
Bulut, günümüzün uygulama geliştirme ve BT sistemleri yönetimini destekler. Modern bulut uygulamalarının hızlı, çevik, yüksek düzeyde ölçeklenebilir ve güvenilir olması gerekir.
Kapsayıcıları kullanmak, bu gereksinimlerin tümünü karşılayan uygulamalar dağıtmanıza yardımcı olabilir. Ancak bir uygulamayı stratejik tasarım düzenine uymadan bir kapsayıcıya koymak, bir araca binip harita veya GPS kullanmadan yeni bir şehre giden yolu bulmayı ummak gibidir. Hedefinize varabilirsiniz, ancak rota büyük olasılıkla doğrudan veya en verimli olmayacaktır.
Mikro hizmetler mimarisi bu senaryoda yararlıdır. Mikro hizmetler, modern bulut uygulamalarının çeviklik, ölçeklenebilirlik ve güvenilirlik gereksinimlerine mükemmel bir şekilde uyan yazılım geliştirme ve dağıtıma yönelik bir yaklaşım sunar.
Mikro hizmetler mimarisi nedir?
Mikro hizmetler mimarisinde, büyük bir uygulama daha küçük bir hizmet kümesine ayrılır. Her hizmet kendi işleminde çalışır ve HTTP/HTTPS, WebSocket veya Gelişmiş Message Queuing Protokolü (AMQP) gibi protokolleri kullanarak diğer işlemlerle iletişim kurar. Her mikro hizmet belirli bir bağlam sınırı içinde belirli bir uçtan uca etki alanı veya iş özelliği uygular. Her mikro hizmet otonom olarak geliştirilmeli ve bağımsız olarak dağıtılabilir olmalıdır. Son olarak, her mikro hizmetin ilgili etki alanı veri modeline ve etki alanı mantığına sahip olması gerekir. Mikro hizmetler farklı veri depolama teknolojilerini (SQL, NoSQL) ve farklı programlama dillerini temel alabilir.
Mikro hizmetlerin bazı temel özellikleri şunlardır:
- Küçük, bağımsız ve gevşek bir şekilde bağlanmışlardır.
- Her mikro hizmet, küçük bir geliştirme ekibinin yönetebileceği ayrı bir kod tabanına sahiptir.
- Bunlar bağımsız olarak dağıtılır. Bir ekip, uygulamanın tamamını yeniden derlemeden ve yeniden dağıtmadan mevcut bir mikro hizmeti güncelleştirebilir.
- Verilerini veya dış durumunu ilgili veritabanlarında kalıcı hale getirdiler. Monolitik mimarinin aksine mikro hizmetler veritabanlarını paylaşmaz.
- İyi tanımlanmış API'leri kullanarak birbirleriyle iletişim kurarlar. Her bir hizmetin iç uygulama ayrıntıları diğer hizmetlerden gizlidir.
- Çok teknolojili programlamayı destekler. Örneğin, bir web uygulamasını oluşturan mikro hizmetlerin aynı teknoloji yığınını, kitaplıkları veya çerçeveleri paylaşması gerekmez.
Neden mikro hizmet mimarisi kullanarak geliştirin?
Mikro hizmetler genellikle ölçeği genişletebileceğiniz veya ölçeği genişletebileceğiniz daha basit müşteri gereksinimi işlevlerini kapsüller. Bunları bağımsız olarak test edebilir, dağıtabilir ve yönetebilirsiniz. Mikro hizmet yaklaşımının önemli avantajlarından biri, ekiplerin müşteri senaryoları tarafından belirli bir teknolojiye göre daha fazla yönlendiriliyor olmasıdır. Her küçük geliştirme ekibi, bir müşteri senaryosuna dayalı bir mikro hizmet geliştirir. Ekip, kullandığı teknolojileri seçer.
Mikro hizmetler uzun vadeli çeviklik sağlar. Mikro hizmetler, her birinin ayrıntılı ve otonom yaşam döngülerine sahip birçok bağımsız dağıtılabilir hizmeti temel alan uygulamalar oluşturmanıza izin vererek karmaşık, büyük ve yüksek oranda ölçeklenebilir sistemlerde sürdürülebilirliği destekler.
Başka bir avantaj olarak, mikro hizmetler bağımsız olarak ölçeği genişletebilir. Birim olarak ölçeği genişletmeniz gereken tek bir monolitik uygulamaya sahip olmak yerine belirli mikro hizmetlerin ölçeğini genişletebilirsiniz. Uygulamanın ölçeklendirilmesi gerekmeyen diğer alanlarını genişletmek yerine talebi desteklemek için yalnızca daha fazla işlem gücüne veya ağ bant genişliğine ihtiyaç duyan işlevsel alanı ölçeklendikleyebilirsiniz. Bu, daha az donanıma ihtiyacınız olduğundan maliyet tasarrufu anlamına gelir.
Karmaşık, büyük ve ölçeklenebilir uygulamaların belirli, küçük alanlarını değiştirebildiğiniz için mikro hizmetler yaklaşımı çevik değişikliklere ve her mikro hizmetin hızlı bir şekilde yinelenmesine olanak tanır.
Ayrıntılı mikro hizmet tabanlı uygulamaların mimarisini oluşturma, sürekli tümleştirme ve sürekli teslim uygulamaları sağlar. Ayrıca uygulamaya yeni işlevlerin teslimini hızlandırır. Mikro hizmetleri yalıtarak çalıştırabilir ve test edebilir ve hizmetler arasında net sözleşmeler yürütürken bunları otonom olarak geliştirebilirsiniz. Arabirimleri veya sözleşmeleri değiştirmediğiniz sürece, herhangi bir mikro hizmetin iç uygulamasını değiştirebilir veya diğer mikro hizmetleri bozmadan yeni işlevler ekleyebilirsiniz.
Kapsayıcılar hangi rolü oynar?
Kapsayıcıya alma, bir uygulama veya hizmetin, bağımlılıklarının ve yapılandırmasının (dağıtım bildirim dosyaları olarak soyutlanmış) kapsayıcı görüntüsü olarak birlikte paketlendiği yazılım geliştirmeye yönelik bir yaklaşımdır. Kapsayıcılı uygulamayı bir birim olarak test edebilir ve konak işletim sisteminde kapsayıcı görüntüsü örneği olarak dağıtabilirsiniz.
Yazılım kapsayıcıları, farklı kod ve bağımlılıklar içerebilen standart bir yazılım dağıtım birimi olarak görev görür. Bu, nakliye konteynerlerinin her türlü malları gemi, tren veya kamyonla taşıma şekline benzer. Geliştiriciler ve BT uzmanları, kod ve bağımlılıkları çok az değişiklikle veya hiç değişiklik yapmadan ortamlar arasında dağıtmak için kapsayıcılı yazılımları kullanabilir.
Bir uygulamayı kapsayıcıya almak mikro hizmet mimarisi desenini uygulamak için harika bir yol olabilir. Kapsayıcıları kullanmanın avantajları, mikro hizmet mimarisi kullanmanın avantajlarıyla neredeyse tam olarak aynıdır.
Not
Mikro hizmetleri dağıtmanın tek yolu bir uygulamayı kapsayıcıya almak değildir. Mikro hizmetleri Azure Uygulaması Hizmeti'nde, sanal makinelerde veya çeşitli yollarla tek tek hizmetler olarak dağıtabilirsiniz. Kapsayıcılar, bu modülün geri kalanında mikro hizmetlerimiz için kullanacağımız dağıtım aracıdır.
Kapsayıcılı hale getirmenin bir diğer avantajı da ölçeklenebilirliktir. Kısa vadeli görevler için kullanılacak yeni kapsayıcılar oluşturarak ölçeği hızla genişletebilirsiniz. Uygulama açısından bakıldığında, bir görüntünün örneğini oluşturmak (kapsayıcı oluşturmak), hizmet veya web uygulaması gibi bir işlemin örneğini oluşturmaya benzer.
Kısacası kapsayıcılar tüm uygulama yaşam döngüsü iş akışı genelinde yalıtım, taşınabilirlik, çeviklik, ölçeklenebilirlik ve denetim avantajları sunar.
Bu modülde oluşturduğunuz mikro hizmetler, .NET CLI kullanılarak yayımlanan bir Docker kapsayıcısında çalıştırılır.
.NET SDK kapsayıcı yayımlama
.NET 7'de .NET SDK'sı, komutuyla dotnet publish kapsayıcı görüntüleri oluşturma becerisi kazandı. Araçlar, projenizin özelliklerine ve çıktılarına göre bir dizi çıkarım yapar. Daha sonra .NET, dockerfile'ın oluşturacağı görüntüyle aynı görüntüyü oluşturur. Yeni bir uygulama oluşturmak ve bunu görüntü olarak yayımlamak en az iki komut alabilir:
dotnet new webapi
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release
Yukarıdaki .NET CLI komutları yeni bir web API'si oluşturur ve uygulamayı kapsayıcı olarak yayımlar:
- linux'u işletim sistemi olarak hedefleme (--os linux).
- x64 mimarisi belirtme (--arch x64).
- Yayın yapılandırmasını (-c Yayın) kullanma.
MSBuild özellikleri aracılığıyla oluşturulan kapsayıcının birçok yönünü denetleyebilirsiniz. Genel olarak, bazı yapılandırmaları ayarlamak için Dockerfile'da bir komut kullanabilirseniz, msbuild aracılığıyla da aynı işlemi yapabilirsiniz.
.NET'te neden mikro hizmetler derleyin?
.NET Core ile başlayıp geçerli yinelemelere devam eden .NET, önce bulutta yerel olacak şekilde oluşturulur. Platformlar arası çalıştığından Docker görüntünüz Linux'un bir türünü temel alabilir ve .NET kodunuz çalışmaya devam eder. Microsoft, Docker için .NET görüntüleri oluşturmuştur. Ayrıca.NET son derece hızlıdır. ASP.NET Kestrel web sunucusu düzenli olarak diğer web sunucularından daha iyi performans gösterir.
Docker
Docker , uygulamaların bulutta veya şirket içinde çalışabilen taşınabilir, kendi kendine yeterli kapsayıcılar olarak dağıtımını otomatikleştirmek için kullanabileceğiniz bir açık kaynak platformudur . Docker aynı zamanda bu teknolojiyi geliştiren ve geliştiren şirkettir. Kuruluş olarak Docker, Microsoft dahil olmak üzere bulut, Linux ve Windows satıcılarıyla işbirliği içinde çalışır.
Docker kapsayıcıları her yerde çalışabilir: şirket içi, müşterinin veri merkezinde, bir dış hizmet sağlayıcısında veya bulutta. Docker görüntü kapsayıcıları Linux ve Windows üzerinde yerel olarak çalıştırılabilir.
Görüntü nedir?
Bir geliştirici Docker'ı kullandığında bir uygulama veya hizmet oluşturur. Ardından uygulamayı veya hizmeti ve bağımlılıklarını bir kapsayıcı görüntüsünde paketler. Görüntü, uygulamanın veya hizmetin ve yapılandırmasının ve bağımlılıklarının statik bir gösterimidir.
Görüntü çalıştırıldığında kapsayıcıya dönüşür. Kapsayıcı, görüntünün bellek içi örneğidir.
Kapsayıcı görüntüsü sabittir. Bir görüntü derledikten sonra görüntü değiştirilemez. Bir görüntüyü değiştiremediğiniz için uygulamada veya hizmette ve bağımlılıklarda değişiklik yapmanız gerekiyorsa yeni bir görüntü oluşturun. Bu özellik, üretimde kullandığınız görüntünün geliştirme ve testte kullanılan görüntüyle aynı olduğunu garanti eder.
Dockerfile nedir?
Dockerfile, Docker görüntüsü oluşturma yönergelerini içeren bir metin dosyasıdır. Dockerfiles, görüntüleri oluşturmak ve yapılandırmak için tasarlanmış en düşük betik dilinde yazılır. Dockerfiles, temel görüntüden başlayarak görüntü oluşturmak için gereken işlemleri de belgeler.
Uygulamanızı içeren bir Docker görüntüsü oluşturmak için genellikle bir temel görüntü tanımlayarak başlarsınız. Ardından temel görüntüye daha fazla dosya ve yapılandırma eklersiniz. Uygun bir temel görüntüyü tanımlama işlemi genellikle Docker Hub'da yapılan bir aramayla başlar. Zaten bir uygulama çerçevesi ve Ubuntu veya Alpine gibi bir Linux dağıtımının tüm yardımcı programlarını ve araçlarını içeren hazır bir görüntü ararsınız. Örneğin, kapsayıcıya paketlemek istediğiniz bir ASP.NET uygulamanız varsa Microsoft, ASP.NET çalışma zamanını içeren mcr.microsoft.com/dotnet/aspnet adlı bir görüntü yayımlar.
Bir kapsayıcıyı temel görüntüyle başlatarak görüntüyü özelleştirebilir ve sonra bu görüntüde değişiklik yapabilirsiniz. Değişiklikler genellikle dosyaları yerel dosya sisteminden kapsayıcıya kopyalama ve kod derlemek için çeşitli araçlar ve yardımcı programlar çalıştırma gibi etkinlikleri içerir.
Dockerfile, uygulamanın kendisi de dahil olmak üzere uygulamanızı çalıştırmak için ihtiyacınız olan tam yazılıma sahip bir Docker görüntüsü oluşturan yönergeler kümesidir.