기존의 Monolithic 아키텍처
MSA 아키텍처
MSA 장점
MSA의 단점
※ 통신 브로커 : 중간에서 기능을 편리하게 사용할 수 있도록 일정 역할을 해주는 모듈
Event-Driven 아키텍처의 모습
Event-Driven 아키텍처의 장점
Event-Driven 아키텍처의 단점
Redis Streams의 활용
Redis Streams의 명령어: 엔트리 추가
XADD: 특정 key의 stream에 엔트리를 추가 (해당 key에 stream이 없으면 생성)
XADD [key] [id] [field-value] - [id] 값에 *를 넣어주면 아이디가 자동 생성된다. - 생성된 값은 "[시간을 나타내는 단위] - [시퀀스 넘버]"
ex) user-notifications라는 stream에 1개의 엔트리를 추가하며 2개의 field-value 쌍을 넣음
Redis Streams의 명령어: 엔트리 읽기(범위 기반)
XRANGE: 특정 ID 범위의 엔트리를 반환
XRANGE [key] [start] [end] - [start]와 [end]에 - + 를 넣어주면 모든 범위 조회 - [start]와 [end]에 entry Id를 넣어주면 사이에 있는 엔트리들이 조회가 됨
ex) user-notifications의 모든 범위를 조회
Redis Streams의 명령어: 엔트리 읽기(Offset 기반) - 1
XREAD: 한 개 이상의 key에 대해 특정 ID 이후의 엔트리를 반환한다. (동기 수행 가능)
XREAD BLOCK [milliseconds] STREAMS [key] [id] - BLOCK 커맨드를 넣으면 동기, 넣지않으면 비동기로 동작 - [milliseconds]는 요청을 받는 요청 대기 시간 (앞으로 [milliseconds]만큼 기다리겠다) - [key] [id]는 여러개의 값을 넣을 수 있음, 여러개의 키와 아이디에 대해 한번에 조회하겠다는 기능
ex) user-notifications의 0보다 큰 ID조회
Redis Streams의 명령어: 엔트리 읽기(Offset 기반) - 2
XREAD BLOCK [milliseconds] STREAMS [key] [id] $ - 기존에 XREAD 문법에서 마지막에 $만 표시해줌 - 앞으로 새로 들어오는 데이터만 읽겠다는 기능 - 앞으로 들어올 데이터를 동기 방식으로 조회하여 event listener와 같은 방식으로 사용 가능
ex) user-notifications에서 새로 들어오는 엔트리를 동기 방식으로 조회
Redis Streams의 명령어: Consumer Group
Redis Streams의 명령어: Consumer Group - 1
XGROUP CREATE: consumer group을 생성
XGROUP CREATE [key] [group name] [id]
ex) user-notifications에 group1이라는 consumer group을 생성
Redis Streams의 명령어: Consumer Group - 2
XREADGROUP: 특정 key의 stream을 조회하되, 특정 consumer group에 속한 consumer로 읽음
XREADGROUP GROUP [group name] [consumer name] COUNT [count] STREAMS [key] [id] - [consumer name]는 자신의 인스턴스를 나타내게 된다 - [consumer name]는 서버의 인스턴스 번호와 같은 unique한 값이 들어간다 - [id]에 “>”를 지정하면 아직 소비되지않은 메시지를 가져오게된다 - 다른 Consumer가 가져가지 않은 데이터를 내가 가져가겠다는 표현
ex) user-notifications에서 group1 그룹으로 2개의 컨슈머가 각각 1개씩 조회
동일한 로직을 실행
XREADGROUP GROUP group1 consumer1 COUNT 1 STREAMS user-notifications > XREADGROUP GROUP group1 consumer2 COUNT 1 STREAMS user-notifications > - consumer2는 consumer1이 가져간 메시지 이후의 데이터를 가져감
HTTP를 이용한 동기 통신 방식
이번에 구현할 Event-broker를 이용한 메시지 기반 통신
실습 예제 event 리스트
출처 : fastcampus