본문 바로가기

System Design3

대기열 시스템 커머스 서비스에서는 이벤트로 인해 짧은 시간에 급격하게 올라가는 트래픽에 대응하기 위해서 대기열 시스템을 적극적으로 활용하고 있다. 대기열 시스템의 실제 구현은 서비스의 요구사항, 트래픽 수준 등에 따라 천차만별이다.이번 포스팅에서는 가상의 요구사항을 제시하고 이를 만족하는 대기열 시스템을 구현해보도록 하겠다. (Fastify 기반의 대기열 시스템 API 예제는 여기에서 확인할 수 있다) 요구 사항이벤트 상품 주문 페이지의 트래픽을 조절할 수 있는 대기열 시스템을 구현한다. 이 시스템의 기능적 요구 사항은 아래와 같다.대기열 시스템은 대기와 입장만 관리하고 입장 이후는 관리하지 않는다.대기열 시스템은 이벤트 상품 주문 페이지에 5초 당 10명의 사용자를 입장시킨다.사용자가 대기할 필요가 없는 경우 바로.. 2024. 11. 12.
Redis를 활용한 다양한 시스템 설계 Redis는 in-memory key-value storage로 주로 DB 레이어의 부하 분산과 빠른 응답을 위한 캐싱 레이어로 쓰인다.하지만 Redis는 value로 다양한 데이터 타입을 지원하고 있으며, 다양한 모듈과 이 모듈들을 포함한 Redis Stack 또한 제공하고있다. Redis에서 제공하는 데이터 타입들과 모듈을 활용하면 큰 노력 없이 다양한 종류의 시스템을 설계할 수 있다.이번 포스팅에서는 Redis를 활용하여 다양한 시스템을 설계하는 방법에 대해 알아보도록 하겠다.  Rate LimitAPI 사용이나 특정 기능에 있어서 Rate Limit를 해야하는 경우가 종종 있다.- 하루에 한 번만 참여 가능한 이벤트- 인증 문자를 받고나서 다음 인증 문자를 받으려면 1분의 대기시간을 주기등의 .. 2022. 10. 2.
[채팅 시스템] 특정 키워드에 대해 시스템 메세지 보내기 채팅 서비스가 처음에는 단순히 유저 간에 메세지를 주고받기 위함이었어도, 서비스가 고도화 되다보면 꼭 채팅 도메인과는 관련되지 않아도 서비스와 관련하여 유저의 주의를 끌기 위해 몇가지 기능이 추가될 수 있다. 그 중 하나로는 채팅방에 특정 키워드가 발생했을 때 해당 채팅방에 시스템 메세지를 보내는 기능이 있다. 실제 사례를 예로 들자면 당근마켓의 채팅 시스템 메세지 기능이 있을 것이다. 이처럼 채팅 도메인과는 약간 동떨어졌지만 채팅 시스템과 통합되어야하는 기능에 대해 어떤 식으로 시스템을 설계할지에 대해 정리해본다. 먼저 채팅을 위한 웹소켓 서버의 경우 Scaling을 위해 Message Queue나 Redis Pub/Sub 등을 사용하여 다른 웹소켓 서버와 연결된 유저에게 메세지를 보낼 것이다. 위.. 2022. 9. 13.