대규모 스트림 처리
Updated:
대규모 시스템을 설계할 때 가장 중요한 요소 중 하나는 사용자 수이다. 그래서 얼마나 많은 사용자가 시스템을 사용할 것인지 파악하는 것이 중요하다. 이때 가장 중요한 것은 동시 접속자의 요청 수이다.
TPS (Transactions Per Second)는 초당 처리되는 트랜잭션의 수를 나타내는 지표이다. 이는 시스템의 성능을 평가하는 중요한 지표 중 하나로, 특히 대규모 시스템에서 중요한 역할을 한다. TPS는 시스템이 얼마나 많은 요청을 동시에 처리할 수 있는지를 나타내며, 시스템의 처리 능력을 가늠할 수 있게 해준다.
시스템은 TPS를 견딜 수 있어야 한다. 이를 위해서는 일간 접속량이 아닌, 특정 시간대에 초당 접속자 요청량이 가장 많은 시간을 파악해야 한다. 이 정보는 시스템의 용량 계획을 세우는 데 매우 중요하다. 또한 예상치 못한 이벤트로 인해 설계 예상 이상의 요청이 몰린다면 시스템이 중단될 수 있다. 이러한 상황을 대비하기 위해서는 다음과 같은 방법들을 통해 시스템의 안정성을 높일 수 있다.
- 애플리케이션의 수를 늘리는 방법
- 오류 상황에서 사용자가 대기할 수 있도록 대기열을 설정
- 자동 스케일링을 통해 시스템의 자원을 동적으로 할당하여 부하를 분산
시스템이 읽기 전용인지, 쓰기 및 업데이트를 위한 것인지도 중요하다. 이를 파악하고 처리 속도를 빠르게 하여 응답한다면 보다 많은 사용자를 수용할 수 있다.
모든 사용자가 같은 데이터를 요청하는 경우, 이를 해소하기 위해 DB의 데이터를 레디스 같은 캐시에 올려두면 요청에 대한 응답 속도를 빠르게 할 수 있다. 캐시를 사용하면 데이터를 빠르게 제공할 수 있으며, DB의 부하를 줄일 수 있다. 그래서 개인화 데이터가 아니라면 캐시를 사용하여 데이터 로드에 시간 소요를 최소화 하는 방법이 중요하다.데이터에서 필터된 데이터를 가져오는것보다 레디스에서 필터된 데이터를 가져오거나 애플리케이션 로직에서 필터링을 수행하는것이 더 큰 성능상의 이점을 가질 것이다.
엣지 단에서 캐싱을 처리하면 시스템의 요청 처리량이 줄어들어 적은 수의 애플리케이션으로도 요청을 처리할 수 있다. 엣지 캐싱은 사용자와 가까운 곳에서 데이터를 제공하므로 네트워크 지연을 최소화하고, 사용자 경험을 향상시킬 수 있다.
캐싱 전략을 설계할 때는 캐시 갱신 정책도 중요하다. 예를 들어, 공지사항이 자주 변경되지 않는 경우에는 캐시의 유효 기간을 길게 설정할 수 있다. 반면, 변경이 잦은 경우에는 짧은 유효 기간을 설정하거나, 변경 시점에 캐시를 무효화하여 최신 데이터를 제공할 수 있도록 해야 한다. 이러한 캐싱 전략을 통해 시스템의 효율성을 극대화할 수 있다.
데이터 소실의 위험을 줄이기 위해 데이터의 유효성을 지속적으로 검증하고, 데이터가 손실되지 않았는지 확인해야 한다. 또한, 캐시 계층에서 데이터 소실 시 재요청을 통해 데이터베이스에서 데이터를 다시 가져올 수 있도록 해야 한다.
댓글남기기