생각해보기
인프라 응용 이론에 대해 알아보자 본문
캐시
캐시는 임시 저장소를 의미한다. 사용 빈도가 높은 데이터를 빠르게 접근할 수 있도록 한다.
다양한 곳에서 사용된다(ex. 브라우저 캐시, 캐시 서버 등)
캐시 서버가 있을 때 브라우저 통신
1. 웹 서버에 접속하기 위해 DNS 질의
2. DNS는 웹 서버가 아닌 캐시 서버의 IP 주소를 반환
3. 캐시 서버에 콘텐츠가 있으면 캐시 서버에서 콘텐츠 반환
4. 캐시 서버에 콘텐츠 없으면, 웹 서버에서 취득
이러한 과정을 통해 웹 서버의 부하를 줄일 수 있다
특징
- 일부 데이터를 데이터 출력 위치와 가까운 지점에 일시적으로 저장한다
- 데이터 재사용을 전제로 한다
장점
- 데이터에 고속으로 액세스 할 수 있다
- 실제 데이터에 대한 엑서스 부하를 줄일 수 있다
적합한 시스템
참조 빈도가 높은 데이터
- 몇 번이고 같은 데이터를 참조한다면 캐시를 사용하는 것이 빠르다
부적합한 시스템
데이터 갱신 빈도가 높은 시스템
- 데이터 갱신이 빈번하게 발생하면 갱신마다 캐시를 해야 하기 때문에 바로 액세스 하는 경우와 차이가 없다.
대량의 데이터에 액세스 하는 시스템
- 캐시 크기가 커지면, 캐시에 배치하는 것도 많은 시간이 걸린다. 또한 적중률이 낮을 수 있으므로 적합하지 않다.
주의할 점
데이터가 실제 데이터와 캐시라는 이중 구조로 저장되어 있기 때문에 리소스 소비가 늘어난다
처음에는 캐시 데이터가 없어 원하는 성능이 나오지 않는다
캐시 계층을 만들었기 때문에 성능 문제나 데이터 불일치 문제 발생 시 캐시 계층도 확인을 해야 한다.
캐시를 사용할 때 캐시 손상에 대해 캐시 복구를 해야 한다
인터럽트
어떤 원인으로 인해 지금 하고 있는 일을 중단하고 급한 다른 일을 하는 것이다.
CPU에서 스레드나 프로세스를 처리하고 있을 때 키보드로 정보가 입력되면 CPU가 인터럽트를 수행 후 다시 원래 처리를 한다. 인터럽트에는 다양한 종류가 있다 타이머 인터럽트, 데이터를 메모리에 모두 읽었다는 것을 알려주는 인터럽트, 동작중인 프로그램에 에러가 발생했을 때 프로세스를 정지시키는 예외 처리 등이 있다
폴링
정기적으로 질의하는 것이다.
특징
- 질의 방향이 단방향이다
- 질의는 일정 간격을 따라 정기적으로 발생한다
장점
- 반복만 하면 되기 때문에 간단하다
- 상대가 응답하는지 확인할 수 있다
- 일괄 처리가 가능하다
폴링은 주로 로직이 정상적으로 동작하는지 감시하는 데 사용된다
폴링과 반대되는 것이 이벤트 나 인터럽트 방식이다.
폴링 VS 인터럽트
폴링 적합
- 일정 간격으로 처리를 실행하면 좋은 처리 (메일 서버, 메일이 전송된 후 항상 확일 할 필요가 없다, 메일이 오지 않아도 수신 확인이 동작할 수 있다), 이처럼 전처리와 후처리가 연계되지 않을 때 사용
- 감시 (외부에서 정기적으로 상태를 확인해야 할 때)
인터럽트 적합
- 상태가 아닌 입력 내용에 따라 실행 내용을 변경하는 처리
- 처리 우선순위를 정해야 하는 처리
핑퐁
데이터 파일을 읽고/쓰기를 하난 최소 단위를 데이터 블록이라고 하고, 그 크기를 블록 크기라고 한다. 이때 블록 크기가 8KB라고 가정하면 1바이트의 데이터를 읽는 경우에도 8KB를 읽는다. 따라서 I/0 크기가 작을 때 블록 크기를 작게 I/O 크기가 클 때는 블록 크기를 크게 해야 I/O 효율이 좋아진다
네트워크의 경우 소켓 통신할 때 소켓 버퍼가 만들어진다. 소켓 버퍼는 송신 버퍼와 수신 버퍼가 있다. 이러한 버퍼가 찰 경우 OS는 TCP 세그먼트로 분할되고 TCP 헤더와, IP 헤더, MAC 헤더를 붙여서 이더넷 프레임을 만들어 전송한다.
세그먼트로 분할될 때 MSS를 초과하지 않는 범위에서 분할되고, IP 헤더를 붙인 세그먼트를 MTU라고 한다. 대량의 데이터를 고속으로 통신할 때 이러한 MTU, MSS, 소켓 버퍼의 크기를 튜닝한다
이처럼 데이터의 사이즈에 맞게 효율적으로 데이터 블록의 크기를 정하는 것이 핑퐁이라고 한다.
저널링
저널은 트랜잭션이나 데이터의 변경 이력을 가리킨다. 이러한 저널을 남겨 두는 것을 저널링이라고 한다.
특징
- 데이터 자체가 아닌 처리(트랜잭션) 내용을 기록한다
- 데이터 일관성이나 일치성이 확보되면 없어진다
- 데이터 복수 시 롤백, 롤 포워드에 이용된다
데이터를 처리하는 작업에는 대부분 저널링이 구현되어 있다.
리눅스 ext3(extended file system 3) 저널링

