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

Jeonniii·2023년 3월 18일
0

규모 확장성

  1. 관계형 DB vs 비관계형 DB
    관계형 DB = 주로 사용하는 RDBMS (mysql,postgre,oracle)
    비관계형 DB = join 불가, 빠른 응답시간, 데이터형식이 주로 문서,사 진..등 에서 많이 쓰임)

  2. 수직적 규모 vs 수평적 규모
    수직적 규모 = 한 서버에 CPU 등 업그레이드 하는 방법
    단점 = 한대의 서버에 무한대로 업그레이드 불가, 서버 장애에
    대응방안 없음

    수평적 규모 = 여러대의 서버를 증설하는 방법

  3. 로드 밸런서
    클라이언트와 웹 서버 사이에서 트래픽을 분배시켜주는 역할
    클라이언트 - 로드밸런서 - 서버(1,2,3)
    서버 1에 과부하가 오거나 장애가 발생하면 트래픽은 서버 2로 모두 간다.
    로드밸런서가 있으면 웹 서버에서 클라이언트의 접속을 직접 처리 하지 않는다.
    서버 이용자가 늘면 서버 1대만 더 추가하면 자동으로 로드밸런서가 트래픽 분배해줌

    클라이언트가 ip로 접속하면 로드밸런서가 서버의 사설 ip주소에 접속
    (사설 ip는 인터넷으로 직접 접속 못함,보안에 용이)

  4. 데이터베이스 서버
    1대의 주 DB서버와 여러대의 부DB서버로 나뉜다.
    모든 쓰기작업(insert,update,delete)는 주 데이터서버(master)에서 진행되며, 모든 읽기작업은 부 데이터서버(slave)에서 진행된다.
    주 데이터 서버는 데이터 정보를 부데이터서버에 공유한다.

    부 데이터서버가 다운되는 경우에는 읽기작업을 주 데이터 서버나 부 데이터 서버에 전달할 수 있지만 주 데이터서버가 다운되는 경우에는 미처 부 데이터 서버로 백업하지 못한 쓰기 데이터가 있을 수 있다. 이런 경우에는 추가적인 복구가 필요하다.
    (데이터베이스 서버는 각기 다른 지역에 놔두어 자연재해로 인한 데이터 삭제에 대비할 수 있음)

  5. 캐시
    웹서버에서 DB에 너무 자주 접속하면 그만큼 성능이 떨어진다.
    이때 자주 사용하는 데이터는 캐시 서버에 저장해두면 DB에서 가져오는 횟수가 줄어들 수 있다.
    웹서버 - 캐시 - DB서버
    (1. 캐시서버에 해당 데이터가 없으면 DB에서 데이터를 가져온 뒤, 캐시서버에 쓰기.)

    캐시 사용할때 고려해야할 점

    1. 캐시데이터와 DB데이터의 일관성 (여러 지역에서 시스템을 확장할때 더 유의해야함)
    2. 캐시메모리의 크기 (주로 과할당함)
    3. 캐시메모리가 부족할때 데이터 방출 방법
      1) 사용된 시점이 제일 오래된 데이터
      2) 캐시메모리에 제일 처음 들어온 데이터
      3) 사용된 빈도가 제일 낮은 데이터
  6. CDN
    지리적으로 배포되어있는 서버의 네트워크
    서버가 있는 지역과 멀리 떨어져있는 사용자는 웹 사이트의 응답속도가 느릴 수 밖에 없는데 CDN을 지역별로 분배하여 정적/동적인 파일을 서버에 담아두고 사용하게 하면 멀리 떨어져있는 사용자는 더 빠른 데이터 전달을 받아볼 수 있다.
    CDN에 저장되는 데이터는 캐시와 비슷한 형식으로 구성된다.

  7. 무상태 웹 계층
    서버가 2대가 있다고 생각했을 때, 사용자1이 서버1에서 인증을 했다면 서버2에서는 인증 불가능 (사용자 인증정보가 서버1에만 있어서)
    이때 서버1과 서버2의 상태값을 공유하는 공유 저장소(NOSQL)가 있으면 서버1이든 서버2든 상태값 공유가능

    이상태에서 데이터 센터가 2개인 경우, IP주소를 할당하는 DNS는 사용자가 있는곳에서 지리적으로 제일 가까운 데이터 센터와 연결하여 웹사이트 접속을 돕는다.

++추후 업데이트 예정
profile
주니어 개발자 #웹개발#fullStack#java#react

0개의 댓글