본문 바로가기

# 01/네트워크

그림으로 공부하는 IT 인프라구조-5

반응형

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


5.1 캐시 

5.1.1 캐시란?

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

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

5.1.2 어디에 사용되나?

브라우저 캐시는 웹 브라우저가 접속한 페이지를 캐시하는 것이다. 이를 통해 웹 서버 접속을 줄이고 브라우저 표시를 고속화할 수 있다.
웹 서버 자체 부하를 줄이는 다른 한 가지 방법으로 웹 서버와 클라이언트 사이에 캐시 서버를 배치하는 방법이 있다. 요즘에는 캐시 서버를 서버 앞에 두는 대신에 CDN이라는 웹서버나 다른 네트워크에 웹 콘텐츠 캐시를 배치하는 구조를 이용하기도 한다.

5.1.3 정리

캐시의 장점
- 데이터에 고속으로 액세스할 수 있다.
- 실제 데이터에 대한 액세스 부하를 줄일 수 있다.

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

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

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

주의할 점
- 데이터가 실제 데이터와 캐시라는 이중 구조로 저장되기 때문에 리소스 소비가 늘어난다. 설계 시에는 어떤 데이터를 캐시하는 것이 효과적인지를 검토해야 한다. 
- 시스템 가동 직후 등에는 캐시에 데이터가 없기 때문에 원하는 성능이 나오지 않을 수 있다.
- 캐시 계층이 늘어나기 때문에 시스템 성능 문제나 데이터 불일치 문제가 발생한 경우는 문제 발생을 야기한 용의자가 늘어난다.
- 캐시의 데이터가 손실되는 경우를 대비해서 복구 순서를 설계 시에 확립해야 한다.
- 갱신 데이터(쓰기 데이터)를 캐시할 때 캐시가 여러개 있으면 갱신된 최신 데이터를 서로 뺏으려는 상태가 발생하지 않도록 주의해야 한다.

5.2 끼어들기(인터럽트)

어떤 원인에 의해 지금 하는 일을 중단하고 다른일을 하는것. 급한 일을 먼저 하도록 CPU에 알리는 중요한 역할을 한다. 

5.2.4 정리

끼어들기는 어떤 일이 발생하면 연락하는 이벤트 주도 구조이다. 반면에 CPU가 정기적으로 폴링을 해서 입출력 장치 상태를 확인하는 방법도 있지만, 폴링 간격이 길면 디스트 I/O가 완료됐더라도 금방 알아차리지 못한다. 반대로 간격을 짧게 하면 폴링을 자주 하기 때문에 CPU를 쓸데없이 많이 사용하게 된다. CPU 동작 속도에 비해 입출력 장치의 상태 갱신 빈도가 높지 않다. 따라서 폴링보다 끼어들기를 이용해서 제어하는 것이 효율적이기 때문에 끼어들기를 채택하고 있다.
예) 전화는 끼어들기이고 정기적으로 메일 서버에서 메일을 수신하는 이메일은 폴링이다.

5.3 폴링

5.3.1 폴링이란?

폴링은 정기적으로 질의하는 것을 가리킨다. 정기적으로 질의함으로써 상대가 어떤 상태인지, 어떤 요구를 가지고 있는지 등을 알 수있다. 예전에는 폴링이라고 하면 데이터 전송을 제어하는 것을 의미했지만, 현재는 조금 더 범용적인 의미로 사용되고 있다. 
폴링에는 다음과 같은 특징이 있다.
- 질의 방향이 단방향이다.
- 질의는 일정 간격을 따라 정기적으로 발생한다.

폴링의 주요 장점은 다음과 같다.
- 반복(루프)만 하면 되기에 프로그래밍이 쉽다.
- 상대가 응답하는지 확인할 수 있다. 
- 모아서 일괄적으로 처리할 수 있다.

폴링과 반대되는 것이 이벤트 주도 또는 끼어들기 방식이다. 이것은 요구가 있을 때만 처리하는 구조다. 각각 장단점 및 주의할 점이 있으니 시스템 특성을 고려해서 선택하도록 하자.

