공통/인프라 & 시스템 설계

    [CDN] CDN이란? CDN의 구성요소 간단 정리

    CDN 멀티 클라우드의 네트워크가 리전과 가깝고 폐쇄된 망이 아닌, 여러 개의 리전에 흩어진 여러 개의 클라우드를 연결해야 할 때 CDN을 활용할 수 있음. 3-1. CDN이란? 리소스를 적재적소에 분배하고 가까운 분배지로 통신 경로를 연결하는 방법으로 최적화 ⇒ 많은 Edge 캐시 서버 중, 사용자와 가장 가까운 라우터에 연결된 서버. 대용량의 모바일 게임 다운로드, VOD 영상 재생, Live 시청 등 다양한 콘텐츠를 사용자에게 원활하게 전달하기 위해서 CDN을 사용. 대표적으로 AWS CloudFront이 있음. 3-2. CDN의 구성 요소 Edge (엣지 로케이션) 캐시 서버가 존재하는 데이터 센터 전 세계 각지에 수 많은 엣지가 분포되어 있는데 요청이 들어오는 곳에 가장 가까운 엣지로 라우팅 하..

    [데이터 중심 애플리케이션 설계 정리] 스트림, Dual Write, CDC 정리

    데이터 중심 애플리케이션 설계 중 일부를 정리한 내용입니다. 데이터베이스와 스트림 이벤트는 특정 시점에 발생한 사건을 기록한 레코드. 데이터베이스에 기록하는 것도 이벤트가 될 수 있다. (데이터베이스에 뭔가를 기록한다는 사실은 캡처해서 저장하고 처리할 수 있는 이벤트) 복제 로그는 데이터베이스 기록 이벤트의 스트림이다. 시스템 동기화 유지하기 데이터 저장과 질의, 처리 요구사항을 모두 만족하는 단일 시스템은 없고, 실제로 대부분의 애플리케이션이 요구사항을 만족하기 위해 몇 가지 다른 기술의 조합이 필요하다. 사용자 요청에 대응하기 위한 OLTP 데이터베이스, 공통 요청의 응답 속도를 높이기 위한 캐시, 검색 질의를 다루기 위한 전문 색인, 분석용 데이터 웨어하우스 등이 각 예로, 이 시스템 각각은 데이터..

    [데이터 중심 애플리케이션 설계 정리] 분산 시스템의 어려움, 정족수, 펜싱 토큰 개념

    데이터 중심 애플리케이션 설계 8장. 분산 시스템의 골칫거리를 정리한 내용입니다. 분산 시스템에서는 공유 메모리가 없고 지연 변동이 큰 신뢰할 수 없는 네트워크를 통해 메시지를 보낼 수만 있을 뿐이며 부분 장애, 신뢰성 없는 시계, 프로세스 중단에 시달릴 수 있다. 분산 시스템의 어려움 네트워크로 패킷을 보내려고 할 때는 언제나 패킷이 손실되거나 임의대로 지연될 수 있다. (마찬가지로 응답도 손실되거나 지연될 수 있으므로 응답을 받지 못하면 메시지가 전달됐는지 아닌지를 알 수 없다) 노드의 시계는 다른 노드와 심하게 맞지 않을 수도 있고, 시간이 갑자기 앞뒤로 뛸 수도 있다. 그리고 시계의 오차 구간을 측정할 좋은 수단이 없을 가능성이 크므로 분산 시스템에서 시계에 의존하는 것은 위험하다. 프로세스는 실..

    [대규모 시스템 설계 기초 정리] 피드 시스템 설계

    피드 시스템이란? 지속적으로 업데이트되는 스토리들로, 페이스북 피드, 인스타그램 피드, 트위터 타임라인들을 예시로 들 수 있다. 피드 발행 흐름 상세 설계 포스팅 전송(팬아웃 서비스) 팬아웃이란, 어떤 사용자의 새 포스팅을 그 사용자와 친구 관계에 있는 모든 사용자에게 전달하는 과정. 팬아웃에는 두 가지 모델이 존재 Push 모델 (쓰기 시점에 팬아웃 하는 모델) Pull 모델 (읽기 시점에 팬아웃 하는 모델) Push 모델 쓰기 시점에 팬아웃 하는 모델 새로운 포스팅을 기록하는 시점에 뉴스 피드를 갱신하게 된다. 포스팅이 완료되면 해당 사용자(수신자)의 캐시에 해당 포스팅을 기록하는 것. 장점 뉴스 피드가 실시간으로 갱신되며 친구 목록에 있는 사용자에게즉시 전송된다. 뉴스 피드를 읽는 데 드는 시간이 ..

    [데이터 중심 애플리케이션 설계 정리] 6. 파티셔닝

    복제 vs 파티셔닝 복제 동일한 데이터 복사본 여러 개를 다른 노드에 저장 파티셔닝 데이터를 파티션으로 나누어 저장 (이러한 작업을 샤딩이라고 한다) 보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러 노드에 저장한다. 각 레코드는 정확히 한 파티션에 속하더라도 이를 여러 다른 노드에 저장해서 내결함성을 보장할 수 있다. 파티션을 하는 이유? 파티션을 하는 주된 이유는 확장성이다. 비공유 클러스터에서 다른 파티션은 다른 노드에 저장될 수 있다. 따라서 대용량 데이터셋이 여러 디스크에 분산될 수 있고 질의 부하는 여러 프로세서에 분산될 수 있다. key-value 데이터 파티셔닝 대량의 데이터를 파티셔닝 하려 할 때, 어떤 레코드를 어느 노드에 저장해야 할까? 파티셔닝의 목적은 데이터와 질의 부..