2024.03.31 - [Spring/대용량 트래픽] - Spring에서 대용량 트래픽 처리
Spring에서 대용량 트래픽 처리
간단하게 클라이언트가 있고, Web Application Server가 있고, DB가 있다고 가정하자. 이 어플리케이션은 단순히 게시글을 조회하는 기능을 해주는 어플리케이션이라고 가정하자. 이때 다수의 사용자
lsdiary.tistory.com
이전글에서는 전반적으로 Spring에서 대용량 트래픽은 어떻게 처리하는지에 대해서 알아봤다.
이제 Redis가 뭔지 자세하게 알아보는 글이 되겠다.
in-memory database
- in-memory : 컴퓨터의 메인 메모리
- database : 컴퓨터에 데이터를 저장할수 있는 시스템
메모리에 데이터를 적재하여 활용하는 DB 시스템을 의미한다.
특징
- 디스크 대비 빠른 응답속도(ms 단위) ☞ 높은 처리량
- RAM(메모리)의 휘발성 ☞ 가용성 측면에서 충분한 고려 필요함
- 다양한 데이터 타입 제공
실제로 메모리와 디스크에서 read/write 테스트를 해보면 속도차이가 크게 나는 것을 확인할 수있다.
오픈소스
Memcached
과거에 많이 사용되었던 오픈소스다. 분산저장소로써, 단일 데이터 타입만을 제공한다.
대규모 캐시 데이터를 저장하고, 질의하는데 유용한 DB이다.
Redis
Reomte Dictionary Server의 약자이다. key-value형식의 HashMap구조로 데이터저장을 지원하는 오픈소스 데이터베이스다. 빠른 속도와 이식성의 강점이있는 C언어로 구현되어있다.
Redis또한 분산저장소이다. 다만 Memcached에 비해 다양한 자료구조를 지원하고, Cache뿐만 아니라, Session store, pub/sub, Leader board, Geospatial 등과 같이 여러가지로 활용되고 있다.
메모리에 많은 데이터를 저장하기에는 디스크에 비해 너무 비싸다. 그럼에도 사용하는 이유는?
특징
- 빠른 데이터 처리
- 메모리에 있는 데이터 디스크에 저장 및 운용(가용성, 백업을 위한 조치)
백업/복구를 위한 두가지 방식
- RDB(Snapshot) - 기본설정 : Redis DataBase의 약자이다. 특정시점에 전체DB를 디스크에 저장하는 방식이다.
※ 프로세서 fork 기반으로 진행되어서 메모리사용률이 급등할수 있기때문에 모니터링이 필요하다.
- AOF(Append Only File) : 데이터 쓰기 작업 명령어들을 적재하는 방식이다. 일종의 히스토리를 쌓는다고 한다.
RDB보다 좀더 복구에 용이하다. 그만큼 데이터 용량을 더 많이 활용하게 되고, 디스크에 쓰기 작업이 훨씬 빈번해서 성능에 영향을 끼칠수 있다.
단순 캐시용도로 사용한다면 두가지 방식의 기을 모두 끄고 사용하는 경우도 있다.
중요한 데이터라고 생각한다면, RDB와 AOF 두가지 기능을 모두 켜서 사용하는것도 좋은 전략이다.
- 다양한 데이터타입
- 클라이언트에게 받은 명령을 Single Thread로 처리
동시에 여러 명령을 받을 수 있지만, 실제 처리는 순차적으로 하나씩만 진행한다.
이 말은 뒤의 명령들은 대기하게 되는데, 응답속도 지연으로 이어지고, 서비스장애까지 이어질수도있다.
O(n)으로 처리되는 명령어는 주의 깊게 사용해야한다.
내부적으로 Lock을 사용하지 않아도, 원자적 실행이 가능하게 한다. 이는 Consistency를 보장할수있다!
그러면 느린거 아니야,,? 초당 10만건까지 처리가 가능하다고 한다,,,, ㄷㄷㄷㄷㄷ
Redis 6.0 버전 이상부터는 여기서 또 성능 향상을 위해서 Thread I/O가 도입되었다.
I/O 부분의 특정 다수 스레드를 설정해서 사용하는 것인데, 대표적으로 Network in/out에 대해 활용이 되고, 병렬처리도 가능해져서 I/O에 대한 지연이 일어나지 않는다. 그래도 명령처리(실제 동작)는 Single Thread로 동작한다.
활용사례
- Cache
자주 사용, 변하지 않는 데이터
반복되는 DB 질의 줄임으로서 DB리소스 줄일수 있고, 응답시간또한 향상
- Session Store
세션정보 저장할때 분산저장소로 활용
PTL(데이터 자동삭제기능) 제공, 오래된 세션데이터 관리하기 용이
- Pub/Sub
Publish/Subscribe 패의 줄임말
메세지 브로커로서 메세지 발행인, 구독인을 통해 클라이언트가 메세지를 주고받을수 있게 기능 제공.
비동기 처리 목적으로 활용가능, 실시간 채팅과 같이 메세지 중계를 위한 기능으로도 사용.
- Message Queue
메세지를 레디스에 저장하고, 필요로 하는 서버에서 데이터를 요청한 순서대로 전송
- Geospatial
지리공간 데이터(위도/경도)를 레디스에 저장, 질의하는데 활용
현재 내 위치로부터 반경 몇 Km?
- leader board
사용자들간의 경쟁할수 있는 점수체계
순위대로 표현할수 있는 시스템
이제는 실습을 위해 레디스를 설치해보겠다.
2024.04.05 - [Spring/대용량 트래픽] - Redis,Docker 설치하기와 수많은 에러
Redis,Docker 설치하기와 수많은 에러
도커 컨테이너 기반으로 Redis를 설치해보겠다. https://hub.docker.com/_/redis redis - Official Image | Docker Hub Quick reference Supported tags and respective Dockerfile links 7.2.4, 7.2, 7, latest, 7.2.4-bookworm, 7.2-bookworm, 7-bookworm,
lsdiary.tistory.com
'Spring > 대용량 트래픽' 카테고리의 다른 글
Java에서 Redis 명령어 (0) | 2024.05.03 |
---|---|
Redis 다양한 데이터 타입 알아보기 (0) | 2024.04.30 |
Redis CLI 실습 (0) | 2024.04.05 |
Redis,Docker 설치하기와 수많은 에러 (0) | 2024.04.05 |
Spring에서 대용량 트래픽 처리 (0) | 2024.03.31 |