[번외] 처리율 제한 시스템에서의 경쟁 조건 문제

김수환·2024년 11월 12일
0

락(Lock)이 시스템 성능을 떨어뜨리는 이유

Context Switching 비용

락을 사용면, 자원을 동시에 접근하려는 스레드들이 대기한다.

-> Context Switching 발생

  • Context Switching은 CPU의 오버헤드를 발생시킴
  • 많은 스레드가 대기하면 성능이 저하됨

병목 현상 (Bottleneck)

락을 사용하면 여러 스레드가 자원을 접근하려 할 때 동기화 지점이 발생함.
자원을 여러 스레드가 동시에 요청하면 일부 스레드는 대기하고 이로 인해 병목 현상이 발생함.

스레드 Blocking and Waiting

락을 사용할 때, 락을 이미 획득한 스레드가 다른 스레드를 차단하는 상황이 발생 함
특히 데드락이나 기아(starvation)와 같은 문제가 발생할 수 있음

락 경쟁

멀티 스레드 환경에서 락을 획득하려는 경쟁이 치열해지면서 성능이 급격히 떨어질 수 있음.
많은 요청들이 동시에 락을 획득하려 하면 요청의 대기 시간이 길어지고 처리 속도가 저하된다.

레디스(Redis) 정렬 집합(Sorted Set)

레디스(Redis)에서 제공하는 Set과 List의 특징을 결합한 자료구조
각각의 원소는 score(실수)로 정렬
오름차순 또는 내림차순

구성
element: 저장 데이터 (중복 X)
score: 실수 값, 정렬기준 (중복 허용)

ex.
플레이어 점수 저장: 각 플레이어의 이름을 원소로 점수를 score로 설정하여 Sorted set에 저장
순위 조회: 점수로 정렬해서 순위 조회

경쟁 조건 문제 해결에 적합한 이유

순서 보장
score로 정렬된 원소

  • 데이터가 항상 특정 순서대로 정렬되어 있음
  • 스레드가 동시에 수정하더라도 일정한 순서로 데이터에 접근할 수 있음

원자적 연산
Redis는 원자적 연산을 제공
여러 클라이언트가 동시에 같은 데이터를 수정할 때 발생하는 충돌 방지

  • ZADD (원소 추가), ZINCRBY (점수 증가) 명령어
    : 여러 스레드가 동시에 호출하더라도 데이터의 일관성을 유지

빠른 데이터 처리
빠른 읽기/쓰기 속도
경쟁 조건을 해결하기 위해 많은 양의 데이터를 처리하는 경우

  • Redis는 높은 성능을 유지하며 작업을 수행한다.

Sorted Set:데이터를 효율적으로 처리하는 자료구조

Redlock

레디스 분산 환경에서 경쟁 조건을 방지하고, 데이터의 일관성을 유지하기 위해 설계된 매커니즘

여러 개의 Redis 인스턴스를 이용하여 락을 분산적으로 설정하고 관리
분산 시스템에서 동일 리소스에 대해 하나의 작업만 수행되도록 보장하는데 사용

profile
hello human

0개의 댓글