Study/대규모 시스템 설계 기초 알림 시스템 설계 - 반응형 알림 시스템 설계 시 고려 사항 어떤 종류의 알림을 지원하는지- 푸시 알림, SMS 메시지, 이메일 실시간 시스템이어야 하는지?- 연성 실시간 시스템이라고 가정. 가능한 한 빨리 전달되어야 하지만 높은 부하가 걸렸을 때 약간의 지연 무방 어떤 종류의 단말을 지원하는지?- iOS, 안드로이드, 랩톱/데스크톱 지원 사용자에게 보낼 알림은 누가 만들 수 있는지?- 클라이언트 어플리케이션 프로그램이 만들 수 도 있고 서버 측에서 스케쥴링할 수도 있음 사용자가 알림을 받지 않도록 설정할 수 있어야 하는지?- 설정할 수 있어야 함 하루에 몇 건의 알림을 보낼 수 있는지?- 천만 건 모바일 푸시 알림, 백만건 SMS 메시지, 5백만 건의 이메일을 보낼 수 있어야 함 개략적인 설계안 출처 : https://jonghoonpark.com/2023/06/29/notification-system-design 각각의 서비스 : 마이크로서비스, 크론잡, 과금서비스와 같은 다양한 서비스다. 알림 시스템 : 알림 시스템은 알림 전송/수신 처리의 핵심으로 현재는 서버 1개만 사용하는 시스템이라고 가정했다. 제3자 서비스에 전달할 알림 페이로드를 만들어 낼 수 있어야 한다. 이 시스템은 서비스 1~N에 알림 전송을 위한 API를 제공해야 한다. 제3자 서비스(third party services) : 이 서비스들은 사용자에게 알림을 실제로 전달하는 역할을 한다. IOS, 안드로이드, 이메일 단말 : 사용자의 단말은 알림을 수신한다 개략적인 설계안의 문제점 SPOF(Single-Point-Of-Failure) : 알림 서비스 서버가 장애가 생기면 전체 서비스 장애로 이어진다. 규모 확장성 : 한대 서비스로 푸시 알림에 관계된 모든 것을 처리하므로, 데이터베이스 / 캐시 등 중요한 컴포넌트의 규모를 개별적으로 늘릴 방법이 없다. 성능 병목 : 알림을 처리하고 보내는 것은 자원을 많이 필요로 한다. 따라서 모든 것을 한 서버로 처리하면 사용자 트래픽이 많이 몰리는 시간에는 시스템 과부하 상태에 빠질 수 있다. 개선된 버전 출처 : https://jonghoonpark.com/2023/06/29/notification-system-design 개선 사항 데이터베이스와 캐시를 알림 시스템의 주 서버에서 분리한다. 알림 서버를 증설하고 자동으로 수평적 규모 확장이 이루어질 수 있도록 한다. 메시지 큐를 이용해 시스템 컴포넌트 사이의 강한 결합을 끊는다. 구성 요소 설명 각각의 서비스 : 알림 시스템 서버의 API를 통해 알림을 보낼 서비스이다. 알림 서버 알림 전송 API : 스팸 방지를 위해 보통 사내 서비스 또는 인증된 클라이언트만 이용가능하다. 알림 검증 : 이메일 주소, 전화번호 등에 대한 기본적 검증을 수행한다. 데이터베이스 또는 캐시 질의 : 알림에 포함시킬 데이터를 가져오는 기능이다. 알림 전송 : 알림 데이터를 메시지 큐에 넣는다. 하나 이상의 메시지 큐를 사용하므로 알림을 병렬적으로 처리할 수 있다. 캐시 : 사용자 정보, 단말 정보, 알림 템플릿 등을 캐시 한다. 데이터 베이스 : 사용자, 알림, 설정 등 다양한 정보를 저장한다. 메시지 큐 : 시스템 컴포넌트 간 의존성을 제거하기 위해 사용한다. 다량의 알림이 전송되어야 하는 경우를 대비한 버퍼 역할도 한다. 작업 서버 : 메시지 큐에서 전송할 알림을 꺼내서 제3자 서비스로 전달하는 역할을 담당하는 서버이다. 추가 고려 사항 안정성 데이터 손실 방지 알림 중복 전송 방지 추가로 필요한 컴포넌트 및 고려사항 알림 템플릿 알림 설정 전송률 제한 재시도 메커니즘 보안 큐 모니터링 이벤트 추적 반응형 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기my story 저작자표시 Contents 알림시스템설계시 고려사항 개략적인설계안 개략적인설계안의문제점 개선된버전 개선사항 구성요소설명 추가고려사항 당신이 좋아할만한 콘텐츠 URL 단축기 설계 2025.02.28 분산 시스템을 위한 유일 ID 생성기 설계 2025.02.23 키-값 저장소 설계 2024.07.02 안정 해시 설계(hash ring) 2024.06.21 댓글 1 + 이전 댓글 더보기