Back-end/운영체제

Cache

Ho's log 2021. 4. 25. 20:01

메모리 계층 구조

1. 데이터를 저장하는 공간의 속도와 용량은 반비례 관계

- 속도가 빠른 메모리일수록 용량이 작음

- 용량이 큰 저장장치는 속도가 느림

- 둘 다 잡기에는 비용이 너무 많이 든다

- 그래서 데이터 저장 공간은 속도와 용랴엥 따라 특성에 맞게 역할을 나누어서 사용한다

2. 데이터 저장 공간을 속도-용량 순서대로 쌓으면 마치 피라미드와 같은 형상이 나타난다 (MERMORY HIERACHY) 

 

파레토의 법칙

이탈리아의 경체학자 빌프레도 파레토가 발견한 현상

원인 중 상위 20%가 전체 결과의 80% 만든다는 법칙

2대 8 법칙이라고도 한다

여러곳에 관찰할수 있다

 - 인구의 20%가 전체부의 80%를 가지고 있다

 - 잘 팔리는 제품 20%가 매출의 80%를 차지한다

- 많이 쓰이는 단어 20%가 언어 사용빈도의 80%를 차지한다 

 

데이터 지역성의 원리

자주 쓰는 데이터는 시간적 혹은 공간적으로 한 곳에 몰려 있을 가능성이 높다

- 시간 지역성(Temporal Loacality) : for 문에서 조건변수를 선언 했을 때 해당 변수는 for문의 끝나기 전까지 계속 쓰일 확률이 높은 것

- 공간 지역성(Spatail Locality) : for 문에서 어떤 배열에 접근 했을때 해당 배열이 위차한 메모리 공간의 내용은 for 문의 끝나기 전까지 계속 쓰일 확률이 높은 것

- for문에서 array[0], array[1], array[2] 와 같이 배열에 접근 할때 다음번에는 array[3]에 접근할 확률이 높은 것을 따로 분류하여 순차지역성(Sequential Locailty) 이라 부른다

 

캐시(CACHE)란? 

나중에 필요할 수도 있는 무언가를 저장하였다가 신속하게 회수할 수 있는 보관 장소로, 어떤 식으로돈 보호되거나 숨겨진다. 

원본데이터(System-of-Record)와는 별개로 자주 쓰이는 데이터(Hot Data)들을 복사해둘 캐시 공간을 마련한다. 캐시 공간은 상수 시간O[1]등 낮은 시간 복잡도로 접근 가능한 곳을 주로 사용한다

데이터를 달라는 요청이 들어오면, 원본 데이터가 담긴 곳에 접근하기 전에 먼저 캐시내부부터 찾는다.

캐시에 원하는 데이터가 없거나(Cache miss) 오래되어 최신성(Expiration)을 잃었으면 그때서야 원본 데이터가 있는 곳에 접근하여 데이터를 가져온다. 이때 데이터를 가져오면서 캐시에도 해당 데이터를 복사하거나 혹은 갱신한다

캐시에 원하는 데이터가 있을면 원본 데이터가 있는 공간에 접근하지 않고 캐시에서 바로 해당 데이터를 제공한다(Cache hit)

캐시 공간은 작으므로, 공간이 모자라게 되면 안 쓰는 데이터부터 삭제하여 공간을 확보한다(Eviction)

 

CPU의 캐시 메모리

현대의 CPU는 1초에 최고 수십억 번 작동 가능

아무리 빠른 주기억장치라도 CPU를 따라가기 어려움

그래서 SRAM이라는 특수한 메모리를 CPU에 넣어 캐시 메모리로 사용

최근 출시된 AMD의 3세대 CPU는 캐시메모리의 용량을2배로 늘려 게임캐시부른다 -> 캐시 효율성 향상 사례

 

하드디스크, 데이터베이스

하드디스크는 주기억장치에 비해 10만 배 이상 느린 장치

처리 효율을 올리려면 자주 쓰이는 데이터를 캐싱해두는 것이 좋다

데이터베이스 또한 쿼리르 실행하여 하드디스크에서 데이터를 읽고 쓰는 것은 시간이 오래 걸리는 작업

대게 데이터베이스는 쓰기보다는 읽기가 많으므로 자주 요청받는 쿼리의 결과를 캐싱해두면 효율이 오른다

따라서 데이터베이스 자체에서 별도의 캐시를 운영한다

JPA의 영속 켄텍스트도 캐시의 일종이다  

 

CDN(Content Delivery Network)

Youtube메인서버는 미국

-> 각나라간 해저 케이블은 비싸다

-> 구글을 통신사에 Google Global Cache 를 두어 인기 동영상은 처리 

-> 회선 비용절감, 버퍼링 감소 , 성능향상 

 

웹 캐시 

네트워크를 통해 데이터를 가져오는 것은 하드디스크보다도 느릴 때가 많다.

(브라우저 캐시) - 그래서 웹브라우저는 웹페이지에 접속할 떄 HTML, CSS, 자바스크립트, 이미지 등을 하드디스크나 메모리에 캐싱해 뒀다가 다음 번에 다시 접속할 때 이를 재활용 한다

(응답 캐시) - 웹 서버 또한 상당수의 경우 동적 웹페이지라 할지라도 매번 내용이 바뀌지는 않는 경우가 더 많으므로 서버에서 생성한 HTML을 캐싱해 뒀다가 다음 번 요청에 이를 재활용한다

(프록시 캐시) - 이와 유사하게 클라이언트에서 자주 요청 받는 내용은 웹서버로 전달하지 않고 웹서버 앞단의 프록시 서버에서 캐싱해둔 데이터를바로 제공하기도 한다

 

Redis

메모리 기반 오픈소스 Nosql DBMS의 일종으로, 웹 서비스에서 캐싱을 위해 많이 쓴다

Redis라는 이름은 Remote Dictionary Server의 약자이다.

여기서 Dictionary는 Java의 Hashmap<Key, Value>을 생각하면 된다.

기본적으로 모든 데이터를 메모리에 저장하여 처리하므로 속도가 빠르다

서버 재부팅 때 메모리의 데이터가 휘발되지 않겠급 데이터를 하드디스크에 기록할 수 있다.

DBMS의 일종이므로, 명시적으로 삭제하지 않는 한 메모리에서 데이터를 삭제하지 않는다 

자체적으로 여러가지 자료형 지원

 

EHcache

자바의 표준 캐싱 API명세인 JSR-107을 따르는 오픈소스 캐시 구현체

Spring 프레임워크나 Hibernate ORM 등에서 바로 사용 가능

Java 진영에서 가장 널리 쓰인다

캐시 저장공간을 속도에 따라 여러 등급(Tier)으로 나누언 메모리 계층 구조를 적용 가능

메모리에 캐시된 내용을 하드디스크에기록 가능

대규모 서비스에서 캐시 서버 여럿을 클러스터로 묶을 수 있는 기능을 제공 

 

www.youtube.com/watch?v=c33ojJ7kE7M&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=87

 

'Back-end > 운영체제' 카테고리의 다른 글

CentOs 방화벽 - firewall 명령어  (0) 2023.07.10
Interrupt, Context Switching  (0) 2021.05.13
Process VS Thread  (0) 2021.05.11