์๋ฒ๊ฐ ํต์ ์ค ์ง์ฐ ๋ฐ์์ ํด๊ฒฐ๋ฐฉ๋ฒ
โฃ ๋คํธ์ํฌ ํ์์์ ์ค์
โฃ ๋๊ธฐ์ค ์์ฒญ์ ์ ํ
โฃ ์ฌ๋ฌ ๋ถํ ๋ถ์ฐ ๊ธฐ๋ฒ ๊ตฌํ
โฃ ์ํท ๋ธ๋ ์ด์ปค ํจํด๊ณผ ํด๋ฐฑ ๊ตฌํ ์ค์
๋ถํ ๋ถ์ฐ ๋ฃฐ(rule)
์คํ๋ง ํด๋ผ์ฐ๋ ๋ทํ๋ฆญ์ค์์๋ ๋ค์ํ ๋ถํ๋ถ์ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํด์ฃผ๋๋ฐ,
๋ทํ๋ฆญ์คOSS ์์๋ ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ๋ฃฐ์ด๋ผ๊ณ ํจ
์ข ๋ฅ
โฃ RoundrobinRule
→ ๋ผ์ด๋ ๋ก๋น ์ฌ์ฉ, ์ ์
๋๋ ์์ฒญ์ ๋ชจ๋ ์ธ์คํด์ค์ ์์ฐจ์ ์ผ๋ก ๋ถ์ฐ. ๊ธฐ๋ณธ!
โฃ AvailabilityFilteringRule
→ ์ธ๋ฒ ์ฐ๊ฒฐ ์คํจํ๋ฉด ์ํท ์ฐจ๋จ๋จ.
→ ์ํท ์ฐจ๋จ ๋ฐ ๋์์ฐ๊ฒฐ์ด ๋ง์๊ฒ์ผ๋ก ํ์๋ ์๋ฒ ์ ์ธ.
→ RoundrobinRule ์ ๋ฒ ์ด์ค ํด๋์ค๋ก ์ฌ์ฉ.
โฃ WeightedReponseTimeRule
→ ์ธ์คํด์ค๋ก ์ ๋ฌ๋๋ ํธ๋ํฝ์ ๊ท๋ชจ๋ ์ธ์คํด์ค์ ํ๊ท ์๋ต์๊ฐ์ ๋ฐ๋น๋ก.
→ ์๋ต์๊ฐ ๊ธธ์๋ก ๋ ์์ ๊ฐ์ค์น ๊ฐ์ง.
→ ๋ถํ๋ถ์ฐํด๋ผ์ด์ธํธ๋ ๋ชจ๋ ์๋น์ค ์ธ์คํด์ค์ ํธ๋ํฝ๊ณผ ์๋ต์๊ฐ ๊ธฐ๋กํจ.
โฃ BestAvailableRule
→ ์ํท๋ธ๋ ์ด์ปค๊ฐ ์ฐจ๋จ๋ ์๋ฒ๋ฅผ ์ ์ธํ๊ณ ๋์ ์์ฒญ์ ๊ฐ์ฅ ์ ๊ฒ ๋ฐ์ ์๋ฒ๋ฅผ ์ ํ.
ํธ๋ฒํ๋ผ์ด (Hoverfly)
์ค๋ช
HTTP ์๋น์ค๋ฅผ ์คํ
ํ๊ณ ์๋ฎฌ๋ ์ด์
ํ๋ ๊ฐ๋ฒผ์ด ์๊ฐํ ๋๊ตฌ.
DSL ์ ์์์ ๋ฉ์๋ ํ๋๋ฅผ ํธ์ถํด ๋ชจ๋ ์๋ฎฌ๋ ์ด์
์ค์ธ ์๋น์ค์ ๋ฉ์๋์ ์ง์ฐ์ ์ฝ๊ฒ ์ถ๊ฐ ๊ฐ๋ฅ.
→ maven or gradle ์ hoverfly-java import ํ์, JUnit์ @ClassRule ์ ์ ํ์.
์ค์ต
โฃโฃโฃ ์ค์ต ์ฝ๋ ๋งํฌ ๐
• junit test ์คํ์ hoverflyRule ์ ๋จผ์ ์คํํ๊ณ ๊ฐ ํ
์คํธ๋ฉ์๋๋ฅผ ์คํํ๋ค. (ex. test() ์คํ)
• test() ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ ์๋์ ์๋ค. ↓ ↓ ↓ ↓ ↓
โป https://www.baeldung.com/hoverfly ์๋ ์ ์ค๋ช ๋์ด ์๋ค. (์ฌ์ค ํด๋น๊ธฐ๋ฅ์ ๋ง์ด ์ฐ๋์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค;)
๋ฆฌ๋ณธ(Ribbon)
์ค๋ช
- Client LoadBalancer ์ด๋ค.
- ๊ฐ๋ฐ์๊ฐ ๋ก๋๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฅ ๊ตฌํ์ ๊ฐ๋ฅํ๋๋ก ํ๋ค. (L4 ์ฌ์ฉ์์ด)
- ํด๋ผ์ด์ธํธ ์๋ฒ๊ฐ ๋ก๋๋ฐธ๋ฐ์ฑ์ ํ๋ค!
- ์ ๋ ์นด๋ ์ฌ์ฉ์ ๊ฐ๋ ฅํฌํ๋ค ๐
- ๋์ด์ ์
๊ทธ๋ ์ด๋๋ฅผ ํ์ง ์์.
โป ๋ณดํต์ ๋ฌผ๋ฆฌ์ ์ผ๋ก L4 switch ์ ์ด์ฉํ์ฌ ๋ก๋๋ฐธ๋ฐ์ฑ ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ด์ฉ์ ์ถ๊ฐ ์๋ฒ๋น์ฉ ๋ฑ์ด ๋ฐ์ํ ๊ฒ์ด๋ค.
์ด์๋ฐ๋ฅธ ์ ์ฐจ๋ ํ์ํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
์ค์ต
โฃโฃโฃ ์ค์ต ์ฝ๋ ๋งํฌ ๐
๐ ์๋ฒ๊ฐ ํต์ ํ์ฌ ๋ก๋๋ฐธ๋ฐ์ฑ ์ฒ๋ฆฌ ํ์ธ: Ribbon ์ ์ฉ ์๋ฒ์์ Demo1 ์๋ฒ ํธ์ถ (ํฌํธ๋ฅผ ์ฌ๋ฌ๊ฐ๋ก ์ ์ํ์ฌ ์๋ฒ๋์ฐ๊ธฐ)
• Ribbon ์ ์ฉ ์๋ฒ
# .. gradle ํ์ผ ๋ด ์๋์ ๋ด์ฉ์ ์ถ๊ฐํจ
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.1.4.RELEASE'
→ ๋นจ๊ฐ๋ฐ์ค๋ฅผ ๋ณด๋ฉด, demo1 ์ผ๋ก ๋๋ฉ์ธ์ ์ ์ํด๋์๋ค.
์ด๋ application.yml ์ demo1: ribbon: listOfServers ์ ๋ณด๋ฅผ ํธ์ถํ๋๋ก ํ ๊ฒ์ด๋ค. (๋ด๋ถ์ ์ผ๋ก ์ธํฐ์
ํฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ค๊ณ ํจ)
• Ribbon ์ ์ฉ ์๋ฒ์์ ํธ์ถํ ์๋ฒ ์คํ๊ตฌ์ฑ
...๊ทธ๋ฆฌ๊ณ ํ
์คํธ! (API ํธ์ถ)
๋ก๋๋ฐธ๋ฐ์ฑ ์ฒ๋ฆฌ๊ฐ ๋จ! ์๋ค๊ฐ๋ค,, ์๋ฒ๋ณ API ํธ์ถ ๊ฒฐ๊ณผ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋ค.
ํ์คํธ๋ฆญ์ค (Hystrix)
์ค๋ช
- ๋ถ์ฐ์์คํ
๋ด์์ ์๋น์ค ๊ฐ์ ์ก์ธ์ค ์ง์ ์ ๊ฒฉ๋ฆฌํ๊ณ , ์๋น์ค ์ ๋ฐ์ ๊ฑธ์ณ ๊ณ๋จ์ ์ค๋ฅ๋ฅผ ์ค์งํ๊ณ , ํด๋ฐฑ ์ต์
์ ์ ๊ณตํ์ฌ ์ด๋ฅผ ์ํ
- RxJava ์ ์ํด ๋ง๋ค์ด์ง
- Failure as a First class citizen
→ ๋ถ์ฐ์์คํ
์์๋ ์คํจ๋ฅผ 1๊ธ ์๋ฏผ์ผ๋ก ๊ฐ์ฃผ.
- ๋์ด์ ์
๊ทธ๋ ์ด๋๋ฅผ ํ์ง ์์.
์ค์ต
โฃโฃโฃ ์ค์ต ์ฝ๋ ๋งํฌ ๐
๐ฅ ์๋ฒ(PirServer → Demo1Server ํธ์ถ)๊ฐ ํต์ ์ค, ์๋ฌ๋ฐ์ ์ ๋
1๏ธโฃ Hystrix ๋ฏธ์ ์ฉ: ์๋ฌ ๋
ธ์ถ ํ์ธ
2๏ธโฃ Hystrix ์ ์ฉ: @HystrixCommand ๋ฐ fallback ์ ์ฉ
@HystrixCommand
- ๋ฉ์๋ ํธ์ถ์ ๋ฉ์๋ ์คํ ์ฑ๊ณต/์คํจ ๊ฒฐ๊ณผ๋ฅผ ํต๊ณ๋
- ํต๊ณ์ ๋ฐ๋ผ ์ํท ์คํ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ณ ์กฐ์นํจ.
โป ์ํท ์คํ
์ฃผ์ด์ง ์๊ฐ๋์ ํธ์ถ์ ํ / ์๋ฌ๋ฐํ ํจ
์กฐ๊ธฐ์ฐจ๋จํ์ฌ ๋ณธ์ธ์ ๋ณดํธํจ
- ์ ์ํด๋์ ๋ชจ๋ ๋ฉ์๋๋ ์ ํด์ง ์๋ต์๊ฐ ๋ด์ ๋ฐํ๋์ด์ผ ํจ. ๊ทธ๋ ์ง ์์ผ๋ฉด Exception ๋ฐ์ & fallback ์ ์ ์ํ
โญ๏ธ Hystrix ๋ณด๋จ Resilience4j ์ ์ฌ์ฉํ๋๊ฒ์ด ์ข์.
- Resilience4j ๊ฐ Java8 ์ง์ ๋ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํด์ค๋ค๊ณ ํจ.
์ฐธ๊ณ
์ฑ
: ๋ง์คํฐ๋ง ์คํ๋ง ํด๋ผ์ฐ๋
๋งํฌ: https://www.youtube.com/watch?v=K4laj5cDYLg&list=PL9mhQYIlKEhdtYdxxZ6hZeb0va2Gm17A5&index=5
'๊ฐ๋ฐ > spring-cloud' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Cloud] ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ (0) | 2022.04.25 |
---|---|
[Spring Cloud] ์คํ๋ง ํด๋ผ์ฐ๋ ๊ฐ์ + ์ฃผ์ ํ๋ก์ ํธ ์ ๋ฆฌ (0) | 2022.04.08 |
[Spring Cloud] ์คํ๋ง ํด๋ผ์ฐ๋ ๊ด๋ จ๋ด์ฉ ์ ๋ฆฌ (0) | 2022.03.26 |
[Spring Cloud] ๋ง์ดํฌ๋ก ์๋น์ค (0) | 2022.03.26 |