캐싱( Caching )
。데이터 복제본또는연산결과를 임시로 저장하여요청의 응답을 효율적으로 하는 기술
▶웹서버에 일일이 요청할 필요 없이 자주 사용되는 복잡한연산의 결과 또는 자주 찾는데이터를 효율적으로 전달하는 것이 목적
。AWS의CDN/ElastiCache에서 활용
- 장점
。요청에 따라캐시에 이전에요청되어 저장된 내용이면서버에 전달할 필요없이클라이언트에게 빠르게데이터를 전달 가능
。복잡한 연산에 따른자원/부하를 감소 가능
- 단점
。일관성의 유지가 어려움
。아키텍처의 복잡도가 증가
캐싱 정책
。캐시에데이터를 저장하는 방식
Lazy Loading:
。처음에데이터를 저장하지않고,요청이 수행된 경우서버에요청을 수행 후캐시에응답된데이터를 저장하는정책
▶자원 낭비감소
▶ 이후요청시 저장된데이터를 가져온다.
ex ) 웹사이트에서 모든 데이터를 한 번에 로딩하지 않고, 사용자가 스크롤하거나 버튼을 클릭하는 등 특정 행동을 했을 때만 필요한 데이터를 불러오는 방식
。 최초웹서버에요청및응답후캐시에응답 데이터 로딩이 필요
EAGER Loading
。사전에캐시에 모든데이터를 저장 후요청을 기다리는정책
▶캐시에데이터가 항상 준비되있는 장점이 존재하나, 모든데이터를캐시에 저장하므로 불필요한캐시 용량 낭비및 매우 큰자원을 소모
Write Through
。웹서버의DB 데이터가 변경되거나 저장되는 시점에서 동시에캐시에 동시 반영 및 저장
▶ 항상데이터 일관성이 보장되지만쓰기 과정이DB뿐만 아닌캐시에도모두 적용되므로 복잡해지고 느려지는 가능성이 존재
Write Back
。데이터를캐시에 먼저 작성 후웹서버 DB에 업데이트
▶Write Through과 달리쓰기가 빠르고 간단하지만DB에 도달하기 전캐시서버가 다운되어 유실될 위험 이 존재
캐시 만료 방식( Invalidation / Eviction )
。캐시에 저장된임시 데이터를 삭제하는 방식
TTL( Time To Live ) :
。모든임시 데이터에 대해 일정 시간이 지나면만료
▶ 모든데이터에 대해 항상갱신을 수행해야하는 단점이 존재.
LRU( Least Recently Used )
。가장사용시점이 가장 늦는임시 데이터부터만료
▶ 계속 사용되는데이터들을 계속 지속적으로 보관
LFU( Least Frequently Used )
。가장사용빈도가 낮은임시 데이터부터만료
▶ 자주 사용되는데이터들을 계속 지속적으로 보관
FIFO( First In First Out )
。가장 먼저 들어온데이터부터만료
웹 캐시( Web Cache ) =프록시 서버( Proxy Server )
。HTTP Server의 역할을 대신하는중계서버
▶브라우저와HTTP Server중간에서 통신을 대리로 수행
▶기억장치의Cache Memory와 유사한 Logic
。Origin Server에 접근할 필요없이Local Server에객체를 보관하여 접근하는 원리
▶ 자체 저장소를 가지고있어 최근 호출한객체의 사본을 저장 및 보존
▶브라우저는객체요청 시 반드시웹 캐시로HTTP Request를 송신하도록 설정
。일반적으로ISP가웹캐시를 구입 및 설치하여 모든 캠퍼스의브라우저가 해당웹 캐시로 요청을 보내도록 설정
。웹 캐시는 자체저장소에 저장된객체 사본이Origin Server내객체보다Outdated될 수 있는 문제점을Conditional GET을 통해 검증하여 해결
- Cache Hit
。클라이언트 요청에 따라서버에 전달할 필요없이캐시에 저장된데이터로 응답할 수 있는 상황
- Cache Miss
。요청에 따른데이터를캐시에서 찾을수 없는 상황
▶ 해당 경우서버에데이터를요청해서 응답.
Cache Hit Rate:
。브라우저에서 요청한객체가웹 캐시에 존재하여Web Cache가 만족시킨HTTP Request의 비율
。일반적으로Cache Hit Rate=0.2 ~ 0.7
ex )Cache Hit Rate = 0.4인 경우
브라우저가웹 캐시로 요청하는HTTP Request의40%는웹 캐시에 의해 응답되고 나머지60%는웹 캐시가Origin Server로HTTP Request하여 획득
웹캐시사용목적
Client의HTTP Request에 대한Response Time감소
。Origin Server까지 요청할 필요없이 중간의중계서버인웹캐시를 통해객체를 요청하므로
- 다수의
End System으로 구성된 특정 기관으로부터의인터넷으로 접속하는Access Link의Traffic을 상당수 감소
。기관 네트워크에서인터넷으로 진입하는 비율이 감소하면서 비용 감소
。인터넷전체의트래픽을 감소시키면서네트워크 어플리케이션의 성능 증진
P2P또는Content Provider입장에서 유리
。Network상에 분포된Web Cache에 사전에Content에 대한 사본을 저장하여Share가 유리해짐
▶브라우저가Content를 요청 시Content Provider의Server가 아닌Web Cache로부터Content를 응답받도록 설정
웹캐시원리
。웹 캐시는HTTP Server이면서 동시에HTTP Client역할을 수행
▶Client 프로세스와Server 프로세스를 동시 실행
。브라우저가객체를 요청하는HTTP Request Message를웹캐시에 전송하는 경우
▶웹캐시가 해당객체를 포함하는 경우 즉시 응답하여 반환
▶웹캐시가 해당객체를 포함하지 않는 경우웹캐시에서HTTP Server로 해당객체를 요청 후브라우저로 반환
브라우저는웹캐시와TCP Connection을 구축 후객체에 대한HTTP Request송신
웹캐시는객체의 사본이 자체저장소에 저장되어있는지 확인
。객체의 사본이 자체저장소에 저장되어있는 경우브라우저로HTTP Response Message에객체를캡슐화한 후 응답
웹캐시가객체의 사본이 없는 경우Origin Server( =HTTP Server)에TCP Connection을 설정 후객체에 대한HTTP Request송신
。HTTP Server는HTTP Response Message에객체를캡슐화한 후웹캐시로 응답
Origin Server로부터HTTP Response수신 후객체를 자체저장소에 사본으로서 저장 및브라우저에HTTP Response Message에객체를캡슐화한 후 응답
。객체 사본저장 시Last-Modified Header Line도 함께 저장
▶ 향후Conditional GET을 통한객체가Outdated되었는지 확인
웹 캐싱예시
- 특정
기관 네트워크의브라우저에서인터넷의Origin Server간HTTP Transaction수행 시
。기관 네트워크와인터넷은 각각Access Link를 통해기관의라우터와ISP의POP를 통해 연결됨
- 가정
。Access Link: 초당 전송률15.4 Mbps의통신링크
。LAN: 초당 전송률100 Mbps의통신링크
。평균 데이터객체 크기 :1 Mbits
。Origin Server와ISP의POP간RTT:2 sec
▶Internet Delay
。기관 브라우저에서Origin Server에 대한 초당 평균 요청비율 :15 / sec번
- 소요시간(
delay) 계산 : Traffic Intensity
。 초당Traffic의 총량 :초당 요청수 * 객체 크기=15 Mbits/sec=15 Mbps
。LAN Traffic Intensity=
▶LAN Utilization은 약15%에 육박
▶Traffic Intensity = 0.15는 최대msec Delay를 야기하므로 해당 지연을 무시가능.
。Access Link Traffic Intensity=
▶Access Link Utilization은 약97%에 육박
▶Traffic Intensity가0.78을 초과하는지점에서큐잉지연이 급격하게 증가하여few minute Delay가 발생
Total Delay = Internet delay + Access delay + LAN delay
▶2 sec + minute + msec = minute
。 최종적으로전송률이 낮은Access Link때문에 대략 몇분 수준의Delay가 발생.
- 해결책 1 :
fatter Access Link
。Access Link를Bandwidth가 더 큰fatter Access Link로 교체하여Bandwidth가154 Mbps이 될 경우
。Access Link Traffic Intensity=
▶Access Link Utilization은 약9.9%에 육박하여 최대msec delay가 발생.
▶2 sec + msec + msec = 2 sec
。그러나 해당 방식은fatter Access Link로 인한 비용증가 문제와Web Cache방식보다Delay가 다소 큰 문제가 존재.
- 해결책2.:
기관 네트워크에로컬 웹 캐시를 추가하여인터넷의Origin Server간HTTP Transaction수행 시
。기관 네트워크의 모든브라우저가Origin Server가 아닌Local Web Cache에HTTP Request를 전송하여 중계하도록함.
▶Web Cache에 저장된객체를 요청하는HTTP Request까지는Access Link를 통해서Origin Server에 접근할 필요없이LAN내부Local Web Cache가 대신 처리
。LAN내부의Local Web Cache에서 일정부분의HTTP Request를Origin Server대신 처리하므로Access Link의Utilization이 감소.
- 가정
。기관네트워크의브라우저에서웹캐시로 요청한HTTP Request의Cache Hit Rate = 0.4
- 소요시간 (
delay) 계산
。HTTP Request의40%는웹 캐시에 의해LAN내부에서 즉시 응답
▶ 약10 ms delay발생
。HTTP Request의60%는웹 캐시에서Origin Server로HTTP Request전송
▶HTTP Request중 약60%만Access Link를 통과
Access Link Traffic Intensity=
。기존0.97대비0.6으로Access Link Utilization이 감소하면서Congestion이 감소
▶ 일반적으로0.78미만의traffic intensity는큐잉 지연이 낮으므로msec delay를 발생
Total Delay = Internet delay + Access delay + LAN delay
▶( 2 sec * 0.6 ) + ( 0.6 * msec ) + ( 0.4 * msec ) = 1.2 sec
。웹캐시를 사용하지 않고Fatter Access Link를 사용한Total Delay(2 sec)보다 훨씬 감소한 것을 확인가능
▶ 또한웹캐시비용도Fatter Access Link에 비해 저렴
Conditional GET[RFC 7232]
。HTTP Request Message전송 시GET Method와If-Modified-Since Header Line을 포함하는 방식
。웹 캐시는 자체저장소에 저장된객체 사본이Origin Server내객체보다Outdated될 수 있는 문제점이 존재
▶Conditional GET을 통해브라우저로 전달되는 객체가Up to date인지 확인하면서캐싱을 수행
Conditional GET원리
브라우저의HTTP Request를 수신하여웹캐시에서Origin Server로HTTP Request를 요청(GET)GET /fruit/kiwi.gif HTTP/1.1 Host: www.example.com
Origin Server는웹 캐시에객체를캡슐화한HTTP Response Message를 응답HTTP/1.1 200 OK Date: Sat, 3 Oct 2015 15:39:29 Server: Apache/1.3.0 (Unix) Last-Modified: Wed, 9 Sep 2015 09:23:24 Content-Type: image/gif // HTTP Response Body //。
웹캐시는 해당객체 사본과Last-Modified의Date를 함께 자체저장소에 저장 및브라우저로 전달
- 일정기간이 소요된 후
브라우저가웹 캐시에동일 객체를HTTP Request하여 요청(GET)
。브라우저가웹 캐시에동일 객체를 요청GET /fruit/kiwi.gif HTTP/1.1 Host: www.example.com
웹 캐시에서Origin Server로Conditional GET수행
。웹 캐시가 저장한객체 사본의Last-Modified의Date를HTTP Request Message의If-modified-since : Header Line에 포함하여Origin Server로HTTP Request를 요청GET /fruit/kiwi.gif HTTP/1.1 Host: www.example.com If-modified-since: Wed, 9 Sep 2015 09:23:24▶
객체 사본이Up to date한지 검증을 위해Origin Server로 전송
Origin Server에서HTTP Request Message에 포함된If-modified-since : Header Line을 검증 후 응답
。Origin Server의객체의Last-Modified와웹 캐시에서 전송한If-modified-since의 시점을 비교 후 응답에객체포함 결정
If-modified-since : 시점의 명시된 시점 이후에객체가 수정되지 않은 경우
。객체가Up to date한 상태이므로,빈 객체를웹 캐시로 반환
▶ 비어있는Message Body를 응답하므로Response Time이 적음HTTP/1.1 304 Not Modified Date: 전송시각 Server: Apache/1.3.0 (Unix) // 객체 없음 //。
Status Code : 304를Client에 응답하여웹캐시에 저장된객체 사본을 사용하도록 지시
If-modified-since : 시점의 명시된 시점 이후에객체가 수정된 경우
。웹 캐시에객체 사본이 저장된 이후Origin Server에서 해당객체를 수정하여객체 사본이Outdated된 경우 ( ex :Wed, 9 Sep 2015 09:23:24이후에 수정된 경우 )HTTP/1.1 200 OK Date: 전송시각 Server: Apache/1.3.0 (Unix) Last-Modified: 객체가 마지막으로 수정된 Date Content-Type: image/gif // HTTP Response Body //。수정된
객체와Last-Modified를웹 캐시에 응답
▶웹 캐시는 자체저장소에 해당객체 사본으로 교체하여Last-Modified와 함께 저장 후클라이언트로 반환
프록시 종류
Forward Proxy:
。Client-side에서 Client 대신Proxy Server가 목적서버(Web server)에 대리로 통신해주는 역할을 수행하는프록시 서버
▶Proxy Server가 외부웹서버와 통신을 수행하면서 Client는Proxy Server만을 이용하여 정보를 획득하고웹서버는Proxy Server를 통한 Access log가 남는다.
。Client가 어떤Proxy Server를 경유할지 설정 가능.
Reverse Proxy:
。Server-side에서Client의Http Request를 처리하는데 적합한웹서버를 선택허여 배분하는 역할을 수행하는프록시 서버
▶ Client의 각 url에 따른Http Request를Proxy Server에 집중한 후 url에 따라서 각HttpRequest를 수신할웹서버를 설정.
。Client 입장에서는Proxy Server가웹서버와 동일한 동작을 수행하므로,서버 측에서웹서버가 여러개 존재하는것을 은폐 가능.
。주로nginx가 존재
오랜만에 들렸는데 CS공부 달리고 계시는군요 인프런이나 KMOOC 같은 인터넷 강의 듣고 공부하시나요?