MSA ์ง์ค ํน์ ๊ฑฐ์ง - ์ด์ ์ด๋
What is MSA?
-
- ๋จ์ผ ํ๋ก์ธ์ค
- ๋ณ๊ฒฝ์ฃผ๊ธฐ๊ฐ ํ๋๋ก ๋ฌถ์ฌ์์
- ์ํ๋ ๊ฒ๋ง Update ๋ถ๊ฐ๋ฅ
-
-
์๋น์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๋ฐ ํ์ฅ ๊ฐ๋ฅ
-
๋ถ๋ฆฌ๋ ํ์ ์ํด์ ๊ด๋ฆฌ
- Conwayโs Law : ์์คํ ๊ตฌ์กฐ๋ ์ค๊ณํ๋ ์กฐ์ง์ ์ปค๋ฎค๋์ผ์ด์ ๊ตฌ์กฐ๋ฅผ ๋ฎ๊ฒ ๋๋ค.
- ํผ์ ๋ ํ์ ๋จน์ ํํฌ๊ธฐ
-
ํด๋ฆฌ๊ทธ๋(polyglot) : ์ฌ๋ฌ๊ฐ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ
- ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์์ฑ ๊ฐ๋ฅ
- Gateway๋ Nodejs๋ก ์์ฑํ ์ ์๋ค.
- Backend๋ Java๋ก ์์ฑํ ์ ์๋ค.
- ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์์ฑ ๊ฐ๋ฅ
-
ํจ๊ป ๋์ํ๋ ์๊ณ ์์จ์ ์ธ ์๋น์ค
-
์๋น์ค ๋น ํ๋์ ์ฝ๋๋ฒ ์ด์ค
-
ํน์ฑ
- ๋น์ฆ๋์ค ์ญ๋์ ์ค์ฌ์ผ๋ก ์กฐ์งํ
- ์ค๋งํธ ์๋ํฌ์ธํธ์ ๋คํ(dumb) ํ์ดํ
- ๋ถ์ฐ๋ ๊ฑฐ๋ฒ๋์ค
- ๋ถ์ฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- ์ฅ์ ๋ฅผ ๊ณ ๋ คํ ์ค๊ณ(Design for failure)
- Component๊ฐ Healthํ์ง ์๋ค๋ฉด?
- failover
- ์ฅ์ ๋ฅผ ๊ณ ๋ คํ์ฌ ์ค๊ณ ํ ๊ฒ.
- ์ธํ๋ผ ์๋ํ
- ์งํํ๋ ํํ์ ๋์์ธ
-
๊ทธ๋ฌ๋?
- ์ชผ๊ฐ๊ณ ์ชผ๊ฐ๊ณ ์ชผ๊ฐ๋ค ๋ณด๋ฉด. ํํธํ
- Dead Star
- ์ด๋ป๊ฒ ์ด MSA๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ๊ฒ์ธ๊ฐ?
-
-
Service Framework
- Spring Cloud Netflix
- ๋ถ์ฐ๋ ์๋น์ค๋ค์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ ๊ฑฐ์ผ?
- Zuul & Ribbon
- Zuul ๊ด๋ จ ๊ธ
- API Gateway Pattern
- hop ์๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ
- Security
- Auditing
- Routing
- Protocol Transaction
- ๋ด๋ถ ํต์ ์ ์ํด API ๊ฒ์ดํธ ์์ด ํต์ ?
- ์๋น์ค ๋ฑ๋ก ๋ฐ ๊ฑด๊ฐ์ํ ํ์ธ?
- Eureka
- ์๋น์ค๋ ์์ฒญ๋๊ฒ ๋ง๋ค.
- ๋์ ์ผ๋ก ์๋น์ค ๋ผ์ฐํ ์ ์ํ Self-๋ฑ๋ก ๋ฐ ๊ฒ์
- Service Registry Discovery Pattern
- Spring Annotation ์ง์
- Health Check
- ์ฅ์ ๋ฅผ ์ด๋ป๊ฒ ๊ณ ๋ คํ ๊ฑฐ์ผ?
- Circuit breaker Pattern - ํด์
- Fallback Pattern
- Timeout๋ ๋๊น์ง ์์ผ๋ฉด ์๋๋ค.
- Timeout์ด ๋ ๋๊น์ง Thread๋ ๊ณ์์ ์ผ๋ก ์์ฑ๋๊ณ
- ๊ทธ๋ฌ๋ค ๋ณด๋ฉด ์๋ฒ๋ ๋๋ ค์ง๊ฑฐ๋ ์ฃฝ๊ฑฐ๋..
- Iโm Dead๋ผ๋ ์ฌ์ค์ API Gateway์๊ฒ ๋น ๋ฅด๊ฒ ์๋ ค์ผ ํ๋ค.
- Monitoring and Tracing
- ๋ถ์ฐ ์๋น์ค ์์๋๋ ์๊ฐ Tracking
-
์ํคํ ์ฒ๋ ๋ฌธ์ ํด๊ฒฐ์ ์ํ ๊ฒ
- ์ข์ ์ํคํ
์ฒ๋?
- ์์คํ ์ด ํน์ ๋ชฉ์ ์ ๋ถํฉํ๋์ง ํ์ธ
- ํ์ค์ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ์ ํด๊ฒฐํ ์ ์๋๊ฐ๋ฅผ ํ๊ฐ
- ํ์ง ๋ฐ Trade Off ํฌ์ธํธ - ์ฅ์ /๋จ์
- ์ข์ ์ํคํ
์ฒ๋?
-
MSA๊ฐ ์ ๋ต์ผ๊น์?
- ์ ๋ต์ ์๋๋ค.
- ๋งํด ํ์ธ๋ฌ์ MSA Trade-Offs
- ์ฑ๋ฅ์ด ์ข์ง์๋ค.
- ์ ํ์ฑ์ด ์ข์ง์๋ค.
- ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์.
-
์คํํธ์ ์ ์ผ๋ฐ์ ์ธ ํ์ค
- ์๋น์ค์ ๋ณต์ก์ฑ์ด ๋ฎ์.
- ๊ฐ๋ฐ์ ์ง์คํด์ผ ํจ.
- ์ ๋ง ๊ฐ๋ฐ์๋ง ์ง์คํ๊ณ ์๋๊ฐ?
- ์๋น์ค์ ๊ธ๊ฒฉํ ํฝ์ฐฝ์ ๊ธฐ๋
- ์์ฃฝ๋ ์๋น์ค
- ๊ณ ๊ฐ์ฉ์ฑ
- ๋ฒ์ ผ๊ด๋ฆฌ ๋ฐ ๋ฌด์ค๋จ ๋ฐฐํฌ
- ์งฑ์งฑํ ์๋น์ค
- ์๋ ํ์ฅ(Auto Scaling)
- A/B ํ ์คํธ
- ์์ฌ์ด ๋น๋๊ธฐ ์๋น์ค ์ฐ๊ฒฐ
- ์์ด ์ ๊ฒ๋๋ ์๋น์ค
- ํตํฉ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น ์๋
- ์๋ํ๋ ๋ฐฐํฌ ๊ด๋ฆฌ
- No-ops or serverless
Microservice Architecture in Action - ์กฐ๋ณ์ฑ๋
-
- ๊ตฌํํ๋ ํ์ ๋ฐ๋ผ๊ฐ๋ค.
- ํ ๊ตฌ์ฑ์ ์ํด์ผํ๋ค.
-
Netflix
- ์ํคํ ์ณ ๊ณต๊ฐ๋ฅผ ๋ง์ดํจ.
- Netflix ๋ฐฐํฌ ๊ด๋ จ ๊ธ
-
Circuit Breaker
- Circuit Open
- ์ฅ์ ์ ํ ๋ฐฉ์งํ๊ธฐ
- Fallback Pattern
- Hystrix
-
Spring - Netflix
- Annotation ์ง์
-
Distributed Transaction trace
- APM - ์ ๋ํผ
- Zipkin
- ๊ตฌ๊ฐ ์ฌ์ฉํ๋ ์๊ฐ ํ์ธ ๊ฐ๋ฅ
- Trace id, Span id ํ์ธ ๊ฐ๋ฅ
- Spring Cloud Sleuth
- Custum
- Start : Servlet Filter
- End : RESTtemplate
-
- HTTP, HTTP2, gRPC ์ง์
- Lua engine
- Redis
- ์๋ฒ 1000๋๊ฐ ๋์ผ๋ฉด ์ด๋ป๊ฒ ํ ๊น?
- istio Auth
- Mixer - ์ ์ฑ ํ์ธ
- Pilot
- Link
-
- Bakering new Image
- Ansible
- Packer - Platform์ ๋ง๊ฒ image๋ฅผ Bakering
- Spinnaker
- Phoenix Server Pattern์ ์ ๊ณตํ๋ ํ๋ ์์ํฌ
- Server Group ๋ณ๊ฒฝ
- Multi Cloud ์ง์
- Execution window : ํน์ ์๊ฐ๋์ ํน์ Task๋ง ํ ์ ์๊ฒ ์ง์ ๊ฐ๋ฅ
- Manual Judgements
- Manual Rollbacks
- Red/black
- ์์๊ฐ์ ์ ์ฒด๋ฅผ ์ด๋์ํจ๋ค.
- ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
- Rolling red/black
- ํ๊ฐ์ฉ ์ด๋์ํจ๋ค.
- ๋ฌธ์ ์๊ธฐ๋ฉด Rollback
- Canary
- ์ผ๋ถ ํธ๋ํฝ๋ง ์ด๋์์ผ ๋ฌธ์ ๊ฐ์งํ๊ธฐ
- Authentication
- LDAP
-
Kubernetes
- VM is heavy
- Docker is light
- Kubernetes : Docker Manager
- sidecar with kubernetes
- Application์ ๋ณ๊ฒฝ
- envoy / zipkin collector / log collector๋ ์ ์ง
- Sidecar Pattern
- Logging
- Proxy
- Configuration
- ์ต์ ๋ฐฐํฌ ๋จ์ : Pod
- ip, disk ๊ณต์
- Labels
- instance ์ฝ๊ฒ ๊ตฌ๋ณํ๋ ๊ธฐ๋ฅ
-
How to make Good Team?
- ์๋ ์์๋๋ก ์งํํ๋๊ฒ ์ข๋ค.
- Clean Code
- Good Design
- Developer Written Automated Tests
- MSA
- Domain Driven Design
-
Book
- Site Reliability Engineering
- Google Cloud Korea
๋ฅ๋ฌ๋์ ์ฌ์ฉํ ๋ก๊ทธ ๊ธฐ๊น๋๊ฒ ์ ๋์์ธํ๊ธฐ - ๋ฐฑ์ ์๋
- Little Big Data ๋ฐํ์๋ฃ์์ ๋น์ทํ์ฌ ๋งํฌ๋ฅผ ๋ฐ๋ก ๋จ๊น๋๋ค.
- Link
Google ML API๋ก Chatbot ๊ฐ์ง๋๊ฒ ๋ง๋ค๊ธฐ - Jerry Jeong๋
- ์ธํฐํ์ด์ค์ ๋ณํ SNS โ ๋ฉ์ ์
- ๋ง์ ๋น์ฆ๋์ค๋ฅผ ๋ฉ์ ์
- ๋ํ ๋ฐ ์์ฑ์ ํธ๋ฆฌํจ
- ์ฌ์์ผ ํ๋ค.
๋๋ ๋ฌด์์ ์ป์๋๊ฐ?
- Microservice์ ๋ํด ์กฐ๊ธ ๋ ์ดํดํ ์ ์์๋ ์๋ฆฌ์์ต๋๋ค.
- ๋ฌด์๋ณด๋ค ๋ด๊ฐ ๊ฒฝํํ๋ ๋ฌธ์ ์ ๋น์ทํ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ๊ทธ๋ค์ ์ด๋ป๊ฒ ํด๊ฒฐํ์๋์ง ์ ์ ์์๋ ๊ณ๊ธฐ์์ต๋๋ค.
- ๋๋์ ๋ง์ ์๋ฒ๋ฅผ ๊ด๋ฆฌํด์ผํ๊ณ ๋ฐฐํฌํ๋ ๋ฌธ์ ๋ ๊ฒฝํํด๋ณด์ง ๋ชปํ์ง๋ง ๊ฐ์ ์ ์ผ๋ก ๊ฒฝํํ๋ ์ข์ ์๋ฆฌ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
- ๊ด๋ จ Framework์ Pattern๋ค์ด ๋๋ฌด ๋ง์ ์์ผ๋ก ์ฒ์ฒํ ์ฐพ์๋ด์ผ๊ฒ ๋ค..
- ๋ฌด์๋ณด๋ค Martin Fowler.. ์ด ๋ถ์ ํ๋์์ ๋ด๋ ค์ค์ จ๋๋ณด๋ค.