지역성을 고려한 캐시(Cache)
서버 성능을 높여주는 캐시(Cache)란?
컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 만약 짧은 시간 동안 동일한 요청이 여러 번 발생할 경우, 해당 요청의 결과를 캐시에 저장한다면 서버의 처리 속도를 높일 수 있다. N건의 처리를 해야했었는데, 1건만 처리 후에 캐시에 저장해두면 이후 결과는 캐시 메모리에 접근하여 얻을 수 있다!
캐시는 각 레이어별로 적용이 가능하다. (DB, WAS, Web server에서 각각 가능하다는 뜻)
- 캐시에 저장하는 방식
- 사용할 결과를 그대로 저장 (빠르지만 많은 메모리 소요)
- 구조화하여 저장 (조금 느리지만 보다 효율적인 메모리 사용 가능)
- 지역성을 고려한 설계
- 시간적 지역성 (Temporal Locality) : 특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것을 시간적 지역성이라고 한다. 메모리 상의 같은 주소에 여러 차례 읽기 쓰기를 수행할 경우 상대적으로 작은 크기의 캐시를 사용해도 효율성을 꾀할 수 있다.
보통 LRU, MRU, FIFO, LIFO 알고리즘을 많이 적용한다 :)
- 공간적 지역성 (Spatial Locality) : 읽은 곳 근처의 데이터를 접근하는 경우 사용. 프리페치(prefetch). 보통 OS 만들 때 사용된다.
내 업무에 적용해보기
1. 한번 캐싱된 데이터는 어느정도 보관하는 것이 적당할까?
업무마다 다르겠지만...
일단 추론을 하기 위해서 객관적인 자료를 알아야 한다.
얼마나 많은 사용자가 함께 접속하는 지, 어떤 유형의 요청이 많은 지 등...
고객을 알고 나의 서버를 알아야 한다.
참고LINE 메시징 서버가 새해 트래픽을 대비하는 과정 : https://engineering.linecorp.com/ko/blog/how-line-messaging-servers-prepare-for-new-year-traffic/
2. 캐싱된 데이터는 어느 시점에 업데이트를 할까?
내 업무에서 업데이트하는 서버와 캐싱된 데이터를 제공하는 서버가 다르다.
DB 업데이트가 있을 때 캐싱된 데이터를 업데이트하는 것도 좋지만,
내 업무에서는 캐시 주기를 짧게 해(1분~5분) 캐시를 업데이트하는 것으로도 충분해 보인다.
하지만 내 업무 서버는 동접수를 알 수 없다.. 체크하지 않고 있기 때문이다..
캐시를..감각적으로..해야할..것..같..다
[참고자료]
python LRU cache 적용 : https://medium.com/better-programming/every-python-programmer-should-know-lru-cache-from-the-standard-library-8e6c20c6bc49
'엔지니어링 > DevOps' 카테고리의 다른 글
로드밸런서(Load balancer)와 프록시(Proxy) (0) | 2020.04.20 |
---|---|
로드밸런싱 유형 (DNS, Hardware, Software) (0) | 2020.04.13 |
로드밸런서 (L4, L7, NginX, HAProxy) (0) | 2020.04.07 |
로드밸런싱(Load Balancing)과 고가용성(HA) (2) | 2020.03.19 |
DevOps 안정적인 서비스 운영 (feat. NHN) (0) | 2020.03.19 |
댓글
이 글 공유하기
다른 글
-
로드밸런싱 유형 (DNS, Hardware, Software)
로드밸런싱 유형 (DNS, Hardware, Software)
2020.04.13 -
로드밸런서 (L4, L7, NginX, HAProxy)
로드밸런서 (L4, L7, NginX, HAProxy)
2020.04.07 -
로드밸런싱(Load Balancing)과 고가용성(HA)
로드밸런싱(Load Balancing)과 고가용성(HA)
2020.03.19 -
DevOps 안정적인 서비스 운영 (feat. NHN)
DevOps 안정적인 서비스 운영 (feat. NHN)
2020.03.19