2PC
Two Phase Commit
2PCμ κ°μ
2PC μ μ
λΆμ° μ»΄ν¨ν νκ²½μμ μμμ± λ³΄μ₯μ μν΄ νΈλμμ μ κ΄λ ¨λ λͺ¨λ λ°μ΄ν°λ² μ΄μ€ λ Έλκ° μ±κ³΅μ μΌλ‘ μμ λμμμ κ΄λ¦¬νλ κΈ°μ
2PCμ νμμ±
- λΆμ° λ°μ΄ν°λ² μ΄μ€ νκ²½μμλ λ¨μΌ λ Έλλ³ Commitκ³Ό Rollback μν
- λμ©λνμ λ°λ₯Έ λ°μ΄ν°λ² μ΄μ€ μΈνλΌ μ§μμ νμ₯
- λ°μ΄ν°λ² μ΄μ€ μΈνλΌ νμ₯μΌλ‘ λΆμ° νκ²½μμμ μμμ± λ³΄μ₯ νμ
2PCμ λμ
2PCμ λμ κ°λ λ
- ν¬κ² Prepareμ Commit λ¨κ³λ‘ λλ μ μμ

2PCμ ꡬμ±μμ
| ꡬμ±μμ | μ€λͺ |
|---|---|
| μλ²(Server) | μ격 λ Έλμμ μꡬνλ λ°μ΄ν°λ₯Ό κ°κ³ μλ λ Έλ |
| μ‘°μ μ(Coordinator) | λΆμ° νΈλμμ μ°Έμ¬μ λͺ©λ‘μ κ΄λ¦¬νκ³ Global commit λ±μ μ ν λ° μ μ΄νλ λ Έλ |
| μ°Έμ¬μ(Participant) | λΆμ° νΈλμμ μμ μ§μ νΈλμμ μ μννλ λ Έλ |
| ν΄λΌμ΄μΈνΈ(Client) | λΆμ° νΈλμμ μ λ°μμν€λ μμ© νλ‘κ·Έλ¨μ΄ μμΉν λ Έλ |
2PCμ νλ‘μΈμ€
- μ‘°μ μλ μ΅μ΄ μꡬμ μ°κ³λμ΄, κ΄λ ¨λ λͺ¨λ μ»΄ν¨ν°λ€μ λμ νμ¬ νΈλμμ μ μ‘°μ
- μ‘°μ μλ βνΈλμμ μμβμ΄λΌλ λ΄μ©μ λ‘κ·Έ νμΌμ κΈ°μ¬νκ³ , κ΄λ ¨λ λ€λ₯Έ μ»΄ν¨ν°λ€μκ² νΈλμμ μμ²
- μ°Έμ¬μλ€μ μμ μ λ‘κ·Έμ νΈλμμ μ κΈ°μ¬νκ³ , λ€λ₯Έ μ¬μ©μκ° μΈ μ μλλ‘ λ°μ΄ν°λ² μ΄μ€ μμμ Lockλ₯Ό κ±Έμ΄ λ°μ΄ν°λ² μ΄μ€ λ³κ²½μ μν
- μ°Έμ¬μλ€μ μ‘°μ μμκ² βμ»€λ―ΈνΈ ν μ€λΉκ° λμλ€βλ λ©μμ§λ₯Ό μ‘μ
- μ‘°μ μλ βμ»€λ―ΈνΈ ν μ€λΉκ° λμλ€βλ λ©μμ§λ₯Ό λ°μ λ€μ, νΈλμμ μ΄ μ’ λ£λμλ€λ μ¬μ€μ λ‘κ·Έ νμΌμ κΈ°μ¬
- μ‘°μ μλ μ°Έμ¬μλ€μκ² νΈλμμ μ μ»€λ―ΈνΈ νλΌκ³ ν΅λ³΄
- μ°Έμ¬μλ€μ μ΄ μ¬μ€μ νΈλμμ λ‘κ·Έ λ΄μ κΈ°λ‘ν λ€μ, μμμ κ±Έλ €μλ Lock ν΄μ
- λ§μ½ μ°Έμ¬μλ€μ΄ νΈλμμ μ μ»€λ―ΈνΈ νκΈ° μ μ μ΄λ μκ°μ νλ μ΄μμ μ»΄ν¨ν°μμ λ¬Έμ κ° λ°μνλ©΄, κ΄λ¦¬ νλ‘κ·Έλ¨μ νΈλμμ μ΄ μμλκΈ° μ μ μνλ‘ λλ리λλ‘ Rollback λ©μμ§λ₯Ό μ ν
2PC λ¨κ³λ³ 주체μ μνκ³Όμ
| λ¨κ³ | μ‘°μ μ(Coordinator) | μ°Έμ¬μ(Participant) |
|---|---|---|
| 1λ¨κ³ Prepare | Prepare λ©μμ§λ₯Ό κ° μ°Έμ¬μμ μ‘μ λͺ¨λ μ°Έμ¬μμ μλ΅(y/n) μμ§ μλ΅ μμΌλ©΄ νμμμ, noμΌλ‘ κ°μ£Ό |
Prepare λ©μμ§λ₯Ό waiting νΈλμμ μ€λΉλλ©΄ yes μ λ¬ μ€λΉλμ§ λͺ»νλ μνμ΄λ©΄ no μ λ¬ |
| 2λ¨κ³ Commit | λͺ¨λ μ°Έμ¬μκ° μ€λΉμν yesμ΄λ©΄ commit μ‘μ νλλΌλ noμ΄λ©΄ rollback μ‘μ |
μ‘°μ μμ commit/rollbackμ waiting μ‘°μ μκ° λ³΄λ΄μ¨ κ²°κ³Όλλ‘ μ¬λ°λ₯΄κ² μν μνμλ£ λ©μμ§ μ‘μ |