Jabiseo / Jabiseo-Docs

jabiseo docs
0 stars 0 forks source link

알림시스템 #1

Open InHyeok-J opened 3 months ago

InHyeok-J commented 3 months ago

기술

기능

  1. 도달율 확인을 하기 위한 매트릭 정보 수집 기능

    • 알림 전송 시 Traking이 가능한 ID 부여
    • 알림 이벤트 로깅
    • 알림 전송 / 열람/ 클릭/ 응답 이벤트 기록 -> 사용자 행동 데이터 저장
    • 알림의 상태 실시간 모니터링 기능
      1. 전송 로그 수집
      2. 대시보드 (Ex 키바나) 를 통한 시각화 및 실시간 모니터링
  2. 원하는 시간에 알림을 쐇을때 오차 시간 1분 미만 기능(알림 전송 속도 유지)

    1. 부하테스트 기반 알림 시스템 테스트
    2. 비동기 처리를 위한 메시지 큐 도입
    3. 알림 서버 분리
  3. 정해진 시간에 수천명에게 동시 알림 ( 배치 )

    • 일간 목표를 체크해서 해당 달성을 하지 않은 사람 수~ 만명에게 알림 처리.
InHyeok-J commented 3 months ago

기능적 요구사항

  1. 도달률을 수집할 수 있어야 한다.
  2. 정해진 시간내(soft-real-time) 으로 메시지를 보낼 수 있어야 한다.

푸시 알림과 관련한 법률 고려 사항

- 정보통신망 이용촉진 및 정보보호등 관한 법률 참고

도달률

알림 과정

단 건 알림 구조

배치 알림 구조

  1. 스케줄링, 작업 시스템

    • CronJob
    • Task Queue
    • Spring Batch
  2. 작업 분할 및 병렬 처리

    • Task Queue
    • 멀티 스레딩 / 멀티 프로세싱
  3. 해당 시스템의 모니터링 필요

    • ELK Stack
  4. 다량의 알림 생성시 write DB의 부하 예측

    • Write DB 복제
InHyeok-J commented 2 months ago
  1. 알림 생성
    1. 스케줄링 기반 알림 생성(일간, 주간)
    2. 비즈니스 로직 검사
    3. 알림 생성 후 DB write
      • 스프링 스케줄러 / 쿼츠 / 스프링 배치
  2. 알림 전송
    1. 푸쉬 Token 등록
    2. 푸쉬 Token 조회
    3. 만료 토큰 제거
    4. 푸시 전송
      • FCM/ redis/rabbitmq/kafka
  3. 알림 조회
    1. 알림 조회(읽음 처리)

스프링 스케줄러

Quartz

SpringBatch

Redis Pub/Sub

RabbitMQ

Kafka

InHyeok-J commented 2 months ago

7.15 피드백

배치 플랜이 어긋난 경우 대응이 필요

푸쉬를 쏘면 안되는 경우

분당 발사 할 수 있는 API 호출이 5000개일때 / 사용자가 천만명인 경우 API 5천이 호출되는 것을 어떻게 보장할 것인가? 작업을 실행하는 서버의 가용성은? late limit 컨트롤?

아파치 에어플로(Apache Airflow)


TODO