Synchronous vs Asynchronous Communication

톡신 방식은 크게 동기식(Synchronous)κ³Ό 비동기식(Asynchronous)으둜 λ‚˜λ‰˜λ©°, 이 λ‘˜μ˜ 선택은 μ‹œμŠ€ν…œ μ „μ²΄μ˜ μ„±λŠ₯, 결합도, 그리고 μž₯μ•  λŒ€μ‘ 방식에 결정적인 영ν–₯을 λ―ΈμΉœλ‹€.

동기식 톡신(Synchronous Communication)

동기식 톡신은 μš”μ²­μ„ 보낸 μ„œλΉ„μŠ€κ°€ 응닡을 받을 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬λŠ”(Blocking) λ°©μ‹μœΌλ‘œ, κ°„λ‹¨ν•˜μ§€λ§Œ μ•„λž˜μ™€ 같은 ν•œκ³„κ°€ μ‘΄μž¬ν•œλ‹€.

  • κ°•ν•œ κ²°ν•©(Tight Coupling): μš”μ²­ μ„œλΉ„μŠ€(A)λŠ” ν”Όν˜ΈμΆœ μ„œλΉ„μŠ€(B)κ°€ μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜κ³  μžˆλ‹€λŠ” 사싀에 κ°•ν•œ μ˜μ‘΄μ„±μ„ 가짐

  • μž₯μ•  μ „νŒŒ(Cascading Failures): λ§Œμ•½ μ„œλΉ„μŠ€ Bκ°€ λŠλ €μ§€κ±°λ‚˜ μž₯μ• κ°€ λ°œμƒν•˜λ©΄, μ„œλΉ„μŠ€ Bλ₯Ό κΈ°λ‹€λ¦¬λŠ” μ„œλΉ„μŠ€ A μ—­μ‹œ ν•¨κ»˜ λŠλ €μ§€κ±°λ‚˜ μž₯μ• κ°€ λ°œμƒ

  • μžμ› λŒ€κΈ°: μ„œλΉ„μŠ€ AλŠ” 응닡을 κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ μŠ€λ ˆλ“œμ™€ 같은 μžμ›μ„ 계속 점유

동기 ν˜ΈμΆœμ„ κ΅¬ν˜„ν•˜λŠ” 것은 맀우 κ°„λ‹¨ν•˜μ§€λ§Œ, μ‹€λ¬΄μ—μ„œλŠ” μ•„λž˜ 두 가지에 λŒ€ν•œ κ³ λ €κ°€ λ°˜λ“œμ‹œ ν•„μš”ν•˜λ‹€.

  1. νƒ€μž„μ•„μ›ƒ(Timeout) μ„€μ •

    • Connection Timeout: μ„œλΉ„μŠ€ B와 연결을 μ‹œλ„ν•  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬λŠ” μ΅œλŒ€ μ‹œκ°„

    • Read Timeout: 연결은 μ„±κ³΅ν–ˆμœΌλ‚˜, μ„œλΉ„μŠ€ Bκ°€ 데이터λ₯Ό λ°˜ν™˜ν•  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬λŠ” μ΅œλŒ€ μ‹œκ°„

      • λ§Œμ•½ 이 섀정이 μ—†κ±°λ‚˜ λ„ˆλ¬΄ κΈΈλ©΄, μ„œλΉ„μŠ€ B의 지연이 κ·ΈλŒ€λ‘œ μ„œλΉ„μŠ€ A의 μŠ€λ ˆλ“œ 고갈둜 이어져 전체 μ‹œμŠ€ν…œ μž₯μ• λ‘œ ν™•μ‚° κ°€λŠ₯

  2. μž¬μ‹œλ„(Retry) μ •μ±…

    • μ„œλΉ„μŠ€ Bκ°€ 이미 κ³ΌλΆ€ν•˜ μƒνƒœλΌ 응닡이 느린 것이라면, μž¬μ‹œλ„λŠ” 였히렀 λΆ€ν•˜λ₯Ό κ°€μ€‘μ‹œμΌœ μž₯μ•  μ•…ν™” κ°€λŠ₯

      • μ΄λŸ¬ν•œ 동기식 ν†΅μ‹ μ˜ ν•œκ³„μ™€ μž₯μ•  μ „νŒŒλ₯Ό 막기 μœ„ν•΄ 'μ„œν‚· 브레이컀' νŒ¨ν„΄κ³Ό 같은 볡원성 νŒ¨ν„΄ λ„μž… ν•„μš”

비동기식 톡신(Asynchronous Communication)