실제 데이터(메타데이터 + 데이터)
저널로그(저널 버퍼로 메타데이터를 관리한다)
트랜잭션 시에 버퍼 정보를 디스크에 기록하지 않기 때문에 버퍼에 있는 최신 데이터를 잃을 수 있다.
오라클 DB 쓰기 처리

적합한 시스템
- 데이터 갱신이 발생하는 시스템
부적합한 시스템
- 데이터의 안전성보다 성능을 요구하는 시스템
롤백과 롤 포워드
트랜잭션 종료를 커밋이라고 하며 실제 데이터가 디스크에 기록돼 있는 것을 보증하는 것이 체크포인트라고 부른다.
롤백은 저널을 읽어서 실제 데이터 정보를 과거로 돌린다. 롤 포워드는 저널을 기준으로 실제 데이터 정보를 앞으로 진행한다. 이 처리들은 트랜잭션 단위로 실행된다.
저널링 주의점
메모리 버퍼에 일단 저장되므로 디스크에 기록이 되지 않았을 때 장애 시 기록을 잃을 수 있다.
저널은 트랜잭션 단위로 일치성을 보장하기 때문에 트랜잭션 도중에 장애가 생기면 트랜잭션을 파괴한다. 따라서 트랜잭션을 길게 잡지 않는다.
COW 구조
'기록할 때 복사 구조'
저널링은 데이터와 증감 정보로 나누어 기록해놓는다.
COW는 증감 정보를 작성하지 않고 갱신한다.
변경이 필요한 부분만 다른 영역에 기록하고, 원 파일과 변경 부분만 조합해서 맵핑 정보를 바꾼다.
이 경우 "모두 처리하거나 발생하지 않거나로 변경"이 진행된다. DB의 트랜잭션 성과 같아지는 장점을 가진다. 하지만 원 데이터가 남아 있으므로 데이터의 크기가 2배로 필요하다.
복제
복사본을 만드는 것을 의미한다. 주로 DB나 저장소에 많이 사용된다. 예를 들어 DB를 마스터-슬레이브 구조로 만들고 마스터에서는 갱신과 참조를 가능하게 하고 슬레이브는 참조만 가능하게 한다. 또한 갱신 시 마스터의 정보를 슬레이브와 동기화한다.
특징
- 장애 시 데이터 손실을 예방할 수 있다
- 복제를 이용해서 부하 분산이 가능하다
적합한 시스템
- 데이터 손실을 허용하지 않고 장애 시 복구 속도가 빨라야 하는 시스템(데이터 손실 예방 가능)
- 데이터 참조와 갱신 부분이 나누어져 있으면서 참조가 많은 시스템(부하 분산 가능)
부적합한 시스템
- 데이터 갱신이 많은 시스템
'IT인프라' 카테고리의 다른 글
인프라와 병목현상 (0) | 2021.10.31 |
---|---|
인프라 구조에 대해 알아보자 (0) | 2021.10.30 |
네트워크와 처리 흐름 (0) | 2021.10.26 |
인프라에 앞선 기본 이론 (0) | 2021.10.22 |
3계층형 시스템을 살펴보자 (0) | 2021.10.21 |