ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터 중심 애플리케이션 설계 10장 - 일괄 처리
    CS/데이터 중심 애플리케이션 설계 요약 2023. 1. 11. 00:01

    파생 데이터

    서로 다른 데이터 시스템을 통합하는 게 힘들다

    원본 데이터를 복제해서 읽기 질의 성능을 높이는 데 사용 (캐시, 반정규화)

     

    개요

    보통 사용자의 요청에 따라 응답하는 형태로 이루어지고 응답 시간 단축에 많은 노력을 기울입니다.

     

    하지만 이외에도 다양한 시스템이 존재합니다.

    1. 서비스(사용자의 요청에 응답)

    2. 일괄 처리(매우 큰 입력 데이터를 받아 데이터를 처리)

    3. 스트림 처리(서비스와 일괄 처리 사이에 존재하는 준실시간 처리 시스템)

     

    여기서 일괄처리는 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션을 구축하는 데 매우 중요한 구성요소입니다.

     

    유닉스 도구로 일괄 처리하기

    유닉스의 철학을 되새겨보며 유닉스가 주는 아이디어와 교훈이 대규모 이기종 분산 시스템으로 그대로 이어집니다.

     

    예를 들어 웹 서버에 사용자가 들어올 때마다 로그 파일에 한 줄씩 추가될 수 있습니다.

    이때 로그를 해석하기 위해서는 로그의 형식을 미리 정의해 놓아야 합니다.

     

    조금 더 진화해서 다양한 도구를 사용하여 로그를 처리하고 트래픽에 대한 보고서를 깔끔하게 만들 수 있습니다.

    유닉스에서도 명령어를 사용하여 가장 인기 높은 5개의 페이지를 뽑을 수 있습니다.

    수 기가바이트 로그 파일을 수 초 내로 처리할 수 있게 됩니다.

     

    유닉스 철학

    유닉스가 연쇄 명령을 사용해 쉽게 로그 파일을 분석할 수 있었던 것은 우연이 아닙니다.

    유닉스의 핵심 설계 아이디어 중 하나이며, 오늘날까지 유효합니다.

     

    1987년에 기술된 유닉스 철학은 아래와 같다.

    1. 각 프로그램이 한 가지 일만 하도록 작성하라

    2. 모든 프로그램 출력이 아직 알려지지 않은 다른 프로그램의 입력으로 쓰일 수 있다고 생각해라

    3. 소프트웨어를 빠르게 써볼 수 있게 설계하고 구축하라

    4. 프로그램 작업을 줄이려면 미숙한 도움보단 도구를 사용하라

     

    sort는 한 가지 일을 잘 해내는 프로그램의 훌륭한 예로 다른 프로그래밍 언어에 포함된 표준 라이브러리보다 확실히 뛰어납니다.

    또한 bash 같은 유닉스 셸을 사용하면 작은 프로그램들을 가지고 놀랄 만큼 강력한 데이터 처리 작업을 쉽게 구성할 수 있습니다.

     

    이런 결합성을 부여할 수 있는 방법은 바로 통합 인터페이스입니다.

     

    통합 인터페이스

    어떤 프로그램과도 연결이 가능하기 위해 프로그램 모두가 같은 입출력 인터페이스를 사용합니다.

    클린 아키텍처 등에서 언급되는 예시처럼 메인 로직에 입출력을 인터페이스로 두어 어떤 입출력이 들어와도 파이프라이닝이 동작하도록 하는 것 같습니다.

     

    유닉스 도구의 가장 큰 제약은 단일 장비에서만 실행된다는 점입니다.

    바로 이 점이 하둡같은 도구가 필요한 이유입니다.

     

     

    맵리듀스와 분산 파일 시스템

    맵리듀스는 유닉스와 유사하지만 수천 대의 장비로 분산해서 실행이 가능합니다.

    하둡 맵리듀스 구현에서 이 파일 시스템은 HDFS(하둡 분산 파일 시스템)이라 하는 구글 파일 시스템을 재 구현한 오픈소스입니다.

     

    아마존 S3, 애저 Blob 같은 객체 저장소도 여러 면에서 유사합니다.

    공유디스크 저장소는 중앙 집중 저장 장치를 사용하는 데 맞춤형 하드웨어를 사용하거나 파이어 채널과 같은 특별한 네트워크 인프라를 사용합니다.

     

    반면 비공유 방식은 데이터센터 네트워크에 연결된 컴퓨터면 충분합니다.

    네임노드라고 부르는 중앙 서버는 특정 파일 블록이 어떤 장비에 저장됐는지 추적합니다.

    개념적으로 매우 큰 하나의 파일 시스템이며 데몬이 실행 중인 모든 장비의 디스크를 사용할 수 있습니다.

     

    장비가 죽거나 디스크가 실패하는 경우를 대비하기 위해 파일 블록은 여러 장비에 복제됩니다.(RAID와 유사)

     

    맵리듀스 작업 실행하기

    맵리듀스는 HDFS 같은 분산 파일 시스템 위에서 대용량 데이터셋을 처리하는 코드를 작성하는 프로그래밍 프레임워크입니다.

    이때 작업은 병렬적으로 수행됩니다.

     

    이때 단일 맵리듀스 작업은 URL당 페이지뷰 수를 구할 수 있지만 가장 인기 있는 URL을 구할 순 없습니다.

    따라서 여러 맵리듀스 작업을 연결하여 사용하는 워크플로를 가집니다.

     

    조인의 구현 방식

    RDB에서는 외래키, 문서 모델에서는 문서 참조, 그래프 모델에서는 간선이라 불리며 연관된 레코드 양쪽 모두에 접근해야 한느 코드가 있다면 조인은 필수입니다.

     

    비정규화로 조인을 주일 수 있지만 일반적으로 완전히 제거하기는 어렵습니다.

    데이터베이스에서는 색인을 활용하지만 맵리듀스에서는 full table scan이 일어납니다. 

     

    가장 간단하게 조인을 구현하는 방법은 full scan을 하면서 모든 사용자 ID마다 원격 서버에 있는 사용자 데이터베이스에 질의를 보내는 것입니다.

     

    하지만 네트워크 통신비용 등으로 상당히 비효율적입니다.

    또한 원격 데이터베이스의 데이터가 변경될 가능성도 존재합니다.

     

    따라서 사용자 데이터베이스의 사본을 들고 해당 사본으로부터 추출하는 방식을 사용합니다.

     

     

    이후의 내용들은 현재로서는 와닿지 않았으며 알아야 할 필요성을 느끼지 못했기 때문에 넘어갔습니다.

    'CS > 데이터 중심 애플리케이션 설계 요약' 카테고리의 다른 글

    9장 - 일관성과 합의  (0) 2023.01.09
    8장 - 분산 시스템의 골칫거리  (0) 2022.12.22
    7장 - 트랜잭션  (0) 2022.12.15
    6장 - 파티셔닝  (1) 2022.12.10
    5장 - 복제  (0) 2022.12.02

    댓글

Designed by Tistory.