Redis Internal Flow Overview

레디스 내부구조 교육 레디스 정기점검/기술지원
Redis Technical Support
레디스 엔터프라이즈 서버
Redis Enterprise Server

Redis Main Flow

Redis Main Flow

Main Flow

  1. initServerConfig: 서버 구성을 위한 설정값(파라미터)를 디폴트로 넣는다.
  2. loadServerConfig: redis.conf 파일에서 파리미터를 읽어서 넣는다.
  3. initServer: 레디스 서버의 메인 작업으로 Time Event와 File(I/O) Event를 등록한다. 자세한 내용은 아래에 설명한다.
  4. loadDataFromDisk: AOF나 RDB 파일을 읽어 데이터를 넣는다. 이때는 SET/GET같은 데이터 명령은 처리하는 않지만, INFO 같이 정보를 얻기 위한 명령은 실행할 수 있다.

initServer

#define CONFIG_MIN_RESERVED_FDS 32
#define CONFIG_FDSET_INCR (CONFIG_MIN_RESERVED_FDS+96)
initServer() {
    server.el = aeCreateEventLoop(server.maxclients+CONFIG_FDSET_INCR);
    aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL)
    aeCreateFileEvent(server.el, server.ipfd[j], AE_READABLE, acceptTcpHandler,NULL)
}
  • Time Event: serverCron: 1초에 10번 실행, 10 Hz
  • File(I/O) Event: acceptTcpHandler: Client 요청 처리

serverCron

  • clientsCron: 1초에 10번 실행되며 한번 실행될 때 '클라이언트 수'/10 개수 만큼 처리한다. 따라서 모든 클라이언트가 1초에 한번을 처리된다.
    • clientsCronHandleTimeout: 클라이언트가 timeout 시간(초) 동안 아무 명령을 내리지 않으면 연결을 해제한다.
    • clientsCronResizeQueryBuffer: 클라이언트의 querybuf가 1kb 이상이면 빈 공간을 해제한다.   정확히는 (32kb 초과)이거나 (ideltime 2초 초과하고 1kb를 초과)하면 -> free가능한 space가 1kb 이상이면 sdsRemoveFreeSpace() 동작한다.
  • databasesCron:
    • activeExpireCycle: if (lazyfree_lazy_expire==yes) dbAsyncDelete() else dbSyncDelete();
    • activeDefragCycle:
    • tryResizeHashTables: Resize
    • incrementallyRehash: Rehash: 새 버킷 할당후 rehash 실행 -> Active rehashing uses 1 millisecond every 100 milliseconds of CPU time
  • rdbSaveBackground: 자식 프로세스가 rdb 파일을 만든다. save 옵션 사용 시
  • rewriteAppendOnlyFileBackground: 자식 프로세스가 AOF 파일을 다시 만든다. auto-aof-rewrite-percentage 옵션 사용 시
  • replicationCron: Reconnection과 후처리를 한다.
  • clusterCron: 레디스 서버가 클러스터 노드(cluster-enabled yes)일 때 노드간 확인 작업등을 실행한다.

acceptTcpHandler

  • createClient: 클라이언트 요청(명령)을 처리한다.

createClient

Redis Client Flow
  • c->cmd->proc: 클라이언트 요청(명령)을 처리한다.
  • propagate:
    • feedAppendOnlyFile: 명령을 AOF format올 만든다.
    • replicationFeedSlaves: 명령을 복제서버에게 보낸다.

beforeSleep

  • clusterBeforeSleep: 클러스터 관련 처리
  • activeExpireCycle: Expire 관련 처리
  • replicationFeedSlaves: 복제 관련 처리
  • flushAppendOnlyFile: appendfsync가 always면 aof_fsync를 실행하고 everysec이면 aof_background_fsync를 실행한다.   자세한 내용은 AOF Internal을 참조한다.

<< MIN-REPLICAS-MAX-LAG STRINGS Data Structure >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 답글이 올라오면 이메일로 알려드리겠습니다.