Post

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 정리 1장 규모 확장성

가상 면접 사례로 배우는 대규모 시스템 설계 기초 리뷰

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 정리 1장 규모 확장성

가상 면접 사례로 배우는 대규모 시스템 설계 기초

1장 사용자 수에 따른 규모 확장성

캐시

캐시는 데이터가 잠시 보관되는 곳으로 데이터베이스보다 훨씬 빠르다. 데이터베이스의 부하 개선을 위해 사용한다.

  • 캐시를 사용할 때 주의 할 점

    무상태(Stateless) 웹 계층

수평적으로 확정하는 방법을 고민하는 순서이다. 상태 정보( 사용자 세션 정보)를 웹 계층에서 제거하여야한다. 바람직한 전략은 상태 정보를 관계형 데이터베이스나 NoSQL같은 지속성 저장소에 보관하고, 필요할 때 가져오도록 하는 것이다. 이렇게 구성된 웹 계층을 무상태 웹계층이라 부른다.

Image

1장에서 말한 내용을 적용한 아키텍처이다.

  • 웹 서버의 분산, 데이터 베이스의 분산
  • 캐싱
  • 메시지큐
  • 로그, 메트릭, 자동화 등 DevOps 적인 성향의 툴
  • CDN
  • 로드밸런

    데이터 베이스의 확장

데이터 베이스의 확장에는 수직적 확장 (스케일업), 수평적 확장(스케일 아웃)이 있다.

수직적 확장 - 스케일 업

기존 서버에 고성능 자원을 증설하는 방법이다.

  • 고성능 자원이라도 한대의 서버로는 감당하기 어려운 한계점이 있다.
  • SPOF의 문제가 크다.
  • 비용이 많이 든다. 고성능일 수록 가격이 올라가기 마련이다. 수평적 확장 - 스케일 아웃

DB의 수평적 확장은 수로 샤딩(Sharding)이라고도 부르는데 서버를 추가함으로써 부하를 줄이고 성능을 향상시는 작업이다. 샤드는 분할된 데이터베이스에 특정 정책에 따라 데이터를 저장하는 공간을 정한다. 예를 들어 User_id % 4의 정책이라면 나머지값으로 4개의 데이터 베이스 중 어디에 저장되는지 정하는 보관 방식이다. 샤딩 키

샤딩 키란 데이터가 어떻게 분산될지 정하는 하나 이상의 컬럼으로 구성된다. User_id%4의 경우 user_id가 샤딩 키가 된다. 데이터를 고르게 분배할 수 있는 키를 정하는 것이 샤딩의 핵심 기술이다.

  • 데이터의 재 샤딩 : 재 샤딩은 다음과 같을 때 필요하다.
  • 유명 인사 문제 : 핫스팟 키 문제라고도 불리는 문제는 샤드의 질의가 집중되어 서버에 과부하가 걸리는 문제이다. 샤드에는 Read연산 때문에 과부하가 걸리는 문제이다.
  • 조인과 비정규화 : 일단 하나의 데이터베이스를 여러 샤드 서버로 쪼개고 나면, 여러 샤드에 걸친 데이터를 조인하기가 힘들어진다. 이를 해결하는 한 가지 방법은 데이터베이스를 비정규화 하여 하나의 테이블에서 질의가 수행될 수 있도록 하는 것이다.

    결론

Image

This post is licensed under CC BY 4.0 by the author.