Last-bite

( 2023.10 ~ 2023.11, 6주 )

  • 프로젝트의 주요 내용은 대용량 트래픽 처리, 동시성 제어, 검색 기능 최적화 입니다.
  • 재고 소진에 어려움을 겪는 음식점 그리고, 음식을 저렴하게 구매하고 싶은 손님 양자 모두를 위한 '마감 할인 서비스'를 기획하였습니다.

last-bite

📚 사용 기술 스택

  • Nest.js, MySQL, nGrinder, Github Actions, Kubernetes, Redis, Prometheus, Grafana, ECS, EKS

1. 대용량 트래픽을 견딜 수 있는 유연한 서버 운영

last-bite-architecture_ver3

  • HPA(Horizontal Pod Autoscaler)를 도입하여 CPU 사용량에 기반한 자동 스케일링을 구현, 트래픽 변동에 유연하게 대응하여 항상 최적의 리소스 사용률을 유지.

  • 실시간 모니터링을 통해 시스템의 건강 상태를 지속적으로 추적하고, 개발자가 부재중일 시 알람을 통해 빠른 대처가 가능하게 함.

2. 소켓 IO를 활용한 실시간 알림 기능

주문하기 알림보내기
주문하기 알림보내기

3. Redis를 사용한 빠르고 정확한 예약 서비스.

sequence_diagram ver 3 0

4. 현재 위치를 기반으로 한 음식점 조회 기능. 10가지 카테고리를 기반으로 원하는 종류의 가게를 가까운 순으로 조회

5. 가게의 핫딜 등록 및 예약 관리. 별도의 가게 관리 페이지에서 핫딜 상품의 수월한 등록 및 예약 관리를 지원.

sequence_diagram ver 3 0


🛠️ 해결하고자 했던 핵심 문제

  1. 대용량 트래픽을 견딜 수 있는 유연한 서버 운영

    1-1. Docker / Kubernetes

    • 달성하고자 했던 목표

    • 트래픽에 따라 Scale-out이 가능한 서버 구축

    • 실제 개선 사례

      sequence_diagram ver 3 0

      • Scale-up, Scale-out을 할수록 높고, 안정적인 TPS와 적은 에러율을 확인할 수 있었습니다.
      • Vuser에 맞추어 Scale-up, Scale-out을 진행할 수 있었습니다.
  2. 대용량 트래픽에 대한 동시성 제어

    2-1. Bull Queue

    • 달성하고자 했던 목표

    • 여러 컨테이너에서 들어오는 요청에 대한 작업 순서 정렬

    • 실제 개선 사례

      ver1 0 결과

    2-2. Redis streams

    • 달성하고자 했던 목표

    • 여러개의 컨슈머에서 Queue에 있는 작업을 순차적으로 처리

    • 실제 개선 사례

      ver2 0 결과

      ver2 0 sequence

  3. 캐싱을 통한 성능 향상

    3-1. Redis

    • 달성하고자 했던 목표

    • 주문이 DB에 업데이트 되는 시간 개선

    • 실제 개선 사례

      ver3 0 결과

      ver3 0 sequence

  4. DB 조회 시간 개선

    4-1. 공간 인덱스 적용

    공간 인덱스 적용

    4-2. 단일 인덱스 적용

    단일 인덱스 적용

    4-3. 복합 인덱스 적용

    복합 인덱스 적용