GN⁺: 50년 후, two-phase locking이 우리가 할 수 있는 최선인가?
(concurrencyfreaks.blogspot.com)- 본 기사는 약 50년 전에 발명된 일반적인 동시성 제어인 Two-Phase Locking (2PL) 개념에 대해 논의합니다.
- 2PL은 더 강력한 격리 수준인 Serializability와 Opacity를 제공하며, 여러 데이터 항목에 대한 트랜잭션에 사용됩니다.
- 저자는 2PL의 간단함과 강력한 격리 수준이 주요 장점이라고 강조합니다.
- 그러나 2PL은 읽기 확장성이 떨어지고 라이브-락 진행이라는 단점이 있습니다.
- 저자는 2PL의 문제점을 해결하는 새로운 동시성 제어인 Two-Phase Locking Starvation-Free (2PLSF)를 소개합니다.
- 2PLSF는 더 나은 리더-라이터 락을 사용하고, 가장 높은 형태의 블로킹 진행인 기아 상태에서 자유로운 트랜잭션을 제공합니다.
- 2PLSF는 특정 유형의 충돌을 해결하는 데 효과적이어서 일부 충돌이 발생하더라도 확장할 수 있습니다.
- 저자는 2PLSF가 2PL에 비해 크게 개선되었다고 결론 내리며, 이를 잭해머와 곡괭이의 차이에 비교합니다.
- 본 기사에는 2PLSF 알고리즘에 대한 논문과 소스 코드에 대한 링크가 포함되어 있어 추가적인 학습을 위해 참조할 수 있습니다.
Hacker News 의견
- 두 단계 잠금(2PL)에 대한 논의와 그것이 처음 개발된 지 50년 후의 관련성에 대한 기사.
- 한 댓글 작성자가 주제에 대해 초보자이며, 분산 마이크로서비스 아키텍처를 위한 쉽게 배포할 수 있는 일관성 솔루션을 찾고 있음.
- 같은 댓글 작성자가 다중 스레드 멀티프로세싱 환경에서 불확정성을 테스트하는 Python 코드를 공유함.
- 다른 댓글 작성자가 잠금 알고리즘이 필요한지 먼저 고려하고, 동시성과 잠금을 줄이기 위해 요청을 일괄 처리하는 것을 제안함.
- 새로운 접근법이 2PL의 개선된 버전으로 광고되는 직렬화 가능 스냅샷 격리(SSI)와 어떻게 비교되는지에 대한 질문이 제기됨.
- 한 댓글 작성자가 모든 게시된 링크가 HTTPS여야 한다는 새로운 Hacker News 정책이 필요하다고 제안함.
- 2PL이 원래 그래야 했던 것이라고 주장하는 저자의 2PLSF에 대한 논문 링크가 공유됨.
- 원자 작업의 확장성을 향상시키기 위해 무작위 대기열을 추가하는 것이 제안됨.
- Wait-Or-Die 접근법에서 트랜잭션 ID를 가져오고 추가하는 것이 필요한지에 대한 질문이 제기되며, 대신 스레드 ID나 무작위 숫자를 사용하는 것을 제안함.
- 한 댓글 작성자가 읽기 전용 트랜잭션의 맥락에서 완화된 AVL 트리에 대한 마지막 그림을 이해하지 못함.
- 느슨하게 연결된 API 호출의 맥락에서 2PL의 적용 가능성에 대한 질문이 제기됨.
- 대부분의 쓰기 트랜잭션이 많은 경쟁 객체에 대한 일관된 읽기를 필요로 하지만, 실제 쓰기는 종종 하나 또는 두 개의 객체에 불과하다는 점을 제기하며, 2PL이 이를 해결하는지에 대해 질문함.