Mikroservice də Service Discovery nədir?
Microservice arxitekturasına əsaslanan proyektlər işlədiyinizdə tez-tez bir çox elmi terminoloji sözlər ilə qarşılaşacaqsınız, onlar aşağıdakılardır:
a) Service Discovery
b) API Gateway
c) Load Balancer
biz bu məqalədə ilk olanına yəni service discovery nədir, onu anlamağa çalışacayıq, elə isə başlıyaq.
Service Discovery, ms tipli proyektlərimizdə consume-client-service-lərin hansı ip address-lərinə məxsus produce-service-lərə request atacağından xəbəri belə olmadan bunu gerçəkləşdirən və həmçinin produce-service-lərin biri-biri ilə əlaqəyə girməsini təmin edən texnologiyadır.
Bilirəm bu biraz başqarışdırıcı gəldi, məsələni daha yaxşı anlamaq üçün aşağıdakı şəkilə baxaraq yuxarıda izah olunanı vizual şəkildə anlaşırlığını asanlaşdıra bilərik.
yuxarıdakı şəklə baxdığımızda sağ tərəfdə yerləşən davamlı olaraq artırıla bilən və dynamic olaraq dəyişən produce-service ms-lərin instance-larının olduğunu fərz edək. Diqqət yetirsəniz, ms instance-larının da ip addressləri dynamic şəkildə dəyişməkdədir. Belə olduğu təqdirdə bizim service client hissəmiz yəni sol tərəfdə yerləşən consume-client service-miz hansı ip addressə sahib ms instance-na request atacağını bilməyəcəkdir. Bax burada service discovery bu kimi problemləri həll edə bilməyimizə şərait yaradır, necə, onu anlamağa çalışaq?.
Service Registry
Mövzuya service discovery ilə başlamışdıq, lakin bu ümumi mövzunun adı olduğundan, yuxarıda izah olunan əməliyyatı həyata keçirdən məhz service registry-dir. Service registry-ni, up vəziyyətində olan ms-lərin instance-larını özündə saxlayan bir databaza kimi düşünə bilərik. Service registry hər zaman up vəziyyətdə olmalıdır və bundan sonra up vəziyyətinə gətirilən hər bir ms instance-ı buraya qeyd olunar və burada biz mövcud olan ms-ların statusuna yəni onların ya up yadakı shutdown olmasına baxa bilərik.
İki cür service discovery patterni mövcuddur:
• client-side service discovery
• server-side service discovery
Client-Side Service Discovery
Buna bir növ client yönümlü service discovery deyə də bilərik və yaxud client service tərəfindən göndərilən request-lərin hansı server-service-ə gedəcəyini təmin edən service discovery kimidə başa düşə bilərik. Service discovery-in bu növündə client, service registry ilə əlaqəyə girər və ondan atacağı request-in bu ip adressə sahib olan ms instance-ın olub-olmadığını soruşar. Service registry isə özlüyündə saxladığı ms-lərin instance-larının ip adresslərini verər. Daha sonrasında isə client bir load-balancing algoritmasına görə bu ms-lardan ən uyğun olanı seçər və həmən seçilən ms ilə əlaqəyə girər. Gördüyümüz kimi burada client, ip adresini əldə edərək ms ilə özü əlaqəyə girmiş oldu. Bu yazılanı aşağıdakı şəkildən də anlaya bilərsiniz.
Server-Side Service Discovery
Service discovery-in bu növündə isə client tərəf bir Load Balancer ilə əlaqəyə girər və request-i buraya yönləndirər ilk olaraq. Load Balancer isə Service Registry ilə əlaqəyə girərək available vəziyyətində olan instance-ların listini alar. Daha sonrasında isə özünə aid algoritmaya əsasən ən uyğun gördüyü ms instance-a client-dan aldığı request-i yönləndirər. Bunu aşağıdakı şəkildən anlaya bilərsiniz.
İkisinin arasındakı fərq bundan ibarətdir ki, client-side service discovery növündə client, instance ilə özü əlaqəyə girməkdədir. Çünki o ms instance-ın ip address məlumatını service registry-ə soruşaraq öyrənməkdədir. Server-side service discovery növündə isə request load balancer vasitəsi ilə ms instance-larına ötürülməkdədir.
Belə bu bizdə oldu service discovery anlayışı, ümid edirəm məqalə ürəyinizcə oldu, əgər qaranlıq qalan birşey olarsa və yaxud yanlış izah olunan hissələr vardırsa şərhdə qeyd edə bilərsiniz.