5.3.2 어디에 사용되나?

폴링 구조는 간단해서 다양한 처리에 구현돼 있다. 접속 감시는 정기적인 폴링을 이용해서 구현(웹로직 서버) 웹로직의 서버 내 감시는 MBean 이라는 자바 객체를 이용해서 구현돼 있다. 접속 풀이란, AP 서버와 DB 서버 간 연결을 미리 생성해 두어서 애플리케이션이 쉽게 연결을 이용할 수 있게 한 구조다. 미리 생성된 연결이 정상인지를 웹로직이 정기적으로 감시한다.

시간 확인은 정기적으로 실시한다. NTP(시간동기)처리다. 시간동기란, 정기적으로 실시해서 자신의 시간이 맞는지를 확인하는 구조다. 이것도 서버에 정기적으로 질의를 하기 때문에 폴링 구현 중 하나라고 할수 있다.

5.3.3 정리

적합한 처리
- 일정 간격으로 처리를 실행하면 좋은 처리
- 감시

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

네트워크를 경유한 폴링일 때는 처리 지연 시간을 줄이기 위해 폴링 간격을 너무 짧게 잡으면 트래픽 양이 증가하므로 주의가 필요하다. 또한, 서버의 리소스 소비도 늘어난다.

5.4 핑퐁

5.4.1 핑퐁이란?

핑퐁은 인프라 설계나 성능 튜닝에 있어 중요한 개념이다. 상자가 너무 작아서 짐을 운반하기 위해 몇 번이고 왕복해야 하는 상황을 핑퐁이라고 부르기로 한다.

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

5.4.2 어디에 사용되나?

5.4.3 정리

큰 상자는 대량의 데이터를 빠르게 운반할 수 있으며(처리량 중시), 작은 상자는 소량의 데이터를 빠르게 운반할 수 있다(지연시간 중시) 고 할수있다.

5.5 저널링

5.5.1 저널링이란?

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

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

5.5.3 정리

저널링 장점
- 시스템 장애시 복구가 빠르다.
- 데이터 복제보다도 적은 리소스를 소비해서 데이터를 보호할 수 있다.
- 저널링은 데이터 안정성을 높이기 위한 목적으로 사용된다.

적합한 시스템
- 데이터 갱신이 발생하는 시스템
- 데이터를 갱신하는 시스템에서는 트랜잭션 내용을 기록해 둠으로써 데이터 안정성을 높일 수 있다.

부적합한 시스템
- 데이터 안정성보다 성능을 요구하는 시스템
- 저널링을 하면 기록 처리시 오버헤드가 발생한다. 성능을 중시하는 시스템이라면 이 오버헤드를 줄일 방법을 검토해야 한다. 예를 들어, 캐시 서버 등 실제 데이터가 다른 장소에 있는 서버에서는 부적합하다.

저널을 복구하는 처리는 두가지이다.
- 롤백은 저널을 읽어서 실제 데이터 정보를 과거를 되돌리는 처리
- 롤포워드는 저널을 읽어서 실제 데이터 정보를 앞으로 진행시키는 처리다.

이 처리는 트랜잭션 단위로 실행된다.

저널링의 주의점은 다음과 같다.
-저널 데이터는 메모리의 버퍼에 일단 저장된다. 이 정보가 디스크에 기록되지 않으면 장애 시에 잃을 수 있다. 이 때문에 시스템 요건에 따라 버퍼의 디스크 기록 시점을 검토, 조정해야 한다. 하지만 기록 빈도가 많으면 오버헤드도 높아지기 때문에 절충해서 검토해야 한다.
-저널은 트랜잭션 단위로 일치성을 보증하기 때문에 트랜잭션 도중에 장애가 발생하면 종료되지 않은 트랜잭션은 파괴된다. 하나의 트랜잭션 단위가 크면 트랜잭션 도중에 장애가 발생할 가능성이 높다. 따라서 트랜잭션이 길어지지 않도록 설계해야 한다.

5.6 복제

5.6.1 복제란?

복제는 DB나 저장소 등에서 자주 사용되는 기술이다.

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

장점
- 사용자가 데이터에 액세스 할 때 복제한 것이라는 것을 의식할 필요가 없다
- 백업과 달리 실제 데이터가 복제 데이터와 실시간으로 동기화 한다.

5.6.3 정리

적합한 시스템
- 데이터 손실을 허용하지 않고 장애 시 복구 속도가 빨라야 하는 시스템
- 데이터 참조와 갱신 부분이 나뉘어져 있으며 참조가 많은 시스템
예를 들어, 데이터 갱신용 서버가 한 대 있고 복제 위치 서버는 참조용으로만 사용하는 경우, 복제 위치 서버를 여러 대 구축해서 부하를 분산하고 확장성을 향상시킬 수 있다.
(갱신 정보를 참조용에 반영한다.)


부적합한 시스템
- 데이터 갱신이 많은 시스템
- 데이터 갱신이 많은 시스템에 적용하면 복제 대상 데이터가 많아지기 때문에 오버헤드가 높아진다. 또한, 경합 위험을 줄이기 위해 갱신은 한곳에서 하는 것이 바람직하다. 이 때문에 갱신 처리의 부하분산에는 적합하지 않다.

주의사항
- 복제 위치가 많으면 갱신이 많은 시스템과 같이 복제 오버헤드가 높아진다.
- 실제 데이터와 복제 데이터를 완전히 일치시키고 싶으면 복제 데이터의 쓰기 완료 처리를 보장해야 한다. 이 경우 시스템 응답이 악화될 수 있다.
- 시스템 유지 관리나 장애 시에는 복제 데이터도 고려해야 하기 때문에 설계나 운용 난이도가 높아질수 있다.
- 복제 데이터와 실제 데이터의 차이가 커지면 그 차이를 채우기 위한 시간이나 성능도 고려해야 한다.

압축의 기본은 '중복 패턴 인식'과 그것을 변경 하는 것
압축의 장점은 크기를 줄이는 것, 단점은 처리 시간이 걸린다는 것이다.
압축한 데이터를 원래대로 복원할 수 있는 가역 압축과 이미지나 음성 데이터 등에 있는 사람이 인식할 수 없는 부분을 생략하는 비가역 압축이 있다.

압축은 불필요한 공간을 제거해서 데이터 크기를 줄이는 기술을 가리킨다. 크기를 작게 해서 데이터 처리나 교환시 오버헤드를 줄일 수있다는 장점이 있지만, 압축/해제 처리로 인해 리소스 부하고 높거나 처리 시간이 증가한다는 단점도 있다.

5.9 오류 체크/오류 수정

5.9.1 오류 체크/오류 수정 이란?

오류가 생기는 원인
- 통신 중에 데이터 파손
- 칩에서의 데이터 파손

오류 검출
패리티 비트 라는 추가 비트를 부여하는 방법이 있다. 1이라는 수가 홀수 개가되도록 0또는1을 추가한다. 추가된 비트를 패리티 비트라고 한다. 1의 개수가 홀수가 아니면 오류가 있다는 것을 인지 할 수 있다.

오류 검출, 수정의 장점은 오류를 알 수 있다는 것이다. 단점으로는 추가 데이터를 부여해야 하므로 데이터 양이 증가하며, 오류 여부를 알기 위한 계산이 필요해서 처리에 오버헤드가 발생한다는 것이다.

오류 체크는 디지털 데이터의 오류를 스스로 확인하고, 파손되었을 떄 이를 감지하는 것을 의미한다. 오류 수정은 자동으로 복구하는 것을 가리킨다. 구체적인 오류수정 방법에는 여러 가지가 있지만, 이 책에서는 자세히 다루지 않는다. 장점은 상위 계층에서의 오류 관리 없이 데이터 일치성을 일정 수준 보장할 수 있다는 것이다. 단점으로는 체크 기능에 의한 리소스 부하 상승, 알고리즘의 복잡화 등을 들 수 있다.


반응형