redis_intro
Redis Introduction
레디스 서버 교육 신청 |
레디스 정기점검/기술지원 Redis Technical Support |
레디스 엔터프라이즈 서버 Redis Enterprise Server |
---|
Redis Introduction
주요 특징
- 데이터 저장소로 디스크가 아닌 메모리를 사용합니다. 그리고 데이터의 안전한 보관과 백업을 위해 다른 서버의 메모리에 실시간으로 복사본을 남길 수 있고, 디스크에 저장하는 방법을 제공합니다.
- 성능은 초당 약 10만회 명령을 실행합니다. 이는 서버(CPU)에 따라 다르지만 일반적으로 초당 5만 ~ 25만회를 실행합니다. » 성능에 대한 자료는 여기를 보세요. O(1), O(N), O(log(N))
- 기본적으로 key-value 저장 방식이지만, Lists, Sets, Sorted Sets, Hashes, Streams 같은 다양한 저장 방식을 제공합니다. 따라서 다양한 방식으로 데이터를 활용할 수 있습니다.
- Redis Server Instance는 1개 프로세스(process)로 수행되며, 따라서 평상 시 CPU 1 core만 사용합니다.
가끔 AOF/RDB/Full Resync 시에 추가 1개 core를 더 사용합니다. 그러므로, 서버 머신 또는 VM 하나에 여러 개의 Redis Server를 사용할 수 있습니다.
» Process와 thread에 대한 자세한 내용은 여기를 보세요. Lock, Unix
개발
- 개발자: Salvatore Sanfilippo, from Sicily, Italy
- 개발 동기: Salvatore는 Google Analytics 같은 실시간 웹 로그 분석 애플리케이션(lloogg.com)를 MySQL로 개발하던 중, 성능에 한계를 느껴 직접 Redis(REmote DIctionary Server)를 개발하게 되었습니다.
- Release
- 2009년 9월 버전 1.0: 자료구조: String/List/Set/Zset, Master-slave 기능, 디스크 저장 기능(save)
- 2010년 1월 버전 1.2: AOF 기능 추가
- 2010년 9월 버전 2.0: Hash 추가
- 2013년 11월 버전 2.8: 안정적인 센티널(Sentinel)을 사용
- 2015년 5월 버전 3.0: 클러스터(cluster) 기능 제공
- 2017년 7월 버전 4.0: 모듈(module) 추가
- 2018년 10월 버전 5.0: 스트림(stream) 추가
- 2020년 4월 버전 6.0: ACL(접근제어:userid), Client Side Caching
- 2022년 4월 버전 7.0: AOF 개선, 내부 자료구조 변경
레디스를 사용하는 분야
디지털 트윈(Digital twin)
- 디지털 트윈(digital twin)은 미국 제너럴 일렉트릭(GE)이 주창한 개념으로, 컴퓨터에 현실 속 사물의 쌍둥이를 3D로 만들고, 현실에서 발생하는 데이터를 받아 트윈에 적용하는 기술입니다. 이로써 통합된 모니터링이 가능하고 시뮬레이션이나 데이터 분석도 가능합니다. 또 시뮬레이션 결과를 현실 사물에 반영하는 것도 가능합니다.
- 디지털 트윈에 필요한 수 많은 센서 데이터를 실시간으로 받아 처리하는데 레디스를 사용하고 있습니다.
RPA(Robotic Process Automation)
- 로보틱 프로세스 오토메이션(Robotic process automation, RPA)은 소프트웨어 봇 또는 인공지능(AI) 워커(worker)의 개념에 기반을 둔, 비즈니스 프로세스 자동화 기술 형태이다. 전통적인 워크플로 자동화 도구에서 프로그래머는 내부 API 또는 전용 스크립트 언어를 사용하여 백엔드 시스템에 대한 태스크와 인터페이스를 자동화하기 위한 일련의 동작을 생성한다. 이와 대조적으로 RPA 시스템은 사용자가 애플리케이션의 그래픽 사용자 인터페이스(GUI)의 태스크를 수행하는 것을 관찰함으로써 동작 목록을 만든 다음 GUI에 직접 해당 작업을 반복함으로써 자동화를 수행한다. 이로써 제품 자동화 이용에 대한 장벽을 낮출 수 있다.
- RPA 도구들은 그래픽 사용자 인터페이스 테스트 도구와 기술적으로 상당한 유사점이 있다. 해당 도구들 또한 GUI를 사용하여 상호작용을 자동화하고 사용자가 수행한 일련의 동작을 반복함으로써 이를 수행한다.
- RPA process 데이터를 레디스에 저장하고 있습니다.
- RPA 란
항공사 비행 일정
- 항공사 비행 일정을 여행사 또는 일반 고객에게 제공하는데 레디스를 사용하고 있습니다. 수많은 항공사의 비행 일정에서 고객이 원하는 일자와 출발지, 경유지, 목적지에 맞는 최적의 비행 스케줄을 빠르게 제공하는 것은 쉽지 않습니다.
- 빠르게 최적의 스케줄을 제공하기 위해 DB를 레디스로 구축하는 고객들이 늘고 있습니다.
채팅/메신저/챗봇(Chatbot)
- 큰 규모의 메신저에서도 레디스가 사용되고 있지만, 사내 메신저 또는 고객 상담 챗봇에도 사용되고 있습니다. 대화 내용을 임시로 레디스에 저장하고, 사용자 상태 정보를 레디스의 pub/sub으로 구현하고 있습니다.
- 사내 메신저 또는 챗봇을 구상하신다면 레디스를 검토해 보세요.
사물인터넷(Internet of Things, IoT)
- 1) 인덕션을 30분 이상 사용하면 이벤트를 받아 사용자에게 알림을 보낸다.
2) 차량이 아파트 게이트를 통과하면 해당 집의 에어컨 또는 난방을 가동한다.
3) 생산 장비로 부터 데이터 또는 전기사용량을 받아 생산을 관리한다. - 수 많은 센서들로 부터 데이터를 받아 처리하는데 레디스를 사용합니다.
세션 스토어(Session Store)
- 현재 레디스가 가장 광범위하게 사용되는 곳은 세션 데이터 저장 용도입니다.
이제 "세션 스토어(Session Store)는 레디스다" 라고 해도 과언이 아닙니다.
레디스를 사용하는 곳
국내는 물론이고 세계 유수의 기업들에서 레디스를 사용하고 있습니다. 아래 이미지를 클릭하면 자세한 내용을 볼 수 있습니다.
여기 소개된 사이트들 외에서 Yahoo!, the guardian, tumblr, stackoverflow, viacom, GitHub, Instagram, flickr, snapchat 등 수많은 사이트에서 사용하고 있습니다.
Twitter 트위터
- 레디스를 이용해서 초당 30만 트윗을 처리할 수 있도록 구축
- 아래는 Redis를 이용한 Twitter Timeline architecture 입니다.
- Real-Time Delivery Architecture at Twitter 동영상: infoQ
- 30 Billion Redis Updates Per Day 기사: Pivotal
- Scaling Redis at Twitter 동영상: 트위터에서 레디스의 리스트(List)를 수정/개선하여 사용하였고,
이 부분은 나중에 레디스 퀵 리스트(Quick List)로 반영되었습니다.
이 동영상은 트위터에서 어떤 이유로 개선했는지 그리고 개선 방법에 대해서 개발자가 직접 설명합니다.
Weibo 웨이보
- 웨이보는 중국판 트위터입니다. 중국 인터넷 사용자의 70% 이상이 웨이보를 가장 중요한 정보 수단으로 여기는 것으로 조사되었습니다.
- 2013년 1월 23일 중국 설날(춘절)에는 트위터를 제치고 초당 메시지 32,312건 돌파해서 기록을 세우기도 했습니다.
- 웨이보는 레디스를 이용해, 일일 5천억 읽기와 5백억 쓰기를 할 수 있도록 구축했으며,
500대 이상 서버(머신)으로 2000개 이상 레디스 서버(인스턴스)를 운영하고 18TB 이상 메모리를 사용합니다. - 레디스를 이용한 웨이보 아키텍처
- 관련 기사: Largest Redis Cluster Ever(Eng.)
- 레디스는 Top 10 list 같은 것을 뽑는데 아주 적합하고, 경험상 레디스 인스턴스당 메모리 사용량을 30GB 이하로 유지하고 있다고 합니다.
NAVER LINE
- 네이버 라인 레디스 사용 아키텍처: 2011년
- 사용자가 급격히 증가하면서 네이버 라인에서는 새로운 DB 아키텍처를 설계하여서, 메인 DB를 레디스에서 HBase로 변경하였습니다. 하지만 앞 단 Queue 용도로 레디스를 사용하고 있습니다.
- 관련 글(LINE Engineers' Blog) LINE Storage: Storing billions of rows in Shareded-Redis and HBase per Month
KakaoTalk
- 국민 대부분이 사용하고 있는 카톡도 레디스를 사용하고 있습니다. '2015년 인터넷 트렌드 보고서'에 따르면, 카카오톡 평균 구동 횟수는 55회로 전세계 애플리케이션(이하 앱) 중 1위를 차지했습니다. 다음은 공개SW포탈에 소개된 KakaoTalk의 아키텍처이다.
- 관련 글 (공개SW포탈) 카카오 - 공개SW로 만든 국민 모바일 메신저 '카카오톡'
아틀란 스토리
- 국내 모바일게임 중에서 레디스를 메인 데이터베이스로 사용한 첫 사례
- 관련 기사: 아틀란스토리의 선택과 집중 이야기
Pinterest 핀터레스트
- 아래 그림은 2010년 부터 2012년 까지 핀터레스트 일 페이지뷰 그래프입니다.
2012년 10월 핀터레스트의 데이터베이스 구성은 MySQL 80대, 레디스 110대, 멤케시 200대 입니다.
물론 지금은 방문자가 훨씬 많기 때문에 이 구성보다 훨씬 커졌을 것입니다. - 이 글은 pivotal에 있는 것으로 핀터레스트에서 수십억개의 관계(follow users and boards)를 레디스를 이용해서 하고 있는 것으로 소개하고 있습니다. Using Redis at Pinterest for Billions of Relationships
- 이 글은 핀터레스트 엔지니어링 블로그에 있는 것으로 follow 관계를 Redis SortedSet, Set 등을 이용해서 개발했다는 내용입니다. Building a follower model from scratch
- 이 동영상은 InfoQ에 있는 것으로 2010년 3월 MySQL 1대 시작해서 2012년 10월까지 아키텍처가 확장되어 가는 과정을 설명하고 있습니다. Scaling Pinterest
Memory DB에 대한 생각
Microsoft Research's eScience Group manager Jim Gray
- Jim Gray는 2006년에 이미, 메모리가 디스크 역할을 할 것이며, 디스크는 테잎이 될 것이라고 말했습니다.
그리고 메인 메모리 DB가 일반적인 DB가 될 것이라고 했습니다. - Memory is the New Disk, Disk is the new tape.
Main Memory DB is going to be common.
관련 기사: infoQ, wired, slideshare - 메모리 DB에 대해서는 상반된 두 가지 견해가 있습니다.
하나는 처리 속도가 빠르다는 것이고, 다른 하나는 데이터 분실에 대한 걱정 것입니다.
레디스는 장점을 살리고 단점을 커버하는 기술을 가지고 있으므로 데이터 분실에 대한 걱정을 거의 하지 않아도 됩니다.
레디스는 데이터 보존을 두 가지 방식으로 제공합니다.
하나는 데이터를 다른 서버에 실시간으로 복제하는 기능입니다.
이 기능을 이용하면 Master server가 down되어도, replica(복제) server로 접속해서 서비스를 계속할 수 있습니다.
또 하나는 디스크 쓰기 기능을 제공합니다. 이 기능을 사용해도 레디스의 성능은 거의 떨어지지 않습니다.
레디스 시작 시 이 데이터를 읽어 들여 서비스를 계속 수행하므로, 데이터 분실 위험은 거의 없다고 봐도 됩니다.
Disk vs Memory
Ranking
DB Engines Ranking
- 레디스가 전 세계 데이터베이스에서 2022년 7월 기준 6위입니다.
레디스가 이렇게 많이 사용되는지 잘 몰랐다면 이것은 놀라운 소식이 될것입니다.
- Key-Value Store 부분에서는 1위입니다.
레디스 Data Types과 Commands
5 Data Type과 Command 요약 설명 애니메이션
Strings 소개와 명령어 리스트
Lists 소개와 명령어 리스트
Sets 소개와 명령어 리스트
Sorted Sets 소개와 명령어 리스트
Hashes 소개와 명령어 리스트
Common/keys 소개와 명령어 리스트
<< 기술지원 | Introduction | Release Notes 7 >> |
---|
Email
답글이 올라오면 이메일로 알려드리겠습니다.