[Hello world 오픈세미나]varnish로 웹서버성능 향상시키기
Upcoming SlideShare
Loading in...5
×
 

[Hello world 오픈세미나]varnish로 웹서버성능 향상시키기

on

  • 11,102 views

 

Statistics

Views

Total Views
11,102
Views on SlideShare
4,765
Embed Views
6,337

Actions

Likes
12
Downloads
82
Comments
0

18 Embeds 6,337

http://helloworld.naver.com 6027
http://www.hanrss.com 241
http://cloud.feedly.com 27
http://feedly.com 10
https://twitter.com 8
http://news.google.com 4
http://rss.devsearch.co.kr 4
http://www.feedspot.com 3
https://www.google.co.kr 2
http://www.google.co.kr 2
http://translate.googleusercontent.com 2
http://cafe.naver.com 1
http://plus.url.google.com 1
http://mail.sensmail.com 1
http://webcache.googleusercontent.com 1
http://rss.com 1
http://210.94.199.216 1
http://www.google.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

[Hello world 오픈세미나]varnish로 웹서버성능 향상시키기 [Hello world 오픈세미나]varnish로 웹서버성능 향상시키기 Presentation Transcript

  • Varnish로
  •   웹서버
  •   성능
  •   향상하기
  •    윤신주
  •    스포츠서비스
  •   개발팀
  •    
  •   
  •    2013.07
  •    
  •   
  •    
  •   
  • 목차
  •    1.
  •   
  •   Varnish
  •   소개
  •    2.
  •   
  •   Varnish
  •   VCL
  •   이해
  •    3.
  •   
  •   Varnish
  •   Grace
  •   mode
  •   
  •    4.
  •   
  •   Varnish
  •   튜닝
  •    5.
  •   
  •   Varnish
  •   적용사례
  •    6.
  •   
  •   Epilogue
  •   
  • 1.
  •   Varnish
  •   소개
  •   
  • 4
  •   /
  •   varnish
  •    1.1
  •   
  •   Varnish는
  •   ?
  •    웹
  •   어플리케이션의
  •   성능을
  •   극대화
  •   시켜줄
  •   수
  •   있는
  •   Cache
  •   서버!
  •   
  • 5
  •   /
  •   varnish
  •    1.2
  •   
  •   어떤
  •   Cache
  •   솔루션들을
  •   사용하고
  •   있나요?
  •    
  •    Local
  •    Reverse
  •   Proxy
  •    Distributed
  •   
  • 6
  •   /
  •   varnish
  •    1.3
  •   
  •   간단한
  •   소개를
  •   해볼까요?
  •    2005년
  •   노르웨이
  •   신문사인
  •   Verdens
  •   Gang(VG)에서
  •   캐시
  •   솔루션을
  •   찾던
  •   중
  •   개발
  •    
  •    FreeBSD
  •   licence
  •    
  •    2013-06-17,
  •   3.0.4
  •   릴리즈
  •   
  • 7
  •   /
  •   varnish
  •    1.4
  •   
  •   웹
  •   서버
  •   앞단에
  •   설치한다는
  •   것은?
  •   
  • 8
  •   /
  •   varnish
  •    1.5
  •   
  •   Varnish로
  •   무엇을
  •   Cache
  •   할수
  •   있을까요?
  •   
  • 2.
  •   Varnish
  •   VCL
  •   이해
  •   
  • 10
  •   /
  •   varnish
  •    2.1
  •   
  •   VCL
  •   ­–
  •   request
  •   flow
  •   
  • 11
  •   /
  •   varnish
  •    2.2
  •   
  •   VCL
  •   ­–
  •   backend
  •   설정
  •    backend backend1 { #벡엔드 서버 설정 .host = “222.xxx.xxx.xxx"; .port = "80"; .connect_timeout = 2s; .between_bytes_timeout = 2s; .saintmode_threshold = 20; .first_byte_timeout = 10s; .max_connections = 1024; .probe = { # health 체크 Probe 설정 .url = "/healthCheck.html"; .timeout = 5s; .interval = 3s; .window = 5; .threshold = 2; } } director directorA round-robin { # 벡엔드 로드 밸런싱 {.backend = backend1;} {.backend = backend2;} {.backend = backend3;} {.backend = backend4;} }
  • 12
  •   /
  •   varnish
  •    2.3
  •   
  •   VCL
  •   ­–
  •   vcl_recv
  •    sub vcl_recv{ # Set Client Ip remove req.http.X-Forwarded-For; set req.http.X-Forwarded-For = client.ip; # cache 하지 않는 URL 설정 if( req.url ~ "/.*.json" || req.url ~ "/request.jsp" ){ set req.backend = backend1; return (pipe); } # backend server 설정 set req.backend = directorA; set req.grace = 30m; # cache 대상 URL 설정 if (req.url ~ "/index.jsp" || req.url ~ “home.jsp“ ){ return (lookup); } return (pipe); }
  • 13
  •   /
  •   varnish
  •    2.4
  •   
  •   VCL
  •   ­–
  •   vcl_fetch
  •    sub vcl_fetch { remove beresp.http.Vary; # 캐시 하지 않는 경우 if( beresp.http.X-Cacheable == "false" || beresp.http.Set-Cookie ){ set beresp.ttl = 0s; set beresp.grace = 0s; return (hit_for_pass); } # error 응답이면 restart if( beresp.status >= 500 ){ return (restart); } # Object TTL 설정 set beresp.grace = 30m; set beresp.ttl = 1m ; if( req.url ~ "^/(index.jsp" ){ set beresp.ttl = 5m ; } }
  • 14
  •   /
  •   varnish
  •    2.5
  •   
  •   VCL
  •   ­–
  •   vcl_hash
  •    sub vcl_hash { # URL로 해시 hash_data( req.url ); # IOS vs Android if ( req.http.user-agent ~ "iPhone" || req.http.user-agent ~ "iPad" ) { hash_data( "iOS" ); } else { hash_data( "Android" ); } # PC vs Mobile if ( req.url ~ "/viewer.jsp" ){ if ( req.http.user-agent ~ "(?i)mobile" ){ hash_data( "mobile" ); }else{ hash_data( "pc" ); } } return( hash ) ; }
  • 15
  •   /
  •   varnish
  •    2.6
  •   
  •   VCL
  •   ­–
  •   vcl_deliver,
  •   vcl_pipe,
  •   vcl_error
  •    sub vcl_deliver{ if (obj.hits > 0) { # cache에서 hit한 경우 set resp.http.X-Varnish-Cache = "HIT"; } else { set resp.http.X-Varnish-Cache = "MISS"; } set resp.http.connection = "close"; # keep-alive off } sub vcl_pipe{ set bereq.http.connection = "close"; # keep-alive off } sub vcl_error { # 세번 restart 시도 if ( req.restarts < 3 ) { return(restart); } # error 페이지로 redirect set obj.http.location = "http://domain_name/error.jsp"; set obj.status = 302; return( deliver ) ; }
  • 3.
  •   Varnish
  •   grace
  •   mode
  •   
  • 17
  •   /
  •   varnish
  •    3.1
  •   
  •   Varnish
  •   grace
  •   mode
  •    grace
  •   object를
  •   사용하는
  •   경우
  •    •  선택된
  •   Backend
  •   서버가
  •   Unhealthy
  •   한
  •   경우
  •    •  이미
  •   다른
  •   thread가
  •   Backend로
  •   요청을
  •   보내고
  •   응답을
  •   기다리고
  •   있는경우
  •    
  •    grace
  •   object
  •   TTL
  •   설정
  •    sub vcl_recv { if (req.backend.healthy) { set req.grace = 30s; } else { set req.grace = 1h; } } sub vcl_fetch { set beresp.grace = 1h; } 
  •    
  •   
  •    
  •    Varnish
  •    Backend
  •    Waitinglist
  •    If
  •   exist 
  •   grace
  •    obj?
  •   
  •   
  • 4.
  •   Varnish
  •   튜닝
  •   
  • 19
  •   /
  •   varnish
  •    4.1
  •   
  •   Varnish
  •   튜닝
  •    Varsnish
  •   시작
  •   스크립트
  •    …/varnish/sbin/varnishd -f /xxx/xxx/default.vcl -s malloc,4G -a 0.0.0.0:80 -T localhost:6082 -p se ss_workspace=262144 -p thread_pool_min=800 -p thread_pool_max=4000 -p listen_depth=102 40 -u root -g root 
  •    
  •    커널
  •   파라미터
  •    net.ipv4.tcp_wmem net.core.somaxconn net.core.netdev_max_backlog net.ipv4.tcp_max_tw_buckets fs.file-max Open Files Limit /etc/security/limits.conf /proc/pid/limits 
  •    
  •   
  • 5.
  •   Varnish
  •   적용사례
  •   
  • 21
  •   /
  •   varnish
  •    5.1
  •   
  •   서비스
  •   적용
  •   
  •   
  •   
  • 22
  •   /
  •   varnish
  •    5.2
  •   
  •   이슈
  •   (1)
  •    Client
  •   IP
  •    -
  •   문제
  •    1)  동영상
  •   재생,
  •   생중계에
  •   
  •   해외
  •   IP
  •   제한으로
  •   WAS에
  •   Client
  •   IP
  •   
  •   검사가
  •   필요
  •    2)  Client
  •   IP가
  •   아닌
  •   
  •   Varnish
  •   서버
  •   IP가
  •   Backend
  •   웹서버로
  •   전달됨
  •    -
  •   해결
  •    
  •   
  •   
  •   Varnish에서
  •   http
  •   request
  •   header에
  •   Client
  •   IP를
  •   세팅하고
  •   Apache
  •   
  •   rpaf
  •   module
  •   로
  •   Client
  •   IP
  •   변환
  •    
  •    
  •   
  • 23
  •   /
  •   varnish
  •    5.3
  •   
  •   이슈
  •   (2)
  •    User-Agent별
  •   UI가
  •   다름
  •    -
  •   문제
  •    1)  IOS/Android
  •   에
  •   따라
  •   모바일
  •   페이지의
  •   meta태그인
  •   viewpoint와
  •   body
  •   tag의
  •   class
  •   속성값이
  •   변경됨
  •    2)  IOS/Android에
  •   따라
  •   페이지
  •   네비게이션
  •   UI가
  •   상이함
  •    -
  •   해결
  •    
  •   
  •   
  •   
  •   vcl_hash
  •   함수에서
  •   User-Agent를
  •   검사하여
  •   IOS/Android
  •   
  •   분기
  •   처리
  •    
  •    
  •    
  •   
  • 24
  •   /
  •   varnish
  •    5.4
  •   
  •   이슈
  •   (3)
  •    비정상적인
  •   페이지,
  •   
  •   HTTP
  •   200
  •   response
  •   code가
  •   전달됨
  •    -
  •   문제
  •    1)  기사
  •   페이지는
  •   본문을
  •   읽어오지
  •   못하는
  •   경우,
  •   에러
  •   메세지를
  •   담고
  •   200
  •   status를
  •   코드를
  •   보냄
  •    2)  1분
  •   동안
  •   에러
  •   페이지가
  •   캐슁될
  •   수
  •   있는
  •   문제가
  •   존재
  •   
  •    -
  •   해결
  •    
  •   
  •   
  •   
  •   
  •   X-cacheable
  •   header
  •   값을
  •   세팅하고
  •   varnish
  •   vcl_fetch
  •   에서
  •   예외처리
  •    
  •    
  •   
  • 25
  •   /
  •   varnish
  •    5.5
  •   
  •   이슈
  •   (4)
  •    Keep
  •   Alive
  •    -
  •   문제
  •    1)  Varnish
  •   는
  •   HTTP
  •   1.1
  •   SPEC를
  •   따라
  •   default로
  •   Keep-Alive
  •   로
  •   connection을
  •   유지한다.
  •    -
  •   해결
  •    
  •   
  •   
  •   
  •   
  •   vcl에서
  •   Header에
  •   connection
  •   :
  •   close로
  •   세팅
  •    
  •    
  •   
  • 26
  •   /
  •   varnish
  •    5.6
  •   
  •   이슈
  •   (5)
  •    Varnish
  •   서버를
  •   어디에
  •   두어야
  •   할까?
  •    •  Varnish
  •   ­–
  •   Apache
  •   ­–
  •   Tomcat
  •   
  •   (
  •   성능,
  •   확장
  •   유연성
  •   )
  •    •  Apache
  •   ­–
  •   Varnish
  •   ­–
  •   Tomcat
  •    
  •    캐시
  •   대상
  •   URL
  •   리스트는
  •   어떻게
  •   관리할까?
  •    •  Black
  •   List
  •   
  •    •  White
  •   List
  •   (
  •   안정성
  •   )
  •    캐시
  •   TTL과
  •   
  •   메모리
  •   크기는
  •   ?
  •    •  ttl
  •   =
  •   1m
  •   
  •    •  grace.ttl
  •   =
  •   2h
  •   
  •    •  -s
  •   malloc,512M
  •    
  •    그
  •   외
  •   결정해야
  •   했던
  •   것들
  •   
  • 6.
  •   Epilogue
  •   
  • Thank
  •   you.
  •