MSA ์ง„์‹ค ํ˜น์€ ๊ฑฐ์ง“ - ์ด์ •์šด๋‹˜

What is MSA?

  • Monolithic Architecture

    • ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค
    • ๋ณ€๊ฒฝ์ฃผ๊ธฐ๊ฐ€ ํ•˜๋‚˜๋กœ ๋ฌถ์—ฌ์žˆ์Œ
      • ์›ํ•˜๋Š” ๊ฒƒ๋งŒ Update ๋ถˆ๊ฐ€๋Šฅ
  • Microservices

    • ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๋ฐ ํ™•์žฅ ๊ฐ€๋Šฅ

    • ๋ถ„๋ฆฌ๋œ ํŒ€์— ์˜ํ•ด์„œ ๊ด€๋ฆฌ

    • ํด๋ฆฌ๊ทธ๋ž(polyglot) : ์—ฌ๋Ÿฌ๊ฐœ์˜ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

      • ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ž‘์„ฑ ๊ฐ€๋Šฅ
        • Gateway๋Š” Nodejs๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
        • Backend๋Š” Java๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š” ์ž‘๊ณ  ์ž์œจ์ ์ธ ์„œ๋น„์Šค

    • ์„œ๋น„์Šค ๋‹น ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค

    • ํŠน์„ฑ

      • ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰์„ ์ค‘์‹ฌ์œผ๋กœ ์กฐ์งํ™”
      • ์Šค๋งˆํŠธ ์—”๋“œํฌ์ธํŠธ์™€ ๋คํ”„(dumb) ํŒŒ์ดํ”„
      • ๋ถ„์‚ฐ๋œ ๊ฑฐ๋ฒ„๋„Œ์Šค
      • ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
      • ์žฅ์• ๋ฅผ ๊ณ ๋ คํ•œ ์„ค๊ณ„(Design for failure)
        • Component๊ฐ€ Healthํ•˜์ง€ ์•Š๋‹ค๋ฉด?
        • failover
        • ์žฅ์• ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„ ํ•  ๊ฒƒ.
      • ์ธํ”„๋ผ ์ž๋™ํ™”
      • ์ง„ํ™”ํ•˜๋Š” ํ˜•ํƒœ์˜ ๋””์ž์ธ
    • ๊ทธ๋Ÿฌ๋‚˜?

      • ์ชผ๊ฐœ๊ณ  ์ชผ๊ฐœ๊ณ  ์ชผ๊ฐœ๋‹ค ๋ณด๋ฉด. ํŒŒํŽธํ™”
      • Dead Star
      • ์–ด๋–ป๊ฒŒ ์ด MSA๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?

  • Service Framework

    • Spring Cloud Netflix
    • ๋ถ„์‚ฐ๋œ ์„œ๋น„์Šค๋“ค์„ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ• ๊ฑฐ์•ผ?
    • ์„œ๋น„์Šค ๋“ฑ๋ก ๋ฐ ๊ฑด๊ฐ•์ƒํƒœ ํ™•์ธ?
      • 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๊ฐ€ ์ •๋‹ต์ผ๊นŒ์š”?

  • ์Šคํƒ€ํŠธ์—…์˜ ์ผ๋ฐ˜์ ์ธ ํ˜„์‹ค

    • ์„œ๋น„์Šค์˜ ๋ณต์žก์„ฑ์ด ๋‚ฎ์Œ.
    • ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•ด์•ผ ํ•จ.
      • ์ •๋ง ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€?
    • ์„œ๋น„์Šค์˜ ๊ธ‰๊ฒฉํ•œ ํŒฝ์ฐฝ์„ ๊ธฐ๋Œ€
    • ์•ˆ์ฃฝ๋Š” ์„œ๋น„์Šค
      • ๊ณ ๊ฐ€์šฉ์„ฑ
      • ๋ฒ„์ ผ๊ด€๋ฆฌ ๋ฐ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ
    • ์งฑ์งฑํ•œ ์„œ๋น„์Šค
      • ์ž๋™ ํ™•์žฅ(Auto Scaling)
      • A/B ํ…Œ์ŠคํŠธ
      • ์†์‰ฌ์šด ๋น„๋™๊ธฐ ์„œ๋น„์Šค ์—ฐ๊ฒฐ
    • ์†์ด ์ ๊ฒŒ๋“œ๋Š” ์„œ๋น„์Šค
      • ํ†ตํ•ฉ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น… ์•Œ๋žŒ
      • ์ž๋™ํ™”๋œ ๋ฐฐํฌ ๊ด€๋ฆฌ
      • No-ops or serverless

Microservice Architecture in Action - ์กฐ๋ณ‘์šฑ๋‹˜

  • Conwayโ€™s Law

    • ๊ตฌํ˜„ํ•˜๋Š” ํŒ€์„ ๋”ฐ๋ผ๊ฐ„๋‹ค.
    • ํŒ€ ๊ตฌ์„ฑ์„ ์ž˜ํ•ด์•ผํ•œ๋‹ค.
  • 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
  • Envoy Proxy

    • HTTP, HTTP2, gRPC ์ง€์›
    • Lua engine
      • Redis
    • ์„œ๋ฒ„ 1000๋Œ€๊ฐ€ ๋„˜์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?
      • istio Auth
      • Mixer - ์ •์ฑ…ํ™•์ธ
      • Pilot
      • Link
  • Phoenix Server Pattern

    • 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

๋”ฅ๋Ÿฌ๋‹์— ์‚ฌ์šฉํ•  ๋กœ๊ทธ ๊ธฐ๊น”๋‚˜๊ฒŒ ์ž˜ ๋””์ž์ธํ•˜๊ธฐ - ๋ฐฑ์ •์ƒ๋‹˜

  • Little Big Data ๋ฐœํ‘œ์ž๋ฃŒ์™€์™€ ๋น„์Šทํ•˜์—ฌ ๋งํฌ๋ฅผ ๋”ฐ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค.
  • Link

Google ML API๋กœ Chatbot ๊ฐ„์ง€๋‚˜๊ฒŒ ๋งŒ๋“ค๊ธฐ - Jerry Jeong๋‹˜

  • ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ณ€ํ™” SNS โ†’ ๋ฉ”์‹ ์ €
  • ๋งŽ์€ ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ๋ฉ”์‹ ์ €
    • ๋Œ€ํ™” ๋ฐ ์Œ์„ฑ์˜ ํŽธ๋ฆฌํ•จ
    • ์‰ฌ์›Œ์•ผ ํ•œ๋‹ค.

๋‚˜๋Š” ๋ฌด์—‡์„ ์–ป์—ˆ๋Š”๊ฐ€?

  • Microservice์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ž๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค.
  • ๋ฌด์—‡๋ณด๋‹ค ๋‚ด๊ฐ€ ๊ฒฝํ—˜ํ–ˆ๋˜ ๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ๊ทธ๋“ค์€ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜์˜€๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ณ„๊ธฐ์˜€์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๋Ÿ‰์˜ ๋งŽ์€ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๋ฌธ์ œ๋Š” ๊ฒฝํ—˜ํ•ด๋ณด์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ฒฝํ—˜ํ•˜๋Š” ์ข‹์€ ์ž๋ฆฌ์˜€๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ จ Framework์™€ Pattern๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„ ์•ž์œผ๋กœ ์ฒœ์ฒœํžˆ ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค..
  • ๋ฌด์—‡๋ณด๋‹ค Martin Fowler.. ์ด ๋ถ„์€ ํ•˜๋Š˜์—์„œ ๋‚ด๋ ค์˜ค์…จ๋‚˜๋ณด๋‹ค.

Reference