캐시(Cache)
캐시란?
- 사용 빈도가 높은 데이터를 고속으로 액세스할 수 있는 위치에 두는 것을 의미.
- 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 저장소.
캐시의 특징
- 일부 데이터를 데이터 출력 위치와 가까운 지점에 일시적으로 저장.
- 데이터 재사용을 전제로 함.
- 캐싱된 데이터에 고속으로 액세스할 수 있음.
- 자주 사용하는 데이터를 캐싱해 둠으로써 실제 데이터에 대한 액세스 부하를 줄일 수 있음.
- 데이터 갱신 빈도가 높은 시스템에는 캐시 사용이 부적합.
- 대량의 데이터에 엑세스하는 시스템 또한 캐시 사용이 부적합.
- 캐시가 효율적으로 동작하려면, 캐시에 저장할 데이터가 지역성을 가져야 함.
- 지역성이란 데이터 접근이 시간적 혹은 공간적으로 가깝게 일어나는 것을 의미
- 시간적 지역성: 특정 데이터가 한번 접근됐을 경우, 근 미래에 다시 데이터에 접근할 가능성이 높은 것
- 메모리 상 같은 주소에 여러 차례 읽기/쓰기를 수행할 경우
- 공간적 지역성: 특정 데이터와 가까운 주소가 순서대로 접근되었을 경우
- CPU 캐시나 디스크 캐시의 경우, 한 메모리 주소에 접근할 때 그 주소뿐만 아니라 해당 블록을 전부 캐시에 가져오게 됨. 메모리 주소를 오름차순이나 내림차순으로 접근한다면, 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 캐시의 효율성이 증대 됨
여러가지 캐시의 종류
웹 캐시
- 사용자가 웹 사이트에 접속할 때, 정적 컨텐츠를 특정 위치에 저장하여, 웹 사이트 서버에 해당 컨텐츠를 매번 요청하여 받는 것이 아니라, 특정 위치에 불러옴으로써 사이트 응답 시간을 줄이고 서버 트래픽 감소 효과를 볼 수 있다
- 브라우저 캐시
- 브라우저 또는 HTTP 요청을 하는 Client Application에 의해 내부 디스크에 캐시
- 웹 브라우저에서 흔히 사용하는 뒤로가기 등에 이용
- 프록시 캐시
- 클라이언트와 서버 사이에서 대리로 통신을 수행하며, 각 통신의 중계 기능을 하는 서버를 프록시 서버라 함
- 이 프록시 서버를 이용해 캐싱하는 것을 프록시 캐시라 함
- 게이트웨이 캐시(Reverse Proxy?)
- 서버 앞 단에 설치되어 요청에 대한 캐시 및 효율적인 분배를 통해 가용성, 신뢰성, 성능 등을 향상
CDN 서버
- Content Delivery Network의 약어
- 웹 캐시의 클라우드화?
- 웹 서버가 아닌 다른 네트워크에 웹 콘텐츠 캐시를 배치하는 구조
- CDN은 서버와 사용자 사이의 물리적인 거리를 줄여 콘텐츠 로딩에 소요되는 시간을 최소화
- 자주 사용되는 파일의 병목 현상을 해결할 수 있음
- ISP에 장애가 발생해도 다른 ISP에 있는 캐시 서버에서 데이터를 전송하므로 전송 중단이 발생하지 않음
- 이를 위해서는 여러 국가에 분산된 다수의 캐시 서버가 필요
- ISP = Internet Service Provider : 집이나 사업장에 유료로 인터넷을 제공하는 공급자
- 참고
CPU 캐시
- 대용량의 메인 메모리에 접근을 빠르게 하기 위해 CPU 칩 내부나 바로 옆에 탑재하는 작은 메모리
- 대부분의 메모리 접근은 특정한 위치의 근방에서 자주 일어나는 경향이 있기 때문에, 데이터를 크기는 작지만 속도가 빠른 캐시 메모리에 복사해 두면 평균 접근 시간을 아낄 수 있음
- L1, L2, L3 CPU 캐시
디스크 캐시
- 대부분의 하드 디스크는 디스크 제어와 외부와의 인터페이스를 위해 작은 컴퓨터를 내장하고 있음. 이 컴퓨터는 디스크에 입출력되는 데이터를 저장하는 작은 메모리를 가지고 있는데, 이를 디스크 캐시라고 함(약 2 ~ 32MB 정도의 크기)
페이지 캐시
- 처리한 데이터를 메인 메모리 영역(RAM)에 저장해서 가지고 있다가, 다시 이 데이터에 대한 접근이 발생하면 disk에서 IO를 처리하지 않고 메인 메모리 영역의 데이터를 반환하여 처리할 수 있도록 하는 캐시
- 리눅스에서 파일 I/O의 성능 향상을 위해 페이지 캐시라는 메모리 영역을 만들어 사용
- 한번 읽은 파일의 내용을 페이지 캐시 영역에 저장해 두었다가, 동일한 파일에 접근이 일어나면 디스크 I/O를 발생시키지 않고 페이지 캐시에서 읽어 제공
버퍼 캐시
- 블록 디바이스가 가지고 있는 블록 자체의 정보를 저장하고 있는 캐시
- 파일 시스템의 메타 데이터와 관련된 블록들을 저장하고 있는 캐시
- 블록?
- 기억 공간을 나누는 단위 -> 파일 시스템에서 기본적인 최소 할당 크기
- 파일은 연속된 블록의 집합
- 리눅스에서 파일을 이루는 구성 요소
- 부트 블록: 파일 시스템으로부터 리눅스 커널을 적재시키기 위한 코드가 저장된 블록, 파일 시스템의 시작부
- 슈퍼 블록: 전체 파일 시스템에 대한 정보 저장(총 블록 수, 파일 시스템의 크기, 이용가능한 빈 블록 리스트, inode 갯수, 목록의 크기 등)
- inode 리스트: inode의 집합, inode는 파일이나 디렉터리에 대한 모든 정보를 가지고 있음
- 파일 소유자의 사용자 ID
- 파일 소유자의 그룹 ID
- 파일 크기
- 파일이 생성된 시간
- 최근 파일이 사용된 시간
- 최근 파일이 변경된 시간
- 파일이 링크도니 수
- 접근 모드
- 데이터 블록 주소
- 데이터 블록: 실제 데이터가 저장되어 있는 파일
- 블록 디바이스
- 하드디스크나, CD/DVD 등의 장치를 말함
- 블록이나 섹터 등의 정해진 단위로 데이터 전송
인터럽트(Interrupt)
인터럽트란?
- 어떤 원인으로 인해 지금 하고 있는 일을 중단하고 급히 다른 일을 하는 것, 급한 일이 끝나면 다시 원래하는 일을 진행 함
- 즉, 급한 일을 먼저 하도록 CPU에 알리는 역할
- 이벤트 주도 구조
- 타이머 인터럽트, 하드웨어 인터럽트, 에러 발생 시 인터럽트 등 다양한 종류의 인터럽트가 있음
폴링(Polling)
폴링이란?
- 장치 또는 프로그램이 충돌 회피 또는 동기화 처리 등의 목적으로 다른 장치의 상태를 주기적으로 질의하는 것
- 일정 조건을 만족할 때 데이터 처리, 송/수신 처리 등의 자료 처리를 진행
- 우체통을 예로들면 된다.
- 편지를 보내는 사람이 우체통에 편지를 넣으면, 주기적으로 집배원이 해당 우체통을 확인해 편지들을 수거해가고 수거된 편지는 우체국에서 모은 후 배달한다.
- 여기서 주기적으로 우체통을 확인하고 편지를 모은 후 배달하는 일련의 과정을 폴링이라고 한다
폴링의 특징
- 질의 방향이 단방향
- 질의는 일정 간격을 따라 정기적으로 발생
- 반복만 하면 되기에 프로그램이 쉽다
- 상대가 응답하는지 확인할 수 있음
- 모아서 일괄적으로 처리할 수 있다
- 네트워크를 경유한 폴링일 때는 처리 지연 시간을 줄이기 위해 폴링 간격을 너무 짧게 잡으면 트래픽 양이 증가하므로 주의가 필요
저널링(Journaling)
저널링이란?
- 저널(Journal)
- 트랜잭션이나 매일 갱신되는 데이터의 변경 이력을 가리킴
- 이런 저널을 남겨두는 것을 저널링이라 함
- 데이터 자체가 아닌 처리 내용을 기록 함
- 데이터 일관성이나 일치성이 확보되면 필요 없어짐
- 롤백 / 롤 퍼워드에 이용
- 시스템 장애 시 복구가 빠르다
- 데이터 복제보다도 적은 리소스를 소비해서 데이터를 보호할 수 있음
- 데이터 갱신이 발생하는 시스템에서는 트랜잭션 내용을 기록해 둠으로써 데이터 안정성을 높일 수 있음
- 저널링을 하면 기록 처리 시 오버헤드가 발생하기 때문에 성능을 중시하는 시스템이라면 오버헤드를 줄일 방법을 검토해야 함
- 저널 데이터는 메모리의 버퍼에 일단 저장
- 디스크에 정보가 기록되지 않으면 장애 시 정보를 잃을 수 있음
- 시스템 요건에 따라 버퍼의 디스크 기록 시점을 검토 및 조정해야 함
- 저널은 트랜잭션 단위로 일치성을 보증하기 때문에 트랜잭션 도중 장애가 발생하면 종료되지 않은 트랜잭션은 파괴 됨.
- 하나의 트랜잭션 단위가 크면 트랜잭션 도중 장애가 발생할 가능성이 높다