27 Aralık 2024 Cuma

Mikroservis Yazı Serisi 15 - Service Registry & Discovery

     Selamün Aleyküm Arkadaşlar,

    Serinin on beşinci yazısında servislerin birbiriyle iletişim kurarken dinamik bir şekilde bunu yapmanın yoluna değineceğiz. Monolit projelerde böyle bir ihtiyaç genel itibariyle bulunmazken, mikroservis sistemlerde servislerin çokluğu nedeniyle önümüze çıkmaktadır. Hazırsak başlayalım.

    Öncelikle registry ve discovery kavramlarını ele alalım. Registry, kayıt olma anlamına gelir. Bununla paralel olarak da servislerin sisteme kaydedilme kısmını ele alıyor. Discovery ise keşfetme anlamına gelir. Kaydedilmiş bilgileri dinamik olarak istenilen servise döner.

    Bu işlemleri neden dinamik olarak yapma ihtiyacı ortaya çıkıyor dediğimiz noktada,

  • Kalabalık servis yapısında IP değişse dahi var olan adresler doğru bir şekilde gelmelidir. (Bunu "magic string" konusuna benzetiyorum. Her yerde string ifadeyi kullanmak yerine belki onu bir sabit (const) değişkene atayıp birçok yerden kullanmak ve gerektiğinde sadece bir yerden değişmesi yeterli olur. Mikroservis sistemlerde merkezileştirmek çok önemli bir nokta).
  • Gelen yükü birden fazla instance sahibi olan servislerde uygun olana yönlendirir (Bunun da farklı şekilleri vardır. Meraklısı şu yazımıza göz atabilir).
  • Bağımsızlık ve esneklik yine mikroservis sisteminin temel konularından ve bu şekilde servisler arası bağımlılığı azaltmış oluruz.
    Bu işleri yapan bazı araçlar Consul, Eureka ve Zookeeper olarak karşımıza çıkmaktadır. Bu araçlar birçok dil için kullanılsa da  Eureka ve Zookeeper daha çok java ile anılıyor iken Consul daha çok dotnet dünyasında kendi adından bahsettiriyor.

   Bahsettiğimiz konular arasında açıkçasını söylemek gerekirse en az ihtiyaç duyduğumuz konu olabilir. Buna rağmen bazı durumlarda adresleri değiştirmek istediğimizde ilgili projelerde tek tek değişiklikleri yaparak deploy işlemlerini yapmak ve bunu manuel olarak ilerletmenin zorluğunu yaşadık. Tabii biraz da attığın taşın ürküttüğün kuşa değer mi konusunu da göz önünde bulundurmakta faydalı olduğunu düşünüyorum.

    Belki kabaca bir tabir ile gelen servislerin kaydedilmesi (post) ve daha sonra ihtiyaç halinde bu verilerin çekilmesi (get) olarak ele alabiliriz. Tabii bununla birlikte yukarıda da bahsettiğimiz farklı kolaylıklar da sağlıyor, ancak genel mantığı anlatabilmek açısından bunu da söylemek istedim.
    
    Özetle servislerin dinamik bir şekilde kaydedilip ihtiyaç halinde bunların istendiği dinamik ve merkezi yapılar kurmak projelerdeki esnekliği ve tek elden yönetimi sağlayarak elimizi oldukça güçlendiriyor.

    Yazıyı birer ayet-i kerim ve hadis-i şerif ile bitirelim.

"Her şeyin hazineleri yalnızca bizim yanımızdadır. Biz, onu ancak belli bir ölçüye göre indiririz." (Hicr Suresi, 21)
"Allah, işinde maharet sahibi olan kulunu sever." (Beyhakî, Şuabü’l-İman, 4/334)

Hiç yorum yok:

Yorum Gönder