1. NETFLIX OSS(Open Source Software)
Neflixλ κΈ°μ‘΄ Legacy μμ€ν μ MSAλ‘ λͺ¨λ μ ννμ¬
μ΄μ/κ°λ° μμ ν¨μ¨μ±μ κ·Ήλννμ.
2007λ μ¬κ°ν λ°μ΄ν°λ² μ΄μ€ μμμΌλ‘ 3μΌκ° μλΉμ€ μ₯μ λ₯Ό κ²ͺμ Netflixλ μ λ’°μ± λκ³
μν νμ₯μ΄ κ°λ₯ν ν΄λΌμ°λ μμ€ν μΌλ‘ μ΄μ ν νμμ±μ λκΌμ.
Q : ν΄λΌμ°λ μμ€ν μΌλ‘ μ΄μ ν μ΄μ ?
β λ¨μν νλ«νΌ μ΄μ λ§μΌλ‘ κΈ°μ‘΄μ λ¬Έμ μ κ³Ό νκ³λ₯Ό ννΌν μ μλ€κ³ νλ¨ν λ·νλ¦μ€λ
β κ³ κ°μ©μ±, μ μ°ν μ€μΌμΌλ§, λΉ λ₯΄κ³ μ¬μ΄ λ°°ν¬λ₯Ό μν΄ MSAλ₯Ό μ νν¨.
β MSA μ νμ μν κΈ°μ λ€μ λμ ν΄ λ¬΄λ € 7λ μ κ±Έμ³ ν΄λΌμ°λ νκ²½μ μ΄μ νμΌλ©°
β μ΄ κ³Όμ μμ Netflixκ° κ²½νν λ Ένμ°μ λ¬Έμ ν΄κ²° λ°©λ²μ 곡μ νκΈ° μν΄ MSA μ ν κΈ°μ μ
β μ€ν μμ€λ‘ 곡κ°νμ. Netflix OSSλ MSAλ₯Ό λμ νλ €λ λ§μ μ¬λμκ² μ’μ μ νμ§κ° λμ.
2. Spring Cloud Netflix
2-1) Eureka(μ λ μΉ΄)
2-1)-1. Eureka
κ°κ° μͺΌκ°μ§ μλΉμ€λ€μ μ£Όμ μ§ν©μ²΄ λλ μλΉμ€ registryλΌκ³ μκ°νλ©΄ λ¨.
100κ°μ μλΉμ€λ μλ‘κ° ν΅μ μ νκ³ μλ€. μ΄λ΄ λ 100κ°μ μλΉμ€λ₯Ό κ΄λ¦¬νκΈ° μν΄μ
100κ°μ λν λλ©μΈ λλ IP μ 보μ ν¬νΈ μ 보λ€μ λ€ μκ³ κ΄λ¦¬ν΄μΌ ν¨.
μλΉμ€λ₯Ό μ€μ΄κ±°λ λλ €μΌ νλ μν©μ κ²½μ° λ€μ μλμΌλ‘ μμ±/κ΄λ¦¬ ν΄μ£Όμ΄μΌ νλ©° νΉμ μλΉμ€μ
μ₯μ κ° λ¬μ λ κ·Έ μλΉμ€λ₯Ό μλμΌλ‘ μ μΈν΄μ€μΌ ν¨. μμ²λ μ΄μ 리μμ€κ° λ€μ΄κ° κ±°μ.
Eureka, μ΄λ¬ν μλΉμ€μ λͺ©λ‘λ€μ μλμΌλ‘ κ΄λ¦¬ν΄ μ€λ€κ³ μκ°νλ©΄ λ¨.
μλΉμ€λ€μ μλΉμ€κ° κ°λν λ
Eureka Serverμ μκΈ°μ 보(IP μ 보 λ±)μ λ Έν°νκ²(λ³΄κ³ ) λλ©°, Eurekaλ λ±λ‘λ μλ²λ€μκ²
μΌμ μκ°λμ heartbeatλ₯Ό 보λ΄λ©°, μλΉμ€κ° μ μμ μΈμ§ μ£½μλμ§ νμΈν¨.
κ° μλΉμ€λ€μ Eurekaμμ μ μ μλ μλΉμ€ λͺ©λ‘λ€μ κ°μ Έμμ μ¬μ©νκ² λ¨.
2-1)-2. Eureka Structure Image
2-2) Ribbon
ν΄λΌμ΄μΈνΈ μ¬μ΄λ λ‘λ λ°Έλ°μμ. μμ€ν λΆν λΆμ°μ μν΄ L4 μ€μμΉ λ± νλμ¨μ΄ μ₯λΉλ₯Ό ν΅ν΄
μλ¨μ λμ΄ λΆνλ₯Ό λΆμ°νκ² λλλ° ,
Ribbonμ ν΄λΌμ΄μΈνΈ μννΈμ¨μ΄λ‘ νΈλν½μ λΆμ°/μ μ΄ν μ μμ.
μμμ μμνμ²λΌ 100κ°μ μλΉμ€κ° μλ νκ²½μ νΈλν½ μ΄μλ‘ μλΉμ€ μΆκ°/μμ λλ€λ©΄
L4μ κ°μ νλμ¨μ΄μμλ λκ°μ λμμ ν΄μΌ λλλ°, κ·Έλ° μΌμ΄ λΉλ²νλ€λ©΄ κ½€ κ³ λ¬νΌμ§ κ²μ.
Ribbonμ μ μ μλ² λ¦¬μ€νΈλ₯Ό κ°μ§κ³ λΆν λΆμ°μ ν μλ μμΌλ©°, Eurekaμ μ°λνμ¬ λμ μΌλ‘
리μ€νΈλ₯Ό κ΄λ¦¬νλ©΄μ λΆν λΆμ°μ΄ κ°λ₯ν¨. λΆν λΆμ° λ°©μλ λΌμ΄λ λ‘λΉ, 3ν μ°μ νΈμΆ μ€ν¨ μ
30μ΄λμ λͺ©λ‘μμ μ μΈνλ Availability filtering λ± μ¬λ¬κ°μ§ μ€κ³κ° κ°λ₯ν¨.
2-3) API Gateway
2-3)-1. API Gateway
MSAλ μμ λ¨μμ μλΉμ€λ‘ λΆλ¦¬ν¨μ λ°λΌ μλΉμ€μ 볡μ‘λλ₯Ό μ€μΌ μ μμΌλ©°,
λ³κ²½μ λ°λ₯Έ μν₯λλ₯Ό μ΅μννλ©΄μ κ°λ°κ³Ό λ°°ν¬λ₯Ό ν μ μλ€λ μ₯μ μ΄ μμ.
μ¬λ¬ μλΉμ€μ μλ ν¬μΈνΈλ₯Ό κ΄λ¦¬ν΄μΌ νλ μ΄λ €μμ΄ μμΌλ©° κ° μλΉμ€μ APIμμ 곡ν΅μ μΌλ‘
νμν κΈ°λ₯μ μ€λ³΅μΌλ‘ κ°λ°ν΄μΌνλ λ¬Έμ κ° μμ.
API Gatewayλ μ¦ λΌμ°ν° λ° reverse proxy κΈ°λ₯λΏ μλλΌ μλν¬μΈνΈ μλ²μμ 곡ν΅μΌλ‘
νμν μΈμ¦, μ κ·Ό μ μ΄λ± 곡ν΅μ μΈ λΆλΆλ ꡬνμ΄ κ°λ₯ν¨.
2-3)-2. API Gateway Image
2-4) Zuul
Netflix OSSμμ μ 곡νλ API Gatewayμ ꡬν체λΌκ³ 보면 λ¨.
2-4)-1. Zuul Action Structure
2-4)-2. Zull Structure
Zullμ μΈμ¦μꡬ μλ³, λΌμ°ν , μ€νΈλ μ€ ν μ€ν λ±λ± μ¬λ¬ κΈ°λ₯μ΄ μλλ°
μμ² μ¨ Requestλ₯Ό νν° / λΌμ°ν κ³Όμ μ μλ κ·Έλ¦Όκ³Ό κ°μ.
β μμ²μ΄ λ€μ΄μ€λ©΄ PRE Filterλ₯Ό μ€ννκ³ Routing Filterμ μν΄ μ ν΄μ§ μλ²λ‘ μμ²μ 보λ.
β μ ν΄μ§ μλ²μμ μλ΅μ΄ μ€λ©΄ POST Filterλ₯Ό μ€νμν΄.
2-5) Hystrix
2-5)-1. Hystrix
Hystrixλ λκΈ° μκ° νμ© μ€μ°¨ λ° λ΄κ²°ν¨μ± λ Όλ¦¬λ₯Ό μΆκ°νμ¬ μ΄λ¬ν λΆμ° μλΉμ€ κ°μ μνΈμμ©μ
μ μ΄νλλ° λμμ΄ λλ λΌμ΄λΈλ¬λ¦¬μ. Hystrixλ μλΉμ€ κ° μ‘μΈμ€ μ§μ μ 격리νκ³ μ¬λ¬ μλΉμ€μμ
κ³λ¨μ μ€λ₯λ₯Ό λ°©μ§νλ©° λ체 μ΅μ μ μ 곡νμ¬ μμ€ν μ μ λ°μ μΈ λ³΅μλ ₯μ ν₯μ μν¬ μ μμ.
2-5)-2.
99.99 30 = 99.7% κ°λμκ°
10μ΅ κ°μ μμ² μ€ 0.3% = 3,000,000 μ€ν¨
λͺ¨λ μ’ μμ±μ΄ λ°μ΄λ κ°λ μκ°μ κ°λλΌλ 2μκ° μ΄μμ κ°λ μ€μ§ μκ°
β νμ€μ μΌλ°μ μΌλ‘ λ ν¨μ¬ λ λμ¨
β λͺ¨λ μ’ μμ±μ΄ μ λλ‘ μν λλλΌλ μ 체 μμ€ν μ λν΄μ 볡μνλ λ‘μ§μ μ€κ³νμ§ μμΌλ©΄
β μμ κ°μ κ° μλΉμ€μ λν΄ 0.01%μ λ€μ΄ νμμ΄ μ 체μ μΌλ‘ μν₯μ μ€ μ μμ.
μλΉμ€ μ μ μν©
μλΉμ€ 1κ° μ₯μ
β λλμ νΈλν½μΌλ‘ μΈν΄ μ΄λ ν νλμ μλΉμ€κ° μ§μ° λλ μ₯μ κ° λλ©΄
β λͺ¨λ μλ²μμ λͺ¨λ μμ λͺ μ΄ λ΄μ ν¬ν μνκ° λ μ μμ.
β λ€νΈμν¬λ₯Ό ν΅ν΄ λλ ν΄λΌμ΄μΈνΈ λΌμ΄λΈλ¬λ¦¬μ λλ¬νμ¬ λ€νΈμν¬ μμ²μ΄
β λ°μν μ μλ μμ© νλ‘κ·Έλ¨μ λͺ¨λ μ§μ μ μ μ¬μ μΈ μ€λ₯μ μμΈμ΄ λλ©° μ₯μ 보λ€
β λ λμ μ΄λ¬ν μμ© νλ‘κ·Έλ¨μ μλΉμ€ κ° λκΈ° μκ°μ λλ € λκΈ°μ΄, μ€λ λ λ° κΈ°ν
β μμ€ν 리μμ€ λ± μμ€ν μ 체μμ λ λ§μ κ³λ¨μ μ€λ₯λ₯Ό λ°μ μν΄.
κ³λ¨μ μ₯μ
β μ΄λ¬ν κ³λ¨μ μ€λ₯λ₯Ό λ°©μ§νκΈ° μν Circuit breaker(Click) ν¨ν΄μ
β ꡬνν λΌμ΄λΈλ¬λ¦¬κ° hystrix μ΄λ€.
Hystrix λμ
β κ°λ¨ν λμμ μ€λͺ νλ©΄ μ΄λ€ νΉμ§ μλΉμ€μμμ μλ΅μ΄ μ§μ°λμ΄ μ μλ μκ³κ°μ λκ² λλ©΄
β κΈ°λ€λ¦¬λ λμ μ¬μ©μκ° μ μν νλ°± λ©μλ μ€νν΄ μλ΅κ°μ ν΄λΌμ΄μΈνΈμκ² μ λ¬νκ² λ¨.
β κ·Έλ¦¬κ³ μλ‘κ² λ€μ΄μ€λ λ€μ Requestλ μ₯μ κ° λ μλΉμ€μ 컨ννμ§ μκ³ μ μλ
β Fallback λ©μλλ₯Ό μ¦μ μ€ννλ©° μ₯μ κ° λ³΅κ΅¬λλ©΄ Hystrixλ λͺ¨λν°λ§νκ³ μλ€κ°
β μ μνλ μλΉμ€μ λ€μ μ°κ²°μμΌ μ€.