-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[7장] 캐시 #8
Comments
웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치임 캐시를 왜 사용하는가?
배경YouTube의 성장으로 인해 각국의 트래픽이 Google 데이터 센터로 쏠리는 상황이 발생하였고, 각국의 통신사가 확보한 해외망에 대한 가용량을 상당히 잡아먹는 요인이 되었다. 그로 인해 전세계 YouTube 이용자들이 버퍼링 문제를 하소연하였고 Google은 이에 대한 해결책을 마련하였다. 바로 각국의 통신사마다 캐시 서버를 설치하는 것이였다. Google은 각국의 통신사들이 사용하는 해외망을 구축하는데에 상당한 기여를 하였고, 각국의 통신사들이 사용하는 해외망 중 상당 부분은 Google이 직접 구축하고 소유하고 있는 자산이기도 하다. 게다가 YouTube를 통해 전세계의 트래픽을 독점하고 있는 Google의 요청을 통신사들이 거절하기 매우 어려웠다. 이러한 배경으로 인해 GGC의 확산은 상당히 빠르게 진행되었고 2017년을 기준으로 전세계 모든 통신사들이 자사 백본망에 GGC를 갖고 있다고 봐도 무방하다. 국내의 경우에는 해외망이 부족했던 LG U+가 2012년부터 국내 통신3사 중에서 가장 먼저 GGC를 설치했다. 그 뒤로 2013년에 SK텔레콤과 SK브로드밴드가 GGC를 도입했다. KT는 캐시서버에 돈을 들이는 데에 인색했던 나머지 2014년까지 자사의 막대한 해외망으로 버텼는데, 종종 KT의 해외망 속도가 개판오분전이 되는 상황이 발생하거나 해외망 점검할 때마다 KT 이용자들이 YouTube 동영상에 대한 버퍼링 문제에 빡치게 만들곤 했다. 2015년, KT는 기가 인터넷과 기가 와이파이를 상용화하면서 끝내 GGC를 도입하게 되었고, 더이상 예전처럼 해외망으로 장난질치지 않게되자 GGC에 저장되지 않은 YouTube 동영상들은 해외망의 규모가 열약한 LG U+나 대한민국 계열 통신사에 비해서 버퍼링없이 매끄럽게 재생되었다. GGC 초창기에는 YouTube 영상을 임시 저장하고 해당 통신사의 고객에게 버퍼링이 없는 빠른 속도로 스트리밍을 하는 것이 목표였다. 그러나 지금은 GGC의 용도가 확장되어 Google Play, Gmail, Google 드라이브, Google 포토 등 Google의 다른 서비스를 제공하는 데에도 쓰이고 있다. 동작 원리이용자가 유튜브 동영상을 감상할 때에 해당 통신사의 GGC에서 미리 캐싱해 둔 동영상이 존재한다면 구글 데이터 센터가 아닌 통신사에서 직접 동영상을 스트리밍 받는다. 이때 핑이 한자릿수대가 나오며 스트리밍 속도가 상당히 높게나오는데, 기가 인터넷 사용자의 경우에는 대체적으로 120 ~ 200 Mbps의 스트리밍 속도가 나온다. 통신사의 GGC에 이용자가 보고자 하는 동영상이 캐싱되어 있지 않다면, 구글 데이터 센터에서 직접 스트리밍을 받는다. 이때는 해외망을 많이 확보한 통신사의 회선에서 상당히 유리하다. 당장에 해외망의 규모가 열약한 LG U+나 SK그룹 계열사만 하더라도 GGC에 없는 유튜브 동영상을 재생하는 경우에 가끔씩 버퍼링이 걸리기도 하고 해외망 상태가 메롱인 경우에는 노답인 경우가 많다. 그러나 KT의 경우에는 GGC에 없는 동영상도 자사의 막대한 해외망이 뒷받침되기에 버퍼링이 없이 재생이 된다. 그러고 나서 해당 GGC에서는 캐싱되어 있지 않은 동영상을 구글 데이터 센터로부터 다운받아서 캐싱한다. 다음 이용자는 해당 GGC에서 스트리밍을 받게된다. 국내 이용자들이 덜 찾게되는 영상들은 GGC에 저장되어도 단기간 내에 지워지게 되며, 조회수가 장기적으로 꾸준히 나오는 동영상들이 GGC에 계속 남을 가능성이 높다. 한편, 유튜브 라이브 방송도 GGC를 이용한다. 다만, 방송하는 쪽에서는 싱가포르[1]등 해외의 구글 데이터 센터로 영상을 보게 된다. 유튜브 라이브 방송의 렉이나 버퍼링의 근원이 방송하는 사람 쪽에 있는 경우가 많다. 방송자가 해외망을 통해 영상을 보내야하니 핑이 만만치않게 오르게 되고 핑튐도 생길 수 있으며 이로인해 방송 상태가 엉망인 경우가 발생하게 되는 것이다. 딜레이 줄이려면 방송인은 '대시보드 → 스트림 옵션 → 매우 짧은 지연 시간' 변경하거나, 시청자는 '재생 속도' 빠르게 재생하면 지연시간이 줄어든다. 구글 플레이 스토어도 GGC를 이용한다. 국내 이용자들이 자주 다운받는 앱들을 GGC에 캐싱시켜서 빠른 속도의 다운로드를 제공한다. |
서버 캐싱 vs HTTP 캐싱
HTTP 캐싱 vs CDN(AWS CloudFront)
→ 완전 관리형인 CloudFront 서비스는 캐싱 및 콘텐츠 전달에 이미 최적화 되어있다고 하는데, 자세한 내용은 아래 문서에서 확인하면 될 듯 하다 Optimizing caching and availability - Amazon CloudFront 캐시 처리 단계
주요 헤더유효기간과 나이
조건부 메서드와의 재검사
캐시 제어
참고 |
캐시HTTP 캐시란? 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치다. 웹 요청이 캐시에 도달했을 때, 캐시된 로컬 사본이 존재할 경우 그 문서는 원 서버가 아니라 그 캐시로부터 제공된다. 장점
적중과 부적중
캐시 토폴로지
캐시 처리 단계
사본을 신선하게 유지하기: 캐시된 사본이 서버와 충분히 일치하도록 유지할 수 있게 해주는 메커니즘 유효기간과 나이
조건부 메서드와 재검사 : 서버가 갖고 있는 문서가 캐시가 갖고 있는 것과 다른 경우에만 객체 본문을 보내달라고 하는
캐시 제어
|
캐시자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치 캐시의 혜택불필요한 데이터 전송원 서버가 중복해서 다수의 클라이언트와 트래픽을 주고 받는 낭비를 줄일 수 있음 대역폭 병목광역 대역폭의 특성 상 네트워크 속도 저하 갑작스런 요청 쇄도갑작스러운 트래픽 증가에 의한 웹 서버 장애 방지 가능 거리로 인한 지연빛의 속도 그 자체가 유의미한 지연 유발 (보스턴 - 샌프란시스코 1/4초 지연) 적중과 부적중
재검사
적중률캐시가 요청을 처리하는 비율, 0부터 1까지의 값 바이트 적중률모든 문서의 크기가 같지 않기 때문에 모든 바이트의 비율을 표기하기에 용이하다 적중과 부적중의 구별HTTP 응답 코드 자체는 200 OK 로 동일하다 캐시 토폴로지개인 전용 캐시웹 브라우저 - 개인 전용 캐시 내장, 작고 저렴함 공용 프락시 캐시특별한 종류의 프락시 서버
프락시 캐시 계층들캐시를 계층으로 나누어
캐시망, 콘텐츠 라우팅, 피어링
캐시 처리 단계1. 요청 받기네트워크 커넥션에서 활동을 감지하고 들어오는 데이터를 읽는다 2. 파싱요청 메시지를 헤더 부분을 조작하기 쉬운 자료 구조에 담는다 3. 검색URL을 통해 로컬 사본이 있는지 검색한다 4. 신선도 검사너무 오래 가지고 있었다면 원 서버에 재검사 5. 응답 생성원 서버의 응답 헤더를 토대로 응답 헤더 생성 6. 전송응답 헤더가 준비되면 클라이언트에 응답을 돌려준다 7. 로깅로그 파일과 캐시 사요에 대한 통계 유지 사본을 신선하게 유지하기문서 만료HTTP는 Cache-Control, Expires라는 특별한 헤더들을 이용해서 각 문서에 유효기간 붙일 수 있다 유효기간과 나이
서버 재검사캐시된 사본 만료 시 재검사
조건부 메서드와의 재검사GET 요청 메시지에 특별한 조건부 헤더를 추가하여 재검사를 효율적으로 처리
캐시 제어문서가 만료되기 전까지 얼마나 오랫동안 캐시될 수 있게 할 것인지 설정 no-cache와 no-store 응답 헤더Cache-Control : no-store, no-cache 헤더는 검증되지 않은 캐시된 객체로 응답하는 것을 막는다
Max-Age 응답 헤더Cache-Control : max-age=3600 Expires 응답 헤더Expires : Fri, 05, Jul 2002, 05:00:00 GMT Must-Revalidate 응답 헤더Cache-Control : must-revalidate 휴리스틱 만료응답이 어떤 캐시 제어 헤더도 갖고 있지 않다면, 경험적인 방법으로 최대 나이를 계산 클라이언트 신선도 제약Cache-Control 요청 헤더를 이용해 브라우저, 프락시 캐시 만료를 더 엄격하게 할 수 있음 문서 만료 주의할 점만약 유효기간을 까마득한 미래로 설정하면 어떤 변경도 캐시에 반영되지 않는다 캐시와 광고캐시는 사용자를 도와 더 좋은 경험을 제공하고, 네트워크 사업자가 트래픽을 줄일 수 있게 해준다 광고 회사의 딜레마캐싱이 완벽하게 동작하면 원 서버 HTTP 접근을 캐싱 서버가 모두 흡수한다 퍼블리셔의 응답광고를 CGI 게이트웨이를 통해 제공해 캐시 무력화 -> 매 접근 마다 광고 URL을 고쳐 씀
로그 마이그레이션캐시 적중 로그를 서버에 제공한다 -> 크기 때문에 옮기기 어ㄹ움 RFC 2227, Meter 헤더특정 URL에 대한 캐시 적중 횟수를 정기적으로 서버에 돌려주는 Meter 헤더를 추가 |
7장 캐시웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치다.
불필요한 데이터 전송캐시를 이용하면, 첫 번쨰 서버 응답은 캐시에 보관된다. 캐시된 사본이 뒤이은 요청들에 대한 응답으로 사용 될 수 있기 때문에, 원 서버가 중복해서 트랙픽을 주고받는 낭비가 줄어들게 된다. 대역폭 병목캐시는 네트워크 병목을 줄여준다. 클라이언트들이 서버에 접근할 때의 속도는, 그 경로에 있는 가장 느린 네트워크의 속도와 같다. 만약 클라이언트가 빠른 LAN에 있는 캐시로부터 사본을 가져온다면 성능을 대폭 개선 가능하다. 갑작스런 요청 쇄도갑작스런 사건으로 인해 많은 사람이 거의 동시에 웹 문서에 접근할 때 이런 일이 발생한다. 거리로 인한 지연모든 네트워크 라우터는 제각각 인터넷 트래픽을 지연시킨다. 그리고 클라이언트와 서버 사이에 라우터가 그다지 많지 않더라도, 빛의 속도 그 자체가 유의미한 지연을 유발한다. 적중과 부적중재검사캐시는 반드시 그들이 갖고 있는 사본이 여전히 최신인지 서버를 통해 때때로 점검해야 한다. 이러한 ‘신선도 검사’를 HTTP 재검사라고 부른다. 캐시는 캐시된 사본의 재검사가 필요할 때, 원 서버에 작은 재검사 요청을 보낸다. 콘텐츠가 변경되지 않았다면, 서버는 아주 작은 304 응답을 보낸다. 이를 재검사 적중 혹은 느린 적중이라고 부른다. 이것은 순수 캐시 적중보다 느린데, 원 서버와 검사를 할 필요가 있기 때문이다. 그러나 캐시 부적중보다는 빠른데, 서버로부터 객체 데이터를 받아올 필요가 없기 때문이다. 적중과 부적중의 구별응답의 Date 헤더 값을 현재 시각과 비교하여, 응답의 생성일이 더 오래되었다면 클라이언트는 응답이 캐시된 것임을 알아낼 수 있다. 캐시 토폴로지캐시 처리 단계요청 받기파싱검색신선도 검사응답 생성발송로깅사본을 신선하게 유지하기문서 만료Cache-Control과 Expires라는 헤더를 활용해서 원 서버가 각 문서에 유효기간을 붙일 수 있게 해준다. 서버 재검사캐시된 문서가 만료되었다는 것은, 그 문서가 원 서버에 현재 존재하는 것과 실제로 다르다는 것을 의미하지는 않으며, 다만 이제 검사할 시간이 되었음을 뜻한다. 재검사 결과 콘텐츠가 변경되었다면, 캐시는 그 문서의 새로운 사본을 가져와 오래된 데이터 대신 저장한 뒤 클라이언트에게도 보내준다. 재검사 결과 콘텐츠가 변경되지 않았다면, 캐시는 새 만료일을 포함한 . 새헤더들만 가져와서 캐시 안의 헤더들을 갱신한다. 정리가 힘들다 |
캐시가 필요한 이유
캐시 피어링여러 프락시 서버들이 서로 협력하여 네트워크 트래픽을 효율적으로 관리하고 캐시된 콘텐츠를 공유하는 방식 형제(Sibling) 및 부모(Parent) 피어'부모' 피어는 보다 상위 레벨에서 작동하며, 하위 '자식' 피어들에게 캐시 서비스를 제공한다. 책에서 말하는 계층별 접근이 대표적인 예시이다. '형제' 피어는 서로 동등한 관계에서 작동하며, 캐시된 데이터를 서로 공유한다. HTTP가 형제 캐시를 지원하지 않는 이유
형제 피어에 접근하는 방식
|
No description provided.
The text was updated successfully, but these errors were encountered: