Home 5장 인프라를 지탱하는 응용 이론
Post
Cancel

5장 인프라를 지탱하는 응용 이론

5.1 캐시

5.1.1 캐시란?

캐시(cache)는 숨기는 장소 라는 의미를 가지고 있다. 컴퓨터 세계에서 캐시는 사용 빈도가 높은 데이터를 고속으로 액세스할 수 있는 위치에 두는 것을 의미한다. CPU의 1차캐시나 2차캐시, 저장소 캐시, OS 페이지 캐시, 데이터베이스 버퍼 캐시 등 광범위하게 캐시 기술이 사용되고 있다.

[특징]

  • 일부 데이터를 데이터 출력 위치와 가까운 지점에 일시적으로 저장한다.
  • 데이터 재사용을 전제로 한다.

5.1.2 어디에 사용되나?

브라우저 캐시는 웹 브라우저가 접속한 페이지를 캐시하는 것이다. 이를 통해 웹 서버 접속을 줄이고 브라우저 표시를 고속화할 수 있다. 또 웹 서버와 클라이언트 사이에 캐시 서버를 배치하는 방법이 있다. 요즘에는 CDN에 웹 콘텐츠 캐시를 배치하는 구조를 이용하기도 한다.

5.2.3 정리

캐시의 주요 장점

  • 데이터에 고속으로 액세스할 수 있다.
  • 실제 데이터에 대한 액세스 부하를 줄일 수 있다.

주의할 점으로는 캐시는 고속으로 액세스할 수 있지만 데이터를 잃을 위험이 있어서 캐시 데이터가 손실돼도 괜찮은 경우에 주로 사용한다.

케시가 적합한 시스템은 1.참조 빈도가 높은 데이터 2.캐시의 데이터가 손실돼도 문제가 없는 시스템

캐시가 부적합한 시스템은 1.데이터 갱신 빈도가 높은 시스템, 2.대량의 데이터에 액세스하는 시스템

5.2 끼어들기

5.2.1 끼어들기란?

어떤 원인으로 인해 지금 하고 있는 일을 중단하고 급히 다른 일을 하는 것을 끼어들기라고 한다. 방해한다라는 뉘앙스가 들 수 있지만 급한 일을 먼저 하도록 CPU에 알리는 중요한 역할을 한다.

예) PC에서 애플리케이션이 처리를 하고 있는 동안에도 키보드를 누르면 문자가 입력된다., 사람의 경우 문서작업 도중 고객이 전화를 한 경우 문서작업을 일단 중지하고 전화를 받아 고객 문의를 처리한다.

5.2.2 자세히 보자

CPU에서 애플리케이션 프로세스나 스레드 처리를 하고 있더라도 키보드로 정보가 입력되면 끼어들기가 발생해서 CPU가 짧은 순간 다른 처리를 한 후 다시 원래 처리를 진행한다.

끼어들기에는 다양한 종류가 있다. 정기적으로 해야 할 일을 알려 주는 타이머 끼어들기, 데이터를 메모리에 모두 읽었다는 것을 CPU에게 알려 주는 끼어들기, 현재 동작중인 프로그램에 중대한 에러가 발생했을 때 급하게 프로그램 프로세스를 정지시키는 예외 처리 등이 있다.

5.2.3 어디에 사용되나?

브라우저가 웹 사이트에 접속하면 서버의 NIC에 이더넷 프레임이 도착하고, NIC를 통해 CPU에 끼어들기가 발생한다. 입출력 장치가 CPU에게 통지하는 끼어들기를 하드웨어 끼어들기라고 한다.

프로세스나 스레드가 허가되지 않은 메모리 위치에 액세스하려고 하면 조각화(Segmentation) 위반이라 불리는 예외가 발생해서 OS에 의해 프로세스가 강제 종료된다. 이것도 끼어들기의 일종으로 예외나 소프트웨어 끼어들기 등으로 불린다.

5.2.4 정리

끼어들기는 어떤 일이 발생하면 연락하는 이벤트 주도 구조다. CPU가 정기적으로 Polling을 해서 입출력 장치 상태를 확인하는 방법도 있지만 간격이 길면 디스크 I/O가 완료되도 금방 알아차리지 못하고, 반대로 간격을 짧게 하면 CPU를 쓸데 없이 많이 사용하게 된다. 따라서 폴링보다 끼어들기를 이용해 제어하는 것이 효율적이다.

5.3 폴링

5.3.1 폴링이란?

폴링은 정기적으로 질의하는 것을 가리킨다. 정기적으로 질의함으로써 상대가 어떤 상태인지, 어떤 요구를 가지고 있는지 등을 알 수 있다.

[특징]

  • 질의 방향이 단방향이다.
  • 질의는 일정 간격을 따라 정기적으로 발생한다.

[주요 장점]

  • 반복만 하면 되기 때문에 프로그래밍이 쉽다.
  • 상대가 응답하는지 확인할 수 있다.
  • 모아서 일괄적으로 처리할 수 있다.

반대되는 구조로 이벤트 주도 또는 끼어들기가 있다.

5.3.2 어디에 사용되나?

웹 로직 서버의 내부 감시기능으로 MBean이라는 자바 객체를 이용해 구현되어 있다. 미리 생성된 연결이 정상인지를 웹로직이 정기적으로 감시한다. 또 다른 예로 NTP(시간동기) 처리다. 정기적으로 실시해서 자신의 시간이 맞는지를 확인하는 구조다.

5.3.3 정리

적철한 처리 1.일정 간격으로 처리를 실행하면 좋은 처리로 일련의 처리를 할 때 전처리와 후처리가 연계되지 않는 경우에 적합, 2.감시

부적합한 처리 1.상태가 아닌 입력 내용에 따라 실행 내용을 변경하는 처리, 2.처리 우선순위를 정해야 하는 처리

5.4 I/O 크기

5.4.1 I/O크기란?

I/O 크기는 1회의 I/O에 필요한 사이즈, 즉 데이터를 주고 받을 때 사용되는 I/O의 크기를 의미한다. I/O 크기는 인프라 설계나 성능 튜닝에 있어 중요한 개념이다.

[특징]

  • 물건을 운반할 때는 상자에 넣으면 효율적으로 관리할 수 있다.
  • 운반하는 양에 따라 상자 크기를 선택하면 효율적으로 운반할 수 있다.

5.4.2 어디에 사용되나?

오라클 DB 예

오라클 DB가 데이터 파일을 읽기/쓰기하는 최소 단위를 데이터 블록이라고 한다. 블록 크기가 8KB이면 1바이트의 데이터를 읽는 경우에도 8KB를 읽는다. 따라서 I/O 크기가 작을 때는 블록 크기를 작게, I/O 크기가 크면 블록 크기를 크게 해야 I/O 효율이 좋아진다. 오라클에서 파일 시스템 블록 크기가 7KB이고 오라클 DB의 블록 크기가 8KB라고 가정하면, 오라클 DB가 1블록(8KB)을 읽으면 디스크에서 14KB를 읽어서 그중 6KB는 사용하지 않는다. 반대로 DB 블록 크기보다 파일 시스템 블록 크기가 큰 경우도 마찬가지이다.

네트워크 예

145~147p

5.4.3 정리

큰 상자는 대량의 데이터를 빠르게 운반할 수 있고, 작은 상자는 소량의 데이터를 빠르게 운반할 수 있다.

5.5 저널링

5.5.1 저널링이란?

저널은 트랜잭션이나 매일 갱신되는 데이터의 변경 이력을 가리킨다. 그리고 저널을 남겨두는 것을 저널링이라고 한다.

[특징]

  • 데이터 자체가 아닌 처리(트랜잭션) 내용을 기록한다.
  • 데이터 일관성이나 일치성이 확보되면 필요 없어진다.
  • 데이터 복구 시 롤백, 롤포워드에 이용된다.

5.5.2 어디에 사용되나?

리눅스의 ext3 파일 시스템

ext3 파일 시스템은 저널링 기능을 갖추고 있고, 파일 I/O도 트랜잭션으로 간주된다.

오라클 DB

오라클 DB의 저널은 REDO 로그라 불린다. 트랜잭션 종료시에 버퍼가 디스크에 기록되지만 기록중인 REDO 로그가 파손된 경우에는 데이터를 최신 상태로 복원할 수 없다.

5.5.3 정리

  • 시스템 장애 시 복구가 빠르다
  • 데이터 복제보다도 적은 리소스를 소비해서 데이터를 보호할 수 있다.

적합한 시스템 1.데이터 갱신이 발생하는 시스템

부적합한 시스템 1.데이터 안전성보다 성능을 요구하는 시스템

저널은 사용한 복구 방법으로 롤백: 저널을 읽어서 실제 데이터 정보를 과거로 되돌리는 처리, 롤 포워드: 저널을 읽어서 실제 데이터 정보를 앞으로 진행시키는 처리이다. 이 처리는 트랜잭션 단위로 실행된다.

주의점으로 저널 데이터는 메모히의 버퍼에 일단 저장되어 디스크에 기록되지 않은 경우 장애 발생시 잃을 수 있다. 또 트랜잭션 단위로 일치성을 보증하기 때문에 트랜잭션 도중에 장애가 발생하면 종료되지 않은 트랜잭션은 파괴된다.

5.6 복제

5.6.1 복제란?

복제는 DB나 저장소 등에서 자주 사용되는 기술이다. 대규모 웹 서비스에서는 대량의 사용자 접속에 대비해서 동일 데이터를 여러 서버에 복제해서 부하분산을 하기도 한다.

[특징]

  • 장애 시 데이터 손실을 예방할 수 있다.
  • 복제를 이용한 부하 분산이 가능하다.

[장점]

  • 사용자가 데이터에 액세스할 때 복제한 것이라는 것을 의식할 필요가 없다.
  • 복제 데이터를 캐시처럼 사용할 수 있다.

5.6.2 어디에 사용되나?

  1. 저장소 복제 : 블록 단위로 증감 데이터만 복제 위치에 반영해서 데이터 전송량을 줄인다.
  2. MySQL 복제 : 데이터 추가, 갱신, 삭제 등의 변경 처리를 복제 측으로 보낸다. 복제를 통해 데이터의 최종 복사본이 다른 곳에 생성되며, 이 복사본을 캐시처럼 사용할 수도 있다.

5.6.3 정리

적합한 시스템

  1. 데이터 손실을 허용하지 않고 장애시 복구 속도가 빨라야 하는 시스템
  2. 데이터 참조와 갱신 부분이 나뉘어져 있으며 참조가 많은 시스템

부적합한 시스템

  1. 데이터 갱신이 많은 시스템

5.7 마스터-워커

5.7.1 마스터-워커란?

마스터-워커는 주종 관계를 가리킨다. 이 구조에서는 한 명이 관리자가 돼서 다른 모든 것을 제어하게 된다. 반대로 상호 관리라는 의미에서 피어 투 피어 관계도 성립한다.

유한한 리소스를 관리할 때는 어떤 한 사람이 관리하는 것이 효율적이다. 같은 리소스를 여러 사람이 분담해서 관리할 때는 ‘누가’, ‘어디까지’ 감시하고 있는가에 대한 정보를 알 필요가 있다.

[특징]

  • 마스터-워커는 상호 접속 관계의 일종으로, 한 사람이 관리자가 돼서 모든 것을 제어한다.
  • 마스터-워커의 반대가 피어 투 피어다.

5.7.2 어디에 사용되나?

오라클 Real Application Clusters

오라클 RAC의 마스터-워커 구성을 살펴보면 RAC에서는 여러 대의 물리 서버가 클러스터 구성으로 연결돼 있다. 특정 서버가 마스터가 되는 것이 아니라 모두가 대등한 관계라서 특정 서버가 다운돼도 데이터베이스 전체 가용성에는 영향을 주지 않는다.

5.7.3 정리

장점

  • 관리자가 한 명이기 때문에 구현이 쉽다.
  • 워커 간 처리를 동기화할 필요가 없기 때문에 통신량이 줄어든다.

단점

  • 마스터가 없어지면 관리를 할 수 없다.
  • 마스터의 부하가 높아진다.

5.8 압축

5.8.1 압축이란?

디지털 데이터는 압축을 할 수 있다. 압축 기술은 이미지 파일이나 음악 파일, 그리고 대부분의 통신 기술 등 거의 모든 곳에 사용되고 있다. 이불 정리를 할때 공기로 인해 부피가 커져 불편하다. 수납 시에 이런 낭비된 공간을 제거함으로써 이불을 압축할 수 있다. 그리고 디지털 데이터도 이런 쓸데 없는 공간을 줄이기 위해 압축을 사용하고 있다.

5.8.2 자세히 보자

디지털 데이터 압축의 기본은 중복 패턴 인식과 그것을 변경하는 것이다. zip 파일로 압축시 어떤 파일은 크기가 작아지지만 어떤 파일은 그대로인 것을 볼 수 있다. 이것은 같은 패턴이 어느 정도 있느냐에 따라 압축률이 달라지기 때문이다. 같은 패턴이 많을수록 압축률이 높아진다. 압축의 장점은 데이터 크기를 줄이는 것이고, 단점은 처리 시간이 걸린다는 것이다.

가역 압축과 비가역 압축

원래 상태로 복구할 수 있는 가역 압축, 원래 상태로 복구할 수 없는 대신 압축률을 높이는 방식인 비가역 압축이 있다. 가역 압축은 이미 알고 있는 정보를 제거하는 압축 방식이고, 비가역 압축은 자신에게 필요 없는 정보를 제거 즉 최소 필요 정보만 남겨두는 압축 방식이다.

5.8.3 어디에 사용되나?

zip파일, 자바의 jar, war 등등

5.9 오류 검출

5.9.1 오류 검출이란?

컴퓨터 세계에서는 다양한 곳에서 데이터 교환이 발생한다. 그러다 의도치 않은 때에 데이터가 망가질 수도 있다. 이것을 방지하기 위해 오류 검출이라 불리는 구조가 있다.

5.9.2 자세히 보자

  1. 통신 중에 데이터 파손 : 경로 도중에 낙뢰로 전기적인 잡음 등이 발생하면 데이터가 파손될 수 있다.
  2. 칩에서의 데이터 파손

5.9.3 오류를 검출하려면

몇 가지 방법이 있는데 간단한 방법으로 패리티 비트라는 이중화 비트를 부여하는 패리티 체크 방식이 있다.

5.9.4 어디에 사용되나?

서버용 메모리에는 오류 수정 기능이 있는 ECC 메모리라는 것이 있다. 네트워크 통시에서는 프로토콜에 따라 각 계층의 오류 검출용 구조를 갖추고 있다.

5.9.5 정리

오류 검출이란 데이터의 파손 여부를 확인하는 기법으로 파손된 경우에는 데이터를 다시 읽어 재처리할 수 있다. 또 검출과 동시에 파손된 데이터를 복구하는 기법도 있다.

This post is licensed under CC BY 4.0 by the author.

4장 인프라를 지탱하는 기본 이론

6장 시스템을 연결하는 네트워크 구조