비동기식 톡신은 μš”μ²­μ„ 보낸 μ„œλΉ„μŠ€κ°€ 응닡을 기닀리지 μ•Šκ³  μ¦‰μ‹œ μžμ‹ μ˜ λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ°©μ‹μœΌλ‘œ, 쀑간 맀개체λ₯Ό λ‘λŠ” 것이 μΌλ°˜μ μ΄λ‹€.

  • λŠμŠ¨ν•œ κ²°ν•©(Loose Coupling): μ„œλΉ„μŠ€ AλŠ” λ©”μ‹œμ§€ λΈŒλ‘œμ»€μ— λ©”μ‹œμ§€λ₯Ό λ°œν–‰(Publish)만 ν•  뿐, μ„œλΉ„μŠ€ Bκ°€ 정상 λ™μž‘ν•˜λŠ”μ§€ μ „ν˜€ μ•Œ ν•„μš” μ—†μŒ

  • μž₯μ•  격리(Isolation): μ„œλΉ„μŠ€ B에 μž₯μ• κ°€ λ°œμƒν•΄λ„ μ„œλΉ„μŠ€ AλŠ” 영ν–₯을 λ°›μ§€ μ•Šκ³  λ©”μ‹œμ§€ λ°œν–‰ κ°€λŠ₯

  • μœ μ—°ν•œ ν™•μž₯μ„±: νŠΉμ • μž‘μ—…(예: μ•Œλ¦Ό λ°œμ†‘)을 μ²˜λ¦¬ν•˜λŠ” 컨슈머 μ„œλΉ„μŠ€λ§Œ λ…λ¦½μ μœΌλ‘œ ν™•μž₯ κ°€λŠ₯

  • λΆ€ν•˜ μ™„μΆ©(Buffering): μˆœκ°„μ μΈ νŠΈλž˜ν”½ 폭증 μ‹œ, μš”μ²­μ„ λΈŒλ‘œμ»€κ°€ λ°›μ•„ μ €μž₯해두고 μ»¨μŠˆλ¨Έκ°€ 처리 κ°€λŠ₯ν•œ μ†λ„λ‘œ 순차 처리둜 μ‹œμŠ€ν…œ μ „μ²΄μ˜ μ•ˆμ •μ„± ν–₯상

λŠμŠ¨ν•œ κ²°ν•©κ³Ό μž₯μ•  κ²©λ¦¬λΌλŠ” 큰 μž₯점이 μžˆμ§€λ§Œ, μ•„λž˜μ™€ 같은 ν•œκ³„λ„ μ‘΄μž¬ν•œλ‹€.

  • λ³΅μž‘μ„± 증가: 쀑간에 λ©”μ‹œμ§€ λΈŒλ‘œμ»€λΌλŠ” λ³„λ„μ˜ μ‹œμŠ€ν…œμ„ λ„μž… 및 운영 ν•„μš”

  • κ²°κ³Ό ν™•μΈμ˜ 어렀움: μš”μ²­μ„ 보낸 μͺ½μ—μ„œ ν•΄λ‹Ή μž‘μ—…μ΄ μ–Έμ œ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆλŠ”μ§€ μ•ŒκΈ° 어렀움

  • μ΅œμ’… 일관성(Eventual Consistency): μ„œλΉ„μŠ€ Aκ°€ 데이터λ₯Ό λ³€κ²½ν•˜κ³  이벀트λ₯Ό λ°œν–‰ν•΄λ„, μ„œλΉ„μŠ€ Bκ°€ 이λ₯Ό μ²˜λ¦¬ν•˜μ—¬ 데이터 일관성을 λ§žμΆ”κΈ°κΉŒμ§€ μ‹œκ°„ μ§€μ—°(Latency) λ°œμƒ

비동기 ν†΅μ‹ μ˜ μ‹ λ’°μ„±

비동기 μ‹œμŠ€ν…œμ„ 섀계할 λ•Œ κ°€μž₯ μ€‘μš”ν•œ 것은 λ©”μ‹œμ§€ μœ μ‹€ 방지와 쀑볡 처리 방지이며, 이에 λŒ€ν•œ λŒ€μ‘ λ°©μ•ˆμ€ λ°˜λ“œμ‹œ κ³ λ €ν•΄μ•Ό ν•œλ‹€.

  1. 전달 보μž₯(Delivery Guarantees)

    • At-most-once(μ΅œλŒ€ ν•œ 번): λ©”μ‹œμ§€λŠ” μ΅œλŒ€ ν•œ 번 전달

      • 브둜컀 μž₯μ•  μ‹œ μœ μ‹€ κ°€λŠ₯

      • μ„±λŠ₯이 μ€‘μš”ν•˜κ³  일뢀 데이터 μœ μ‹€μ΄ ν—ˆμš©λ  λ•Œ μ‚¬μš©

    • At-least-once(μ΅œμ†Œ ν•œ 번): λ©”μ‹œμ§€λŠ” μ ˆλŒ€ μœ μ‹€λ˜μ§€ μ•Šμ§€λ§Œ, 쀑볡 κ°€λŠ₯

      • λŒ€λΆ€λΆ„μ˜ λ©”μ‹œμ§• μ‹œμŠ€ν…œμ΄ 기본으둜 μ±„νƒν•˜λŠ” 방식

      • μ†ŒλΉ„μžκ°€ 쀑볡 λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ„λ‘ λ©±λ“±μ„± 확보 ν•„μš”

    • Exactly-once(μ •ν™•νžˆ ν•œ 번): μ •ν™•νžˆ ν•œ 번만 처리

      • κ΅¬ν˜„μ΄ 맀우 μ–΄λ ΅κ³  큰 λΉ„μš©κ³Ό μ„±λŠ₯ μ €ν•˜ 유발

  2. λ©±λ“±μ„±(Idempotency)

    • λ™μΌν•œ λ©”μ‹œμ§€κ°€ μ—¬λŸ¬ 번 μ²˜λ¦¬λ˜λ”λΌλ„ μ‹œμŠ€ν…œ μƒνƒœμ— 영ν–₯을 μ£Όμ§€ μ•Šλ„λ‘ 섀계

    • 쀑볡 처리λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 'μš”μ²­ ID'λ‚˜ 'νŠΈλžœμž­μ…˜ ID'λ₯Ό κΈ°μ€€μœΌλ‘œ 이미 처리된 μž‘μ—…μΈμ§€ ν™•μΈν•˜λŠ” λ‘œμ§μ„ μ»¨μŠˆλ¨Έμ— κ΅¬ν˜„ ν•„μš”

Last updated

Was this helpful?