Distributed Lock
λΆμ° λ½ (Distributed Lock)
μλ²κ° μ¬λ¬ λμΈ μν©μμ λμΌν λ°μ΄ν°μ λν λκΈ°νλ₯Ό 보μ₯νκΈ° μν΄ μ¬μ©
νμν μ΄μ
μλ²κ° ν λκ° μλλΌ μ¬λ¬ λμΈ κ²½μ°, μ¬λ¬ μλ²λ‘ APIκ° λΆμ° νΈμΆλλ€.
μλ²λ€κ°μ λκΈ°νλ μ²λ¦¬κ° νμνκ³ , μ¬λ¬ μλ²μ 곡ν΅λ λ½μ μ μ©ν΄μΌ νκΈ° λλ¬Έμ redisλ₯Ό μ΄μ©νμ¬ λΆμ° λ½μ μ΄μ©νλ€.
λΆμ° λ½ κ°μ κ²½μ° db λ± κ³΅ν΅λ λ°μ΄ν° μ μ₯μλ₯Ό μ΄μ©ν΄ μμμ΄ μ¬μ©μ€μΈμ§ νμΈνκΈ° λλ¬Έμ μ 체 μλ²μ λκΈ°νλ μ²λ¦¬κ° κ°λ₯νλ€.
μ€ν λ½
Redisμμ λΆμ° λ½μ ꡬνν λ, μ€ν λ½μ λν΄μ λ¨Όμ μμμΌνλ€.
μ€ν½ λ½μ λ€λ₯Έ μ€λ λκ° Lockμ μμ νκ³ μλ€λ©΄ κ·Έ Lockμ΄ λ°νλ λκΉμ§ κ³μ νμΈνλ©° κΈ°λ€λ¦¬λ κ²μ΄λ€.
Lock μ μ μ νλ μκ°μ΄ μ§§μ κ²½μ° μ μ©νμ§λ§ μ€λ λκ° Lock μ μ€λ μ μ§νλ κ²½μ° CPU μ λΆλ΄μ μ€ μ μλ€.
Lockμ νμμμ μ§μ
μ€ν λ½μ ꡬννμ λ, λ€λ₯Έ μ€λ λκ° λ½μ μ μ νλ©΄ λ λ€λ₯Έ μ€λ λλ λ½μ νλν λκΉμ§ νμΈνλ©° κΈ°λ€λ¦°λ€.
μ΄ λ λ§μ½ νΉμ ν μ ν리μΌμ΄μ
μμ tryLockμ μ±κ³΅νλλ° λΆμ΄νκ²λ μ΄λ€ μ€λ₯ λλ¬Έμ μ ν리μΌμ΄μ
μ΄ μ’
λ£λμ΄λ²λ¦¬λ©΄ μ΄λ»κ² λ κΉ?
λ€λ₯Έ λͺ¨λ μ ν리μΌμ΄μ κΉμ§ μμν λ½μ νλνμ§ λͺ»ν μ± λ½μ΄ ν΄μ λκΈ°λ§μ κΈ°λ€λ¦¬λ 무νμ λκΈ°μνκ° λμ΄ μ 체 μλΉμ€μ μ₯μ κ° λ°μνκ² λ κ²μ΄λ€.
κ·Έλμ μΌλ°μ μΈ λ‘컬 μ€ν λ½κ³Όλ λ€λ₯΄κ² μΌμ μκ°μ΄ μ§λλ©΄ λ½μ΄ λ§λ£λλλ‘ κ΅¬νν΄μΌ νλ€.
κ·Έλ΄λ €λ©΄ expire timeμ μ€μ ν΄μ£Όμ΄μΌνλ€.
λν 무νμ μΌλ‘ λ½μ νλμ μλνλ€λ©΄ λ¬Έμ κ° λ μ μλ€.
λ§μ½ μ°μ°μ΄ μ€λ 걸릴 κ²½μ° λλΆλΆμ μ€λ λκ° λ½μ λκΈ°νλ μνκ° λμ΄ ν΄λΌμ΄μΈνΈμ μλ΅νλ μλκ° λ¦μ΄μ§κ³ , λμμ λ λμ€μ μμ²λ νΈλν½μ λ³΄λΌ μ μκΈ° λλ¬Έμ΄λ€.
κ·Έλμ λ½μ νλνλ μ΅λ νμ©μκ°μ μ ν΄μ£Όκ±°λ, μ΅λ νμ© νμλ₯Ό μ ν΄μ£Όλ κ²μ΄ μ’λ€.
λ§μ½ λ½μ νλνλλ°μ μ€ν¨νλ€λ©΄ μ°μ°μ μνν μ μλ μνμ΄κΈ°μ Exceptionμ λμ§λ€.
λ λμ€μ λ§μ λΆν
μμ μ½λλ μ€ν λ½μ μ¬μ©νμ§λ§ μ¬μ€ μ€ν λ½μ μ¬μ©νλ©΄ λ λμ€μ μμ²λ λΆλ΄μ μ£Όκ²λλ€.
μ€ν λ½μ μ§μμ μΌλ‘ λ½μ νλμ μλνλ μμ μ΄κΈ° λλ¬Έμ λ λμ€μ κ³μ μμ²μ 보λ΄κ² λκ³ λ λμ€λ μ΄λ° νΈλν½μ μ²λ¦¬νλλΌ λΆλ΄μ λ°κ² λλ€.
λν μΌνμ±μ΄ μλλΌ λͺ¨λ μμ μ΄ μλ£λ λκΉμ§ μ§μμ μΌλ‘ λ λμ€μ λΆνλ₯Ό κ°νκΈ° λλ¬Έμ μμ²μ΄ μ§μμ μΌλ‘ λ€μ΄μ€λ νκ²½μ΄λΌλ©΄ μ΄λ¬ν λΉν¨μ¨μ±μ λμ± μ»€μ§λ€.
λ§μ½ λ λμ€μ λΆλ΄μ λ μ£ΌκΈ° μν΄ sleep μκ°μ λλ¦°λ€λ©΄ 50msκ° κ±Έλ¦¬λ μμ μ μ΄ λκΈ°νλ₯Ό μ μ©νλ©΄ λ½μ νλνμ§ λͺ»ν κ²½μ° 50ms 걸리λ μμ μ νκΈ° μν΄ 300msλ₯Ό λκΈ°ν΄μΌνλ λ€λ₯Έ λΉν¨μ¨μ μΈ μν©μ΄ μκΈ°κ² λλ€.
RedLock
λ λμ€μμλ λΆμ° λ½μ ꡬννλ λ°©λ²μΌλ‘ RedLock μ΄λΌλ κ°λ μ λν΄μ μ€λͺ νλ€ .
ꡬνμΌλ‘ μλ°μμλ Redission, κ³ μΈμ΄μμλ Redsync, Pythonμμλ PotteryνΉμ Redlock-pyλ₯Ό μ¬μ©νλ€.
Node νκ²½μ΄λΌλ©΄ node-redlockμ μ΄μ©νλ©΄ λ κ²μ΄λ€.
Last updated