본문 바로가기

반응형

좋아하는 것_매직IT/9.redis

28.Redis, 레디스 복제에 대해서 알아볼까요? 다중 복제의 단점을 보완하기 위한 계층형 복제란 ? ^^ 계층형 복제 이전에 설명했던 다중복제 시 master 노드에 너무 많은 slave 클라이언트가 접속되어 쓰기 성능이 저하되는 문제점을 해결하기 위한 복제 방법 주요설명 master 노드와 slave #1노드가 1차로 복제되어 동기화됨. 이후, slave #2/3/4 가 복제되는 구조임. 단, slave #1 노드에는 읽기 / 쓰기 연산을 수행하지 않아야함. 만약, 리소스가 충분하다면, savle #1에서도 읽기 연산을 수행해도 무방함. 단계별로 복제를 수행함, 더 많은 조회 성능이 필요하거나 별도의 기능을 위해서는 새로운 단계의 복제 노드를 추가하기도 함. 여기서 잠깐 ! ) Redis 의 복제 에 대해서 공부하고 정리하다가 아래와 같은 문의사항이 생김. 저는 이제까지 우선 Redis의 클러스터구성에서는.. 더보기
26.Redis, 레디스 복제에 대해서 알아볼까요? 단일 복제는 ? ^^ 단일복제 가장 기본적인 클러스터 구성으로 master 노드 와 slave 노드 하나로 구성됨. master 노드에서 변경이 발생하면, slave 노드에 데이터 변경사항이 기록됨. but, slave 노드의 데이터가 변경되면, master 노드는 해당 변경사항을 감지하지 못함. 즉, slave 노드의 데이터가 변경이 일어나는 순간 데이터의 정합성이 무너짐. 다시말해서, 절대로 slave 노드에서는 데이터의 변경을 수행하지 않아야함. 구성도 Redis 복제 및 동기화 단일복제 클러스터 구성 2개의 레디스 인스턴스 실행, 실행 시 환경설정 변경 및 확인 master 는 6300 port 로 기동 / slave 는 6301 port 로 기동 하는 설정. 스냅샷 파일의 이름도 port 와 동일하게 설정함. 관리상.. 더보기
25.Redis, 레디스에서 말하는 복제에 대해서 전반적으로 정리해 보면? 레디스의 복제에 대해서, 전반적으로 조심스럽게 정리해보면... 우선, 일반적으로 말하는 복제의 개념에 대해서 정리해보자.. 복제는 동일한 데이터를 다중의 노드에 중복하여 저장하는 것을 말하곤 함. 그럼 레디스에서 복제는 ? 레디스는 복제를 위해서 Master / Slave 의 복제 개념을 사용함. 레디스의 복제에서 Master/Slave 의 복제 역할은? Master 복제를 위한 데이터의 원본 역할 Slave Master 노드에 데이터 복제요청을 하고, 데이터를 수신하여 데이터를 동기화하는 역할 레디스의 복제의 목적 레디스의 복제는 주로 읽기 성능의 증대를 위해서 사용됨 통상적으로 인스턴스 하나가 처리할 수 있는 TPS 는 보통 1만 ~ 2만이라고 함. 레디스 명령은 읽기와 쓰기에 따른 성능 편차가 존재.. 더보기
24.Redis, 데이터 처리량 확장을 위한 분산 기법에 대해서 알아보자구요.^^ 레디스의 처리 성능을 증대시키는 방법은? 결론) 복제와 샤딩을 통해서 처리 성능을 증대 시킬 수 있음. 그럼, 복제와 샤딩에 대해서 간단히 알아볼께요 ^^; 복제 클라이언트가 어느 노드에 접근하더라도 동일한 데이터를 읽을 수 있도록 데이터를 각 노드에 복제하여 저장하는 것을 말함. 샤딩 데이터를 특정 조건에 따라 나누어 저장하는 것. ex) 처리 데이터가 9개 있다고 가정할 때, 3대(A,B,C)의 노드를 사용하여 샤딩을 수행한다고 가정하면, 1~3 데이터는 A 노드 4~6 데이터는 B 노드 7~10 데이터는 C 노드 다시말해서, 각각의 데이터를 분할 저장하는 것을 샤딩이라고 함. 샤드(Shard)란? 위의 예시처럼 3개의 노드를 사용하여 데이터를 분할 저장할 때, 각 노드를 샤드라고 부름. 만약, 각 .. 더보기
23.Redis, 레디스 공유객체에 대해서 알아볼께요. Redis 공유객체란? 이전에 문자열 데이터 인코딩에서 잠시 살펴본것 같이, Redis 는 자주 사용되는 값을 전역변수인 공유객체에 저장해 두고 사용함. 공유객체에 포함하고 있는 값 리스트 에러메시지 프로토콜을 위한 문자열 자주 사용되는 문자열 0~9999 까지의 숫자 기타 등등. 모든 값은 redisObject 구조체를 사용해서 표현됨. redisObject 구조체 선언 redis 공유객체 선언 server.h 헤더 파일 레디스 서버는 server.c 소스파일의 main 함수를 통해서 시작됨. main 함수 시작 시 Redis 가 사용할 라이브러리와 서버의 기본 설정 변수등을 초기화하고 redis.conf 설정 파일을 읽어서 레디스 서버에 적용함. main 함수 주요소스 int main(int argc.. 더보기
22.Redis, 레디스문자열 구현에 대해서 알아볼께요. Redis 문자열 처리및 구현에 대해서.. 문자열을 메모리에 저장할 때 C언어의 char* 를 사용해서 저장함. 단, 문자열을 단순히 char* 만 사용하여 저장한다고 하면, 문자열 길이를 확인하기 위해 항상 저장된 메모리 크기를 확인해야해서 이와 같이 처리하게되면, 성능상 큰 단점이 될 수 있음. Redis 는 위의 단점을 극복하고, 빠른 연산을 위해서 특별한(?) 구조체를 사용해서 위의 단점을 풀어냄. 그럼 어떻게 이런 단점을 극복했을까요? ^^; 그답은 아래에 설명하겠습니다! 답) 문자열 표현을 위한 SDS(Simple Dynamic Strings) 구조체를 사용함. /* Note: sdshdr5 is never used, we just access the flags byte directly. * .. 더보기
21.Redis, 레디스 인코딩 중 셋 데이터 인코딩 에 대해서 알아볼께요.^^ 셋데이터 인코딩에 대해서 생각정리를 해볼께요..^^ Set 데이터의 시간 복잡도 O(1) 해당 시간 복잡도를 제공하기위해서 내부적으로 Hash 테이블 구조로 구현되어 있다고 함. Set 데이터의 인코딩 OBJ_ENCODING_HT 기본 인코딩. OBJ_ENCODING_INTSET 메모리를 절약하기 위한 특별한 인코딩. 환경설정(redis.conf) set-max-intset-entries 설정에서 지정됨. 숫자 데이터로 한정됨. 초기 설정 인코딩인 OBJ_ENCODING_INTSET이 OBJ_ENCODING_HT 으로 변경되면 다시 OBJ_ENCODING_INTSET으로 변경되지 않음. 즉, 숫자 데이터가 아니면 항상 OBJ_ENCODING_HT 인코딩으로 변환됨. Set 데이터의 인코딩 변화 확인 예시.. 더보기
20.Redis, 레디스 인코딩 중 리스트 데이터 인코딩 에 대해서 알아볼께요.^^ 리스트 데이터 인코딩에 대해서.. 버전 3.2.0 이전 ZIPLIST(small lists), LINKEDLIST 이었음. OBJ_ENCODING_ZIPLIST OBJ_ENCODING_LINKEDLIST but, 버전 3.2.0 부터 QUICKLIST하나로 통일되어 사용됨. OBJ_ENCODING_QUICKLIST 인코딩 타입에 대한 선언 소스 코드 server.h 인코딩에 대한 설명 레디스 버전 3.2.0 이전 OBJ_ENCODING_ZIPLIST member 갯수가 512개 까지이거나, 값의 길이가 64까지는 ziplist이다. 이것은 redis.conf에 list-max-ziplist-entries 512, list-max-ziplist-value 64 로 설정할 수 있다. OBJ_ENCODING_.. 더보기

반응형