JuyeoungJun / cron-monitoring

for cron-monitoring
0 stars 0 forks source link

Redis 푸시 알림이 유실된 경우에 대한 대처 #7

Closed JuyeoungJun closed 3 years ago

JuyeoungJun commented 3 years ago

In GitLab by @gm2202981 on May 20, 2021, 10:35

개요

모니터링 서버가 다운되거나 이상이 발생하는 경우에 대한 대처 방안 모색

Redis Pub/Sub vs Redis Stream 비교

Pub/Sub Stream
데이터 저장 휘발성 삭제 명령 이전까지 메모리에 남음
동기/비동기 전송 push push&pull
전송 Semantics "fire and forget" at-most-once 혹은 at-least-once
클라이언트 명령어 blocking blocking&non-blocking

참고자료

JuyeoungJun commented 3 years ago

In GitLab by @gm2202981 on May 24, 2021, 11:55

changed the description

JuyeoungJun commented 3 years ago

In GitLab by @gm2202981 on May 24, 2021, 11:56

■ Persistence

Redis는 데이터를 disk에 저장할 수 있습니다. 따라서 Redis는 서버가 shutdown된 후에 restart 하더라도 disk에 저장해놓은 데이터를 다시 읽어서 데이터가 유실되지 않습니다. redis의 데이터를 disk에 저장하는 방식은 snapshot, AOF 방식이 있습니다.

Snapshot : 스냅샷은 RDB에서도 사용하고 있는 어떤 특정 시점의 데이터를 DISK에 옮겨담는 방식을 뜻합니다. Blocking 방식의 SAVE와 Non-blocking 방식의 BGSAVE 방식이 있습니다.

AOF : Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태입니다. 서버가 재시작할 시 write/update를 순차적으로 재실행, 데이터를 복구합니다.

레디스 공식문서에서의 권장사항은 RDBMS의 rollback 시스템같이 두 방식을 혼용해서 사용하는 것입니다. 주기적으로 snapshot으로 벡업하고 다음 snapshot까지의 저장을 AOF 방식으로 수행하는 것이죠.

출처: https://engkimbs.tistory.com/869 [새로비]

JuyeoungJun commented 3 years ago

In GitLab by @gm2202983 on May 24, 2021, 13:04

https://stackoverflow.com/questions/59540563/what-are-the-main-differences-between-redis-pub-sub-and-redis-stream

신호 유실과 관련해 stream 방식을 사용하는게 나을 것 같습니다.

만약 종료됐는지를 확인하는 polling 방식을 추가한다면 pub/sub 방식으로 사용 가능합니다

JuyeoungJun commented 3 years ago

In GitLab by @gm2202983 on May 24, 2021, 13:11

전반적인 레디스의 특징입니다. 유익한 정보 많습니당 https://juneyr.dev/2019-03-29/redis-basics

JuyeoungJun commented 3 years ago

In GitLab by @gm2202983 on May 24, 2021, 14:33

Cron job 를 사용해 Xs 에 1번씩 batch process 로 로그 데이터를 select 하여 socket.io 실시간 이벤트로 broadcasting 하고 client는 수신받은 데이터로 유실이 발생한 알림에 대해 리스트를 fetch 하는 것으로 이벤트 누락에 대한 데이터 미변경을 보완하면 될 것 같습니다 KakaoTalk_20210524_143256238.

JuyeoungJun commented 3 years ago

In GitLab by @gm2202981 on May 24, 2021, 16:34

위의 방법은 유실을 방지할 순 있지만 오버헤드가 너무 큼

JuyeoungJun commented 3 years ago

In GitLab by @gm2202981 on May 25, 2021, 16:26

unassigned @gm2202981