12월 프로젝트 - ticket reservation

백근영·2019년 12월 30일
1
post-thumbnail

주제

대학교 수강신청, 공연 티켓 예매 등 순간적으로 다수의 요청이 몰릴 수 있는 상황을 견딜 수 있는 서버를 구축해 보려고 한다. 다음과 같은 요구사항을 만족하는 서버를 개발하는 것을 프로젝트의 목표로 설정했다.

  • 효율성
    • 굉장히 많은 요청이 들어와도 빠른 시간 내에 작업을 처리한다.
  • 안전성
    • 데이터의 손실 없이 정확한 데이터를 저장하고, 조회한다.
  • 안정성
    • 어느 순간에 트래픽이 집중되더라도 서버가 터지지 않고 유지되어야 한다.

Focus

멀티스레딩

서버의 효율성 및 안정성을 위해 멀티 스레딩 기법을 이용하기로 결정했다. 본 프로젝트에서 사용하게 될 언어인 코틀린에서는 경량화된 스레드라고 할 수 있는 coroutine을 제공하기 때문에, 이것을 사용하기로 했다.

MSA

서버의 효율성을 위해 세부 기능을 WAS와 Background Worker로 분리해 구현하기로 했다.

  • WAS (Web Application Server)

    WAS는 로그인이나 회원가입 등 간단한 작업을 제외하고는 구체적인 작업에 대한 책임을 모두 worker에게 전가하고 latency를 최소화하는 방향으로 작업했다.
  • Worker

    worker는 위에서 언급한 멀티스레딩을 이용해 실제 티켓 예매 요청을 처리하는 곳이다. 서버의 안전성을 위해, 다수의 스레드가 공유하는 변경 가능한 자원에 대해서는 Mutual Exclusion 기법을 사용해 보았다.

SQS

MSA 구조에서 마이크로 서비스 간 데이터 통신을 안전하고 원활하게 하기 위한 수단으로 AWS에서 제공하고 있는 SQS를 사용하기로 했다. SQS는 리드라이브 정책을 활용하여 data queue와 dead letter queue를 하나씩 두었다.

DynamoDB

Serverless, Fully managed 환경의 DB를 학습해보기 위해 AWS에서 제공하는 dynamodb를 활용하였다.

Structure

profile
서울대학교 컴퓨터공학부 github.com/BaekGeunYoung

0개의 댓글