DevOpsX Talks’ın 30 Nisan’da gerçekleşen altıncı oturumunda mikroservislerde pipeline kurulumunu ele aldık. Emirates Havayolları‘nda Principal Software Consultant olarak görev alan Onur Başkirt, “Mikroservislerde Continuous Testing ve GitOps ile Tam Otomatize Pipeline Kurulumu” başlıklı sunumuyla GitOps yaklaşımı, araçlar ve pipeline akışlarından bahsederek tam otomatize pipeline kurulumu için ipuçları paylaştı. Bu blog yazımızda etkinlikte öne çıkan noktaları sizin için özetledik.
Mikroservisler nedir?
Mikroservislerden önce kullanılan mimari, 3 katmanlı mimari adı verilen “User Interface”, “Business Logic”, “Data Access Layer” katmanlarından oluşan bir yapıydı ve bunların hepsi tek bir projede yer alan yapılardı. Örnek olarak Business ile alakalı tüm gereksinimler Business Logic ile yapılır. Bunun artıları içeride haberleşmeyi fonksiyon kolları haline getirerek çözmek ve dolayısıyla içerideki haberleşmeyi kompleks bir halden çıkarmaktır.
Onur Başkirt sunumuna Monolith Architecture’lardan bahsederek başladı. Monolith mimariye sahip projelerin çok büyük ve tek parça halinde olması, build süresinin çok uzuyor olması, ufak bir değişikliği canlıda kontrol etmek istediğimizde tüm uygulamayı canlıdan aldıktan sonra yerine yeni versiyonun canlıya alınmak zorunda kalınmasının zorlayıcı noktalar olarak görüldüğünden bahsetti. Bu sebeplerle monolith mimaride release’ler aylık gerçekleştirilmektedir.
İş gereksinimleri parçalara bölünerek; profil servisi, sepet servisi, ödeme servisi gibi modüller oluşturulup küçük birer proje olarak değerlendirilir ve otonom hale getirilir. Böylelikle, ekipler ayrı ayrı servisler üzerinde çalışabilir. Bu parçalara ayrılmış servislerden oluşan yapıya mikroservis mimarisi adı verilir.
Mikroservislerin artılarından birisi de Polyglot desteğine sahip olmasıdır. Yani bir servis veya modül için Java dili kullanılırken, bir diğer servis için node.js kullanılabiilir. Mikroservislerin en büyük avantajlarından biri ise her servisin ayrı pipeline’ı olduğu için herhangi bir serviste yapılan değişikliği canlıda görmek istediğinizde sadece ilgili servisin pipeline’ı üzerinde işlemler gerçekleştirerek, o servisi canlıya alabilme imkanıdır. Böylece daha küçük ve hızlı deployment’lar gerçekleştirmiş oluruz.
Mikroservis mimarisine geçtiğimizde bizi ne gibi zorluklar beklemektedir?
Mikroservislerin getirdiği zorlukları kısaca maddeler halinde özetleyen Onur Başkirt bu konuda öncelikle Service Mesh’e vurgu yaptı. Ayrıca mikroservislerin test stratejisini oluşturmaktan, birden fazla data center kullanılıyorsa burada cross datacenter replication’in öneminden ve deployment stratejilerinden progressive deployment ve canary deployment’a daha fazla önem göstermemiz gerektiğinden bahsetti.
Birden fazla data center’a sahip isek Monitoring, Logging, Tracing, Load Balancing birimlerin aralarında entegrasyonu sağlamak, Internal Rooting’inin yapılması, birden fazla teknolojiye destek verebilme özelliklerine sahip olunması gerekir.
Örnek Mikroservis mimarisi
Kendi kullandıkları tool’lardan bahseden Onur Başkirt örnek bir mikroservis mimarisini anlattı.
En üstte istekte bulunan iOS, Android, Web, 3rd Party gibi client’lar yer almaktadır. Bunlardan gelen istekler öncelikle Load Balancer’dan geçer, buradan geçen istek mikroservis mimarisinde API Gateway’e gelir. API Gateway’in en önemli sorumluluklarından birinin Rooting yani yönlendirme olduğunu söyleyen Onur Başkirt devamında filtering, validation, raid limiting, timeoutlar gibi konularıda Gateway noktasında çözdüklerini belirtti.
Gateway’den geçen bir request ilgili servise geldikten sonra ilgili servisin dış sistemlerle veya başka bir servisle bir entegrasyonu varsa onlarla iletişim kurup bu isteği de işledikten sonra aynı şekilde client’lara isteğin cevabı geri gönderilir.
Mikroservis aşamalarında kullanılan en önemli tool ve teknolojileri listeleyen Onur Başkirt, alanda binlerce tool ve teknolojinin olduğunu, araçların istek ve ihtiyaca göre seçilebileceğini belirtti.
GitOps Nedir?
Kısaca GitOps, yapılacak işlemleri koda gönüştürüp, bu kod scriptlerini versiyon kontrol sisteminde versiyonlayarak tutmaktır. Birçok firma Git kullandığı için ismi de GitOps olarak geçmektedir.
GitOps’un en önemli ve kritik iki kuralı olduğunu söyleyen Onur Başkirt, birinci kuralın Git birimi için doğruluğun kaynağı olduğunu, ikinci kuralın ise her şeyin kod olarak ifade edilmesi olduğunu söyledi.
GitOps sürecine nasıl başlamalıyız?
Onur Başkirt, öncelikle takım şemasının belirlenmesi, ekip yapısı ve hangi rollerin olması gibi konuların belirlenmesi gerektiğini anlattı. Daha sonra ise hedefler, etki haritalarının ve önceliklerin belirlenmesi gibi maddeler ile devam edilebileceğinden bahsetti.
Mikroservis Test Piramiti
Son olarak, SIT testine kadar olan testlerin (Unit Test, Integration Test, Contact Test ve Component Test) PR & Dev Pipeline’larında otomatik koşuyor olduğunu, feedback elde edebilmek için bu testlerin hem PR hem de Dev Pipeline’ında koşulması gerektiği belirtildi.
Mikroservislerde Tam Otomatize Pipeline Kurulumunu ele aldığımız DevOpsX Talks #6 etkinliğimizin kaydını Youtube’dan izleyebilir, sonraki etkinliklerimizden haberdar olmak için sosyal medyadan bizi takip edip, e-mail bültenimize üye olabilirsiniz.
Ahmet Keleş
Intern DevOps Engineer