[infra] redis 는 왜 빠를까?

orca·2024년 10월 14일

CS

목록 보기
36/46
post-thumbnail

How does a single threaded codebase handle many thousands of incoming requests and outgoing response at the same time? Won't the thread get blocked waiting for the completion of each request individually?
현대의 CPU 는 다중 코어인데, 왜 싱글 스레드로 동작하는 redis 의 속도가 빠른걸까? 당연히 멀티 스레드로 동작해야 CPU 자원을 효율적으로 쓸 수 있는 것 아닐까?

redis 는 인메모리 DB 여서 I/O 비용이 적습니다. 또한 프로그래밍 자료 구조와 유사한 데이터 타입을 제공해 애플리케이션에서 별도의 처리 없이 이용할 수 있습니다. redis 는 동시성 제어 비용을 줄이기 위해 요청 처리에 single thread 를 사용합니다. 그러나 I/O Multiplexing 기법을 통해 요청이 준비되었는지 여부를 신속하게 체크합니다.

인메모리

  • 디스크 접근은 메모리 접근보다 몇 배의 비용이 더 필요함
  • redis 에서 데이터는 메모리에 상주함
  • 디스크에 접근하지 않기 때문에 데이터의 처리 성능이 빠름
  • 데이터 셋이 메모리보다 클 수 없다는 제약 있음

자료 구조와 유사한 데이터 타입

  • redis 는 다양한 자료 구조를 제공하며, 이는 프로그래밍의 기본 자료 구조와 유사함
  • 애플리케이션에서 추가적인 데이터의 가공 없이 사용 가능함
  • 데이터 가공 비용이 없음

부분적 싱글 스레드

  • 멀티 스레드인 경우, 리소스를 I/O 시 락이나 기타 동기화 매커니즘이 필요함
  • redis 의 요청 처리는 싱글 스레드에서 수행됨 (Event Loop)
  • 단일 redis 는 동기화 비용이 없음

I/O Multiplexing

  • I/O Multiplexing
    • 여러 클라이언트의 요청을 감시하고, 처리할 준비가 된 요청을 선택하는 과정
    • 요청을 감시하는 작업은 멀티스레딩 환경에서 처리될 수 있음
  • Event Loop
    • 이벤트 루프는 단일 스레드로 작동함
    • I/O 멀티플렉싱이 특정 작업이 준비되었음을 알려주면, 이벤트 루프가 그 작업을 처리함
    • 한 번에 하나의 작업만 처리하지만, 빠른 순환으로 여러 작업을 연속적으로 처리하여 비동기성을 제공
  • Task Queue
    • 이벤트 루프가 Task Queue에 요청을 쌓아둠
    • 단일 큐로 처리 순서가 보장됨
  • Event Processing
    • Task Queue 에 요청들을 Event Processor 들이 하나씩 처리하고 클라이언트에 응답

0개의 댓글