본문 바로가기

동시성제어2

Redis 단일 인스턴스 분산락 구현하기 (SETNX 및 Spinlock) 동시에 같은 상품에 대한 주문이 생성되었고 재고 차감 과정 중에 같은 상품 데이터에 접근하여 데드락이 발생했다. 일반적인 동시성 제어 방법 SQL DB Exclusive Lock(배타적 잠금) SELECT ~ FOR UPDATE 등의 row lock Zookeeper Kafka 등에서 활용되는 분산서버 관리 시스템 각 클라이언트의 Session 및 Heartbeat 체킹 등의 서버 로직을 응용하여 고가용성을 보장하며, 결제 등 Lock의 성능보다 안정성이 매우 중요한 경우 고려할만한 방법이다. Redis Distributed Lock(분산락) setnx 명령어와 함께 Spin Lock 또는 Publish/Subscribe 등의 방식으로 락의 획득 가능여부를 판단 📌 용어 정리 분산락(distributed.. 2024. 3. 27.
[Ruby On Rails] 동시성 제어하기 - ActiveRecord Locking API 동시 호출로 인하여 데이터의 무결성이 깨지는 문제가 있었고 트랜잭션 동시성 제어의 필요성을 느꼈다. 동시성 제어 (Concurrency Control) 란? : 동시에 실행되는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행순서를 제어하는 기법 동시성 제어의 목적 트랜잭션의 직렬성 보장 공유도 최대, 응답시간 최소, 시스템 활동의 최대 보장 데이터 무결성 및 일관성 보장 그렇다면 동시성 제어를 어떻게 할 수 있을까? 락킹(locking) : 트랜잭션이 데이터에 잠금을 설정하면 다른 트랜잭션에서 해당 데이터에 대해 잠금이 해제되기 전까지 접근/수정/삭제를 불가능하도록 하여, 트랜잭션이 사용하는 자원에 대하여 상호 배제 기능을 제공하는 방식 타임스탬프 : 시스템에서 생성하는 고.. 2023. 3. 22.