로그를 사랑해 - 1장

김민석·2023년 2월 1일
0

로그를사랑해

목록 보기
1/4

1장 들어가며

로그 : 다양한 시스템의 핵심적인 추상체

분산시스템의 로그 작동 원리 → 개념 구체화 → 데이터 통합, 엔터프라이즈 아키텍처, 실시간 데이터 처리, 데이터 시스템 설계

1.1 로그란 무엇인가

  • 퇴화한 로그

로그 : 운용 중인 장비의 특성 이해하기 위한 쿼리, 그래프의 입력 값 으로 쓰임

여기서 로그 : DB나 시스템 분야에서 커밋 로그, 저널에 가까운 개념

시간 순으로 덧붙이기만 가능한 레코드 시퀀스

  • 추가된 순서대로 저장
  • 로그 엔트리 번호가 고유키
  • 왼쪽에서 오른쪽으로 읽음
  • 레코드 배열 순서가 곧 시간
  • 특정한 물리적인 시간 개념과는 별개의 속성을 갖게 됨(분산 시스템에서 중요한 핵심)

파일 : 바이트 배열

테이블 : 레코드 배열

로그 : 레코드가 시간순으로 정렬된 파일이나 테이블 중 하나

중요한점! 로그를 단순한 텍스트 파일이 아닌, 추상화된 데이터 구조로 봐야한다

로그 : 언제 무슨 일이 일어났는지 기록하는, 특정한 목적이 있다!!(분산 데이터 시스템의 핵심)

1.2 데이터 베이스에서의 로그

IBM SYSTEM R 시절 로그 : 데이터베이스에서 장애가 발생하면 데이터 구조와 인덱스를 동기화 시키는 용도. 데이터 구조에 어떤 변경을 하기 직전 변경될 레코드의 이력을 남겨두기 위해

로그 : 발생한 일을 기록한 레코드

각 테이블이나 인덱스 : 이러한 이력(로그)을 유용한 방향으로 투영시킨 결과물

로그 : 보존데이터 이므로 시스템 장애가 발생시 다른 영속적인 데이터 구조를 복구하는 가장 확실한 소스

이후 로그는 ACID를 구현하기 위한 용도 → 데이터베이스 간 데이터를 복제하는 도구로 사용 범위 확대

일부분의 DB에서 슬레이브 DB로 로그 덩어리를 전송하는 전용 프로토콜이 있음.

슬레이브 DB는 로그 데이터를 받아 자신의 로컬 데이터 구조를 마스터 DB와 일치 시킴.

오라클은 로그를 일반적인 데이터 구독 장치로 상품화 시켜 자사 제품에서 로그를 구독할 수 있게 하였고, 마이시퀄과 포스트그레에도 이와 유사한 기능이 있음(슬레이브가 로그를 구독하여 마스터와 동기화함)

로그의 용도

  1. 다른 사본으로 데이터를 전송하기 위한 발행자/구독자 장치
  2. 여러 개의 사본에 순서대로 업데이트를 적용하기 위한 데이터 동기화 장치

로그 : 다양한 유형의 메시징이나 데이터 흐름, 실시간 데이터 처리를 가능케 한 이상적인 추상체

1.3 분산 시스템에서의 로그

분산 시스템에서 로그 중심적인 접근 방법 : 기계 복제 원리라는 단순한 이론에서 비롯

2개의 똑같은 확정적 프로세스가 똑같은 상태에서 시작하여 똑같은 입력을 순서대로 받는다면, 똑같은 결과를 산출하고 똑같은 상태로 종료될 것

확정적 : 프로세스가 타이밍에 의존하지 않고 다른 대역 외입력이 결과에 영향을 미치지 않음

프로세스의 상태 : 처리 후 기계, 즉 메모리나 디스크에 남아있는 데이터

로그의 역할 : 자신을 입력받아 처리할 각 사본이 동기화될 수 있도록 입력 스트림에서 모든 비확정성을 짜내는것(짜내는것이 뭔말임)

구글 번역 : 여기서 로그의 목적은 입력 스트림에서 모든 비결정성을 짜내어 이 입력을 처리하는 각 복제본이 동기화 상태를 유지하도록 하는 것입니다

