Two Phase Commit

2PC의 κ°œμš”

2PC μ •μ˜

λΆ„μ‚° μ»΄ν“¨νŒ… ν™˜κ²½μ—μ„œ μ›μžμ„± 보μž₯을 μœ„ν•΄ νŠΈλžœμž­μ…˜μ— κ΄€λ ¨λœ λͺ¨λ“  λ°μ΄ν„°λ² μ΄μŠ€ λ…Έλ“œκ°€ μ„±κ³΅μ μœΌλ‘œ μˆ˜μ • λ˜μ—ˆμŒμ„ κ΄€λ¦¬ν•˜λŠ” 기술

2PC의 ν•„μš”μ„±

  • λΆ„μ‚° λ°μ΄ν„°λ² μ΄μŠ€ ν™˜κ²½μ—μ„œλŠ” 단일 λ…Έλ“œλ³„ Commitκ³Ό Rollback μˆ˜ν–‰
  • λŒ€μš©λŸ‰ν™”μ— λ”°λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€ 인프라 지속적 ν™•μž₯
  • λ°μ΄ν„°λ² μ΄μŠ€ 인프라 ν™•μž₯으둜 λΆ„μ‚° ν™˜κ²½μ—μ„œμ˜ μ›μžμ„± 보μž₯ ν•„μš”

2PC의 λ™μž‘

2PC의 λ™μž‘ κ°œλ…λ„

  • 크게 Prepare와 Commit λ‹¨κ³„λ‘œ λ‚˜λˆŒ 수 있음 2PC

2PC의 κ΅¬μ„±μš”μ†Œ

κ΅¬μ„±μš”μ†Œ μ„€λͺ…
μ„œλ²„(Server) 원격 λ…Έλ“œμ—μ„œ μš”κ΅¬ν•˜λŠ” 데이터λ₯Ό κ°–κ³  μžˆλŠ” λ…Έλ“œ
μ‘°μ •μž(Coordinator) λΆ„μ‚° νŠΈλžœμž­μ…˜ μ°Έμ—¬μž λͺ©λ‘μ„ κ΄€λ¦¬ν•˜κ³  Global commit 등을 μ „νŒŒ 및 μ œμ–΄ν•˜λŠ” λ…Έλ“œ
μ°Έμ—¬μž(Participant) λΆ„μ‚° νŠΈλžœμž­μ…˜μ—μ„œ μ§€μ—­ νŠΈλžœμž­μ…˜μ„ μˆ˜ν–‰ν•˜λŠ” λ…Έλ“œ
ν΄λΌμ΄μ–ΈνŠΈ(Client) λΆ„μ‚° νŠΈλžœμž­μ…˜μ„ λ°œμƒμ‹œν‚€λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μœ„μΉ˜ν•œ λ…Έλ“œ

2PC의 ν”„λ‘œμ„ΈμŠ€

  1. μ‘°μ •μžλŠ” 졜초 μš”κ΅¬μ— μ—°κ³„λ˜μ–΄, κ΄€λ ¨λœ λͺ¨λ“  컴퓨터듀을 λŒ€μ‹ ν•˜μ—¬ νŠΈλžœμž­μ…˜μ„ μ‘°μ •
  2. μ‘°μ •μžλŠ” β€œνŠΈλžœμž­μ…˜ μ‹œμž‘β€μ΄λΌλŠ” λ‚΄μš©μ„ 둜그 νŒŒμΌμ— κΈ°μž¬ν•˜κ³ , κ΄€λ ¨λœ λ‹€λ₯Έ μ»΄ν“¨ν„°λ“€μ—κ²Œ νŠΈλžœμž­μ…˜ μš”μ²­
  3. μ°Έμ—¬μžλ“€μ€ μžμ‹ μ˜ λ‘œκ·Έμ— νŠΈλžœμž­μ…˜μ„ κΈ°μž¬ν•˜κ³ , λ‹€λ₯Έ μ‚¬μš©μžκ°€ μ“Έ 수 없도둝 λ°μ΄ν„°λ² μ΄μŠ€ μžμ›μ— Lockλ₯Ό κ±Έμ–΄ λ°μ΄ν„°λ² μ΄μŠ€ 변경을 μˆ˜ν–‰
  4. μ°Έμ—¬μžλ“€μ€ μ‘°μ •μžμ—κ²Œ β€œμ»€λ―ΈνŠΈ ν•  μ€€λΉ„κ°€ λ˜μ—ˆλ‹€β€λŠ” λ©”μ‹œμ§€λ₯Ό 솑신
  5. μ‘°μ •μžλŠ” β€œμ»€λ―ΈνŠΈ ν•  μ€€λΉ„κ°€ λ˜μ—ˆλ‹€β€λŠ” λ©”μ‹œμ§€λ₯Ό 받은 뒀에, νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλ˜μ—ˆλ‹€λŠ” 사싀을 둜그 νŒŒμΌμ— 기재
  6. μ‘°μ •μžλŠ” μ°Έμ—¬μžλ“€μ—κ²Œ νŠΈλžœμž­μ…˜μ„ 컀미트 ν•˜λΌκ³  톡보
  7. μ°Έμ—¬μžλ“€μ€ 이 사싀을 νŠΈλžœμž­μ…˜ 둜그 내에 κΈ°λ‘ν•œ λ‹€μŒ, μžμ›μ— 걸렀있던 Lock ν•΄μ œ
  8. λ§Œμ•½ μ°Έμ—¬μžλ“€μ΄ νŠΈλžœμž­μ…˜μ„ 컀미트 ν•˜κΈ° μ „μ˜ μ–΄λŠ μˆœκ°„μ— ν•˜λ‚˜ μ΄μƒμ˜ μ»΄ν“¨ν„°μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄, 관리 ν”„λ‘œκ·Έλž¨μ€ νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘λ˜κΈ° μ „μ˜ μƒνƒœλ‘œ λ˜λŒλ¦¬λ„λ‘ Rollback λ©”μ‹œμ§€λ₯Ό μ „νŒŒ

2PC 단계별 주체의 μˆ˜ν–‰κ³Όμ •

단계 μ‘°μ •μž(Coordinator) μ°Έμ—¬μž(Participant)
1단계 Prepare Prepare λ©”μ‹œμ§€λ₯Ό 각 μ°Έμ—¬μžμ— 솑신
λͺ¨λ“  μ°Έμ—¬μžμ˜ 응닡(y/n) μˆ˜μ§‘
응닡 μ—†μœΌλ©΄ νƒ€μž„μ•„μ›ƒ, no으둜 κ°„μ£Ό
Prepare λ©”μ‹œμ§€λ₯Ό waiting
νŠΈλžœμž­μ…˜ μ€€λΉ„λ˜λ©΄ yes 전달
μ€€λΉ„λ˜μ§€ λͺ»ν•˜λŠ” μƒνƒœμ΄λ©΄ no 전달
2단계 Commit λͺ¨λ“  μ°Έμ—¬μžκ°€ μ€€λΉ„μƒνƒœ yes이면 commit 솑신
ν•˜λ‚˜λΌλ„ no이면 rollback 솑신
μ‘°μ •μžμ˜ commit/rollback을 waiting
μ‘°μ •μžκ°€ λ³΄λ‚΄μ˜¨ κ²°κ³ΌλŒ€λ‘œ μ˜¬λ°”λ₯΄κ²Œ μˆ˜ν–‰
μˆ˜ν–‰μ™„λ£Œ λ©”μ‹œμ§€ 솑신

μΉ΄ν…Œκ³ λ¦¬: