본문 바로가기

Cloudwave

(5)
[Cloudwave] CGV 대용량 트래픽 예매 서비스 구현 - 4 서론지난 글에 Redis의 SortedSet을 통해 대기열을 구현하였다.대기열을 통해 서버와 DB에 가해지는 순간적인 부하를 점진적으로 줄 수 있게 되었다. 하지만 현재 Redis 기반 대기열 구성에는 다음과 같은 문제점이 존재한다. 서버의 과부하 위에 부하테스트는 총 90000명의 사용자가 동시에 Redis 대기열에 입장하는 부하테스트이다.아쉽게도 486명이 에러가 생겨 대기열에 입장하지 못했다. 그라파나를 통해 파드의 cpu 모니터링을 보았더니, 서버의 과부하로 인한 대기열 입장 실패였다.Redis의 대기열 입장 역시 서버를 통해 진행되기 때문에 급격한 트래픽에는 제대로 동작하지 못하는 것이다. 서버의 부하를 줄이려고 대기열을 만들었는데, 대기열을 입장하는 것에 트래픽이 몰려 여전히 서버에 과부..
[Cloudwave] CGV 대용량 트래픽 예매 서비스 구현 - 3 서론이전 글에서 비관적 락을 통한 동시성 제어를 했다.이번 회차에선 대규모 트래픽의 제어를 위해 Redis의 SortedSet을 통한 대기열을 구현해보려 한다. 우선, 왜 이런 구조가 필요한지부터 생각해보자. 한번에 트래픽이 몰리면 서버의 부하가 심해진다. 위의 부하테스트는 동시에 3000명의 사용자가 한 자리를 동시에 20번을 예매 시도해 총 60000번의 요청을 하는 시나리오이다.하지만 다 처리하지 못하고 약 16000번의 처리만 한 뒤, 처리를 하지 못했고 다음과 같이 cpu 사용량이 나타났다. 이렇게 되면 어플리케이션이 요청을 처리하지 못한다. cpu 사용량이 일정 수준을 넘으면 오토스케일링을 통해 서버를 늘려 대응할 수 있긴 하지만, 실시간이 중요한 예매 시스템에선 서버가 만들어지는 시간도 치..
[Cloudwave] CGV 대용량 트래픽 예매 서비스 구현 - 2 서론이전 글에서 개발자의 락 명시의 중요성에 대해 알게 되었다.그래서 이번엔 락을 개발자가 직접 명시해 데드락을 방지하고 동시성을 제어해보자.대표적인 방식은 비관적락과 낙관적 락이 있다. 비관적 락 vs 낙관적 락먼저 비관적 락을 먼저 적용해보겠다. 비관적 락은PESSIMISTIC_READPESSIMISTIC_WRITE이 두 가지 락을 제공하는데, s-lock과 x-lock이다. 개발자가 s-lock과 x-lock을 직접 제어해 데드락을 방지하고 정합성을 확실히 보장할 수 있다. @Lock(LockModeType.PESSIMISTIC_WRITE) // 비관적 락을 설정@Query("SELECT s FROM Seat s WHERE s.id = :seatId")Optional findBySeatIdWit..
[Cloudwave] CGV 대용량 트래픽 예매 서비스 구현 - 1 서론Cloudwave에서 프로젝트가 시작되고 한 달이 조금 지나, 개발을 본격적으로 시작하게 되었다.주제는 CJ의 대표적인 사업인 올리브영과 CGV 중에 고르는 것이었는데, 우리 조는 CGV를 고르게 되었다.순간적으로 몰리는 대규모 트래픽을 처리하는 인프라를 설계하고 경험해보고 싶었다. AWS 서비스에 대한 비용을 지원해주기에, AWS 클라우드 상에 인프라를 구성했다.대규모 트래픽을 예상해 트래픽 분산처리를 위해 로드밸런서(alb)와 eks의 노드그룹 오토스케일링을 구성했고,대규모 요청 속 예매 서비스를 안정적이게 운영하기 위해 트래픽 분산,서버 과부하 방지등을 위해 카프카와 레디스를 구성했다.코드로 정합성 문제를 체험하는 것 부터 시작해, 락으로 정합성 문제를 해결하고 Kafka와 Redis로 대기열을..
Jira & Confluence 도입기 CJ에서 진행하는 CloudWave의 실전 프로젝트가 시작되었다.올리브영이나 CGV같은 CJ에서 실제 대규모 트래픽을 동반하는 서비스를 클라우드에서 설계하고 구축하는프로젝트이다.역할을 나누고, 프로젝트의 진행 상황을 상세하게 공유하기 위해 지라와 컨플루언스를 도입하게 되었다. 도입 이유노션도 물론 사용하지만, 경험 상 문서로 활용하는 위키 느낌이어서, 프로젝트의 진행 상황과 이슈 트래킹을 관리하기에는 안맞는다는 생각이 들었다. 따라서 자동화가 잘 돼있는 지라를 써보게 되었다.또한 지라는 깃허브와도 연동이 되서 깃허브의 이슈(PR,commit) 진행 사항들을 한눈에 볼 수 있는 장점이 있는 것 같다. 개발에 관련한 프로젝트가 아니지만, 최소한의 서비스를 위한 개발이 필요할 것이기 때문에 도입 후 긍정적인 ..