분산 시스템을 설계하는 기본 토대

로그와 결합한 타임스탬프로 사본의 전체 상태도 포착 가능

이산적이고, 이벤트 driven 적인 시간을 기준으로 다른 기계 간의 상태를 쉽게 비교

1.3.1 로그 중심 설계의 다양성

모든 것이 일치한다면 원본과 사본의 실행결과는 같다!!

업종마다 차이

  • DB 전문가는 물리적 로깅과 논리적 로깅을 구분
  • 물리적 로깅 : 로우 단위 변경 내용 기록
  • 논리적 로깅 : 로우 뿐만 아니라 변경을 일으킨 SQL 명령문 까지 로그에 포함하는 구문 로깅

분산 시스템을 하는 사람들의 처리와 복제에 관한 접근 방식 두 가지

  1. 상태 기계 복제 모델 : 활성-활성 모델. 서버 요청을 로깅 후 각 복제 프로세스가 로깅된 순서대로 처리하는 방식
  2. 프라이머리 - 백업 모델 : 복제 프로세스 중 하나를 리더로 선정. 리더 프로세스가 접수 순서대로 요청을 처리 그 결과 발생한 상태 변화를 로깅, 다른 복제 프로세스들은 리더가 로깅한 상태를 스스로 적용 동기화, 리더가 잘못될 경우 언제라도 그 자리를 대신할 준비를 함

프라이머리 - 백업 : 1. 요청 → 2. 마스터 상태변화 로깅 → 3. 로그를 읽어 슬레이브 적용

상태 기계 복제 : 1. 로그에 쓰기 → 2. 모든 피어에 적용

1.3.2 예제

초기 값이 0인 계산기 서비스

프라이머리-백업 모델 예제 : 마스터에 처리된 결과 값을 로깅함(x+5, y*2 같은 명령문이 아닌 x=1,y=6 같은 결과값)

1.3.3 로그의 일치화

분산 로그 : 일치화 문제를 다루기 위한 데이터 구조

로그 : 다음에 추가될 값에 대한 인련의 결정 프로세스

팍소스, 뷰스탬프 : 로그가 더 중요한 애들

로그 : 간단한 단일값 레지스터와 달리, 자연 발생적 추상체

로그의 추상화 개념 : 상품화된 구현 재료

로그 : 가장 확실하고 성능이 뛰어난 인터페이스 상품

1.4 변경로그 101 : 테이블과 이벤트는 동전의 양면과 같다

변경 로그와 테이블, 둘 사이에는 동전의 앞뒷면 같은 흥미로운 양면성이 있다.

로그 : 은행 시스템의 차/대변 계정 목록

테이블 : 현재 계좌 잔액

테이블 : 정지된 상태의 데이터를 담아둠

로그 : 변경된 내용을 포착

역으로 실행한다면 : 로그만 있으면 과거의 데이터도 살릴 수 있고 모든 과거를 복원시키는 백업 마술

소스 버전관리 : 데이터베이스 버전관리와 밀접한 관계가 있음

버전 관리 시스템의 패치 = 로그

체크 아웃된 소스 코드의 스냅 샷 = 테이블

버전관리 시스템도 로그를 통해 복제(PC에서 업데이트하면 서버에서 패치를 끌어와서 로컬 스냅샷에 반영)

데이토믹 : 로그 중심적 데이터베이스

1.5 다음 장에서는

데이터 통합

조직의 전체 데이터를 모든 스토리지와 처리 시스템에서 쉽게 접근하여 사용할 수 있게 함

실시간 데이터 처리

파생된 데이터 스트림 연산

분산 시스템 설계

로그 중심적인 설계로 시스템을 단순화하는 방법

앞에 세 가지 모두, 로그를 하나의 스탠드얼론 서비스로 바라보는 인식에서 비롯.
지속적이면서 재연가능한 이력 데이터를 생성하는, 로그의 단순한 기능만으로도 유용함
다수의 기계를 확정적인 방식으로, 각자에게 맞는 비율로 이력을 재생시키는 로그의 핵심 능력

profile
INFP 이거나 INTP 입니다

0개의 댓글