시스템설계

    [시스템 설계] 데이터센터 이중화

    [시스템 설계] 데이터센터 이중화

    하나의 데이터센터에 있는 서버들을 사용해 시스템을 구축한다고 가정하자. 이때 해당 데이터센터에 문제가 발생하면 시스템이 제대로 동작하지 못하게 된다. 이러한 경우를 대비해 두개의 데이터 센터(혹은 그 이상)을 사용해서 시스템을 구축해보자. 먼저 두개의 데이터 센터를 사용하는 경우, 평소에(장애가 없을 때)는 사용자 입장에서 지리적으로 가까운 데이터센터로 트래픽이 전달된다. 이것을 지리적 라우팅 (geo-routing)이라고 한다. DNS가 요청을 받을 때 사용자 위치에 따라 가까운 IP주소를 변환해준다. 위의 그림에 대한 플로우를 설명하면 다음과 같다. 1. 사용자가 DNS에 도메인네임을 질의한다. 2. DNS는 사용자 위치에 기반하여 가까운 데이터센터의 서버 IP를 반환한다. (geo-routing) ..

    [시스템 설계] 무상태(stateless) 웹 계층

    [시스템 설계] 무상태(stateless) 웹 계층

    시스템의 웹 계층을 수평적으로 확장시키려면 웹 서버에서 상태 정보(세션데이터 등)을 제거해야 한다. 만약 상태정보를 가진 채로 웹 계층이 동작하면, 다음과 같은 일이 발생한다. 사용자가 http요청을 통해 웹에 접속하려고 할 때, 해당 사용자에 대한 상태 정보가 존재하는 서버에만 요청을 해야 결과 값이 반환된다. 로드밸런서는 이러한 기능을 지원하기 위해 고정 세션(sticky session)이라는 기능을 제공하지만, 이는 LB에 부담을 준다. 또한 특성 서버에만 부하가 몰리는 문제가 생길 수 있다. 이러한 문제에서 벗어나기 위해 무상태(stateless) 아키텍처를 구성한다. 웹 계층에서 상태 정보를 떼어내 RDBMS나 NoSQL과 같은 공유 저장소(shared storage)에 저장하고, 필요할 때 가..

    캐시 전략 (Cache Strategy) 종류

    캐시 전략 (Cache Strategy) 종류

    캐싱은 시스템 성능을 높이는 방법 중 하나이다. 캐시를 통해 데이터베이스 부하를 줄이고 빠른 응답속도를 가져올 수 있다. 캐싱을 하는 방법과 종류가 다양한데, 데이터의 유형마다 이를 달리하여 적절한 캐시 방식을 구현하는 것이 좋다. 먼저 두가지의 읽기 정책을 알아보자. 1. Cache-Aside 동작방식 읽기 요청이 들어오면, 애플리케이션이 캐시에 해당 데이터가 있는지 확인한다. 캐시가 있는 경우, Cache Hit이 일어나고 조회가 끝난다. 캐시가 없는 경우, Cache Miss가 일어나고 DB에 조회를 한다. 애플리케이션이 DB에서 데이터를 가져온 후 캐시에 직접 저장한다. (주체가 애플리케이션) 해당 방식을 사용하게 되면, 캐시서버가 죽어도 애플리케이션이 직접 DB에 접근하기 때문에 캐시오류에 탄력..

    [시스템 설계] 서버 응답시간(latency) 개선 (캐시, CDN)

    [시스템 설계] 서버 응답시간(latency) 개선 (캐시, CDN)

    서버 응답시간은 캐시를 붙이고, 정적 컨텐츠를 CDN으로 캐싱하여 개선할 수 있다. 캐시 캐시는 자주 참조되는 데이터를 캐시 서버에 임시 저장하여 요청이 빨리 처리될 수 있도록 하는 저장소이다. 캐시를 사용하면 DB의 부하가 줄어들어 어플리케이션 성능을 향상시킬 수 있다. 다만 캐시 사용시 아래 사항을 고려해야 한다. 캐시 만료 정책: 너무 짧으면 DB에 자주 접근하게 되고, 너무 길면 데이터가 원본가 차이 날 수 있다. 캐시는 TTL(Time To Live)에 명시된 기간동안 캐싱된다. 일관성 유지: 데이터의 원본과 캐시 사본은 같아야 한다. 저장소의 원본을 갱신하는 연산과, 캐시 업데이트 연산이 동시에 일어나지 않으면 이 일관성은 깨질 수 있다. 캐시 서버 분산: 캐시서버를 한대만 두면 Single ..

    [시스템 설계] Failover 시스템 설계

    [시스템 설계] Failover 시스템 설계

    가상면접 사례로 배우는 대규모 시스템 설계 기초 책을 읽고 이해한 내용을 글로 정리하고자 포스팅 한다. 책 내용은 단일 서버부터 시작해서 사용자가 늘어나면 이것도 필요하고, 저것도 필요하고.. 이런식으로 점점 살을 붙여나간다. 책의 흐름과 동일하게 점점 고도화된 시스템을 설계하는 구조로 정리해보려고 한다. 단일 서버 단일 서버는 위와 같이 구성한다. 웹, 데이터베이스, 캐시 등이 모두 단일 서버 1대에서 실행된다. 단일 서버의 동작방식은 다음과 같다. 1. 사용자가 DNS서버에 질의 2. DNS 서버에서 도메인 네임에 대한 IP 반환 3. IP주소로 서버에 HTTP 요청 4. 서버에서 응답 반환 데이터베이스 사용자가 늘어나면 단일서버로는 감당하기가 어려워진다. 따라서 서버를 웹 트래픽 처리 용도(웹 서버..

    Reverse Proxy, Forward Proxy

    Reverse Proxy, Forward Proxy

    회사에서 외부 서버에 접속할 때 매번 프록시를 태워서 접근해야 했다. 프록시에 대해 정확하게 알고있지 않아서 찾아본 내용을 정리해보았다. Proxy란? 프록시(Proxy)란 ‘대리’라는 의미를 가지고 있으며, 서버와 서버사이의 중계역할을 한다. 예를들면 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있도록 한다. 프록시를 쓰는 이유는 보안상의 이유로 직접 통신할 수 없는 두 서버 사이에서 통신을 가능하게 하며, 보안성, 성능, 안정성을 향상시킨다. 일반적으로 클라이언트와 서버사이에 통신을 할 때 중복된 정보를 전달하는 상황이 발생하기도 한다. 이렇게 동일한 요청을 매번 처리하는 것은 리소스 낭비와 서버의 부하로 이어지게된다. 따라서 실제 서버에 도달하기 전 새로운 서버(proxy..