1. NETFLIX OSS(Open Source Software)

2. Spring Cloud Netflix

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

Untitled

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

Untitled

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

Untitled

2-4) Zuul

Netflix OSSμ—μ„œ μ œκ³΅ν•˜λŠ” API Gateway의 κ΅¬ν˜„μ²΄λΌκ³  보면 됨.

2-4)-1. Zuul Action Structure

Untitled

2-4)-2. Zull Structure

Zull은 μΈμ¦μš”κ΅¬ 식별, λΌμš°νŒ…, 슀트레슀 ν…ŒμŠ€νŒ… λ“±λ“± μ—¬λŸ¬ κΈ°λŠ₯이 μžˆλŠ”λ°

μš”μ²­ 온 Requestλ₯Ό ν•„ν„° / λΌμš°νŒ… 과정은 μ•„λž˜ κ·Έλ¦Όκ³Ό κ°™μŒ.

Untitled

β†’ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ 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%의 λ‹€μš΄ νƒ€μž„μ΄ μ „μ²΄μ μœΌλ‘œ 영ν–₯을 쀄 수 있음.