Microservices Security Example #3 - Zuul Proxy Server haqqında danışırıq

 Zuul Proxy Server


Zuul Serveri bir qala qapısı kimi düşünə bilərik. Məsələn qalaya daxil olmaq istəyən şəxsləri yalnız vahid bir qapıdan qəbul etmək üçün və ya tanımadığınız şəxsləri qalaya buraxmamaq üçün istifadə edilə bilər. 

Bunu Zuul Server-ə texniki olaraq nümunə gətirsək, məsələn user-service və auth-service lər var. Zuul vasitəsilə bu service-lərə girişi yalnız vahid bir yerdən edə bilərik. Burada Zuul Serverin işi Routing olacaq. Zuul Serverə öz servisimizi tanıtdıqdan sonra, artıq gələn sorğuya uyğun olaraq uyğun service çağrılacaq və sorğuya uyğun iş görüləcək.
Zuul Serverin Routing prosesi üçün Ribbon istifadə olunur. Ribbon, Eureka Server də qeydiyyatdan keçən service-ləri özündə saxlayaraq, uyğun yönləndirmələr edə bilir.

Application da istifadə olunan versiyalar:

1. spring-boot-starter-parent (2.3.8.RELEASE)
2. spring-cloud.version (Hoxton.SR9)


Hər şeydən əvvəl, application-ı run etmək üçün Main class-a @EnableZuulProxy əlavə etmək lazımdır. 



Burada @EnableZuulProxy və @EnableZuulServer annotationları var. Bunlar arasındakı fərqi belə göstərmək olar. ZuulProxy istifadə etdiyimiz zaman Proxy Forwarding özəlliyini əldə edirik. Digər halda isə, bu özəlliyi istifadə edə bilmirik. Lakin hər iki halda ZuulFilter istifadə edə bilirik.

@EnableEurekaClient Eureka Serverə client olması üçün əlavə edirik. 

Bəzən ola bilər ki, Zuul Serverə gələn sorğunu forward elədiyi service hər hansısa səbəbdən (məsələn service çöküb) qəbul edə bilmir. Bu zaman əlavə trafikin qarşısını almaq üçün bir müddətlik həmin service-ə gedən sorğuları yönləndirmir. Bu özəlliyin çalışması üçün @EnableCircuitBreaker annotation-dan istifadə olunur.


application.yml faylına nəzər yetirək, 




Burada ilk parameterdə application-nın adı, növbətidə baş url və application-nın işləyəci port qeyd olunur. Baş url deyərkən, məsələn example.com/api/users və ya example.com/api/products və s.

Service-lərimizi zuul.routes parameterində qeydiyyata salırıq. Burada path-ə uyğun gələn sorğuları uyğun service-id ə yönləndirir. Bu service-id Eureka Serverdə qeydiyyatdan keçən service-in adıdır.

sensitive-headers haqqında Spring Documentation da qeyd olunub. Qısaca olaraq, null və ya boş qeyd edirik ki, sorğuda gələn bütün header-ləri qəbul etsin.

host.connect-timeout-millis parameteri service-lərə connect olma vaxtını millisaniyələrlə özündə saxlayır.
host.socket-timeout-millis parameteri service-lə açılan socket-in açıq qalma müddətini təyin edir. 
Bu parameterlərə Ribbon istifadə etdiyimizə görə ehtiyac duyulmur.

ribbon.ReadTimeout , socket-timeout-millis ekvivalenti
ribbon.connection-timeout, connect-timeout-millis ekvivalenti hesab olunur.

prefer-ip-address parameterinə true dəyəri verməklə, Eurekanın bizim application-ı IP addresinə görə tanımasına imkan veririk. Bu parameterin istifadə olunması məsləhət görülür.

lease-expiration-duration-in-seconds parameteri haqqında buradan daha izahlı şəkildə baxa bilərsiniz.
Qısaca olaraq, Eureka Serverin özündə qeydiyyatdan keçən service-i özündən silmək son siqnalından sonra gözlədiyi müddətdir.

fetch-registry digər service-lərlə əlaqədə ola bilməsi üçün true olması lazımdır.
register-with-eureka false olması kifayət edir. Zuul Serverin Eureka Serverdə qeydiyyatdan keçməsi önəmli deyil.

registry-fetch-interval-seconds Eureka Serverdə qeydiyyatdan keçən service siyahısını öyrənmək üçün göndərilən sorğular arasındakı vaxtdır. Məsələn, yazdığıma əsasən, hər 10 saniyədən bir Eureka da qeydiyyatdan keçən service siyahısını özünə götürmək üçün Eureka Serverə sorğu göndəriləcək

defaultZone Eureka Serverin url-dir. Application işə düşən kimi bu url-ə sorğu göndərir və parameterlərin dəyərlərinə uyğun əməliyyatlar yerinə yetirilir.

Zuul Server-də filter haqqında bu postdan baxa bilərsiniz.

Növbəti post >> Auth Service yazırıq. Login, Logout və Refresh Token əməliyyatları 

Comments

Popular posts from this blog

Validation for AZ phone numbers with RegEx in Java

Java necə işləyir, kod nədir ?