이미지 서버 구축에 관련해서 궁금한 점이 있습니다.

comahead의 이미지

안녕하세요..
접속이 많은 사이트에서 호출되는 이미지 서버를 따로 구축했는데요.
썸네일 이미지를 200~300개나 포함한 페이지가 있다면,
웹서버에서 페이지 실행이 완료되기 까지는 시간이 0.5초대 이하밖에 안 되는데,
브라우저에서 이미지를 포함해서 로딩이 완료되기 까지는 20~30초나 걸립니다..
그래서
HttpWatch라는 도구로 보니까 Block -> Connect -> Send -> Wait -> Receive 단계 중에
Wait에서 시간이 많을 잡아먹더라구요..
매뉴얼에 보면 Wait는 네트워크 전송속도와 서버 프로세싱 시간이라고 하던데,
이미지서버의 프로세스를 보면 메모리나 CPU 사용율이 전혀 높지가 않거든요..
그렇다고 네트워크 속도가 느린것도 아니구요..
뭐가 원인일까요..
혹시, 이미지 서버에는 부하는 없지만, 뭔가 모를 이유로 인해서
요청으로부터 전송까지 처리하면서 내부적으로 이미지 파일에 대한 접근이 원할하지 않아서 그런게 아닐까요..
어디서 보니까..
File Descriptor 부분에 Limit를 좀 늘려주면 될거라는 얘기도 있던데..
정말 관련이 있을까요..

다즐링의 이미지

1. keepalive 를 킨다.

좀 더 설명을 하자면 IE 는 같은 도메인에 대해서 2개만 tcp 를 엽니다.
( 대한민국의 사정은 보통 IE6 니까 이거 기준으로.. )
keepalive 를 키면 tcp handshake 시간이 줍니다.
여러가지 기법이 있긴하지만 nginx , lighttpd 등을 쓰고 동접은 1-3만정도 잡아주고 keepalive 를 켜주는게 제일 좋습니다.

2. 좀더 빠른 디스크나 IO 를 쓴다 ( 메모리라던가.. )
3. dns 문제일 가능성
4. 웹서버의 종류를 확인한다. ( nginx , lighttpd 강추 )
5. mod_expire

------------------------------------------------------------------------------------------------
Life is in 다즐링

------------------------------------------------------------------------------------------------
Life is in 다즐링

송효진의 이미지

제 실험 결과는 반대로 나오더군요.
keepalive 를 끄는게 좋았습니다.
IE6 에서 그 2개의 접속을 안끊고 다 처리하려다가 접속이 아예 끊겨버려서 배꼽이 나오는 이미지가 많았습니다.
nginx 도 keepalive 를 최대한 줄여야 하더군요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

다즐링의 이미지

다음과 같이 실험해보시기 바랍니다.

1. 직접서빙은 nginx with keelalive
2. 직접서빙을 할 nginx 는 proxy 형태로 동작
3. 데이터는 apache 나 nginx 에서 뿌려줌
4. 직접서빙용 nginx 는 백엔드로 2대이상을 가짐

데이터 서빙용 nginx 는 가급적 메모리를 많이 두어야하고 나머지는 onthefly 로 해야합니다.

------------------------------------------------------------------------------------------------
Life is in 다즐링

------------------------------------------------------------------------------------------------
Life is in 다즐링

preisner의 이미지

제 경험상 이미지가 많은 경우 KeepAlive 를 꺼야 합니다.
동시에 그리고 Apache 의 MaxClient 수치도 올려 주어야 하고요.
tcp 3way handshaking 과정이 부하가 걸리는 과정임에도 확실히 KeepAlive 를 끄는게 반응 속도가 빨라집니다.
전에 일하던 회사의 서비스 중 하나가 사진 앨범 서비스 하는 시스템이라 저도 같은 고민을 했었기 때문에 잘 알고 있습니다.

Quote:
좀 더 설명을 하자면 IE 는 같은 도메인에 대해서 2개만 tcp 를 엽니다.
( 대한민국의 사정은 보통 IE6 니까 이거 기준으로.. )

이건 첨 듣는 이야기 군요.
웹으로 파일을 다운로드 하는 경우 이런 제한이 있습니다만, 일반적으로 웹서핑 하는데 적용되는 건 아닌 사항인 것 같습니다.
(물론 웹서핑 이미지 다운로드나 파일 다운로드나 내부적인 차이는 없겠습니다만..)
그렇다면 제가 봐온 10만개의 TIME_WAIT 은 수만명의 동시 접속 이었다는게 되는데, L4 에서는 전혀 다른 값을 보고 하더군요.

이미지를 분리 하기로 하신 건 잘 하신 결정 입니다.
웹 서비스 시스템 설계에서 중요한 사항 하나가,
동적 컨텐츠 서비스 시스템과 정적 컨텐츠 시스템을 완전히 분리 해야 한다. 입니다.
PHP든 Java든 동적 페이지의 최적화와 정적 컨텐츠 서비스의 최적화는 방향이 다르기 때문에 동시에 최적화 하기 어렵습니다.
그래도 반응 속도가 느리다면
1. lighttpd 같은 속도에 최적화 된 웹서버로 교체 한다.
2. varnish 같은 Cache 서버를 도입한다. (L7 스위치의 이미지 리다이렉션을 사용하든, 로컬 Caching 을 사용 하든지)
3. CDN 서비스를 이용 한다.
로 해결 할 수 있겠습니다. (아래로 올수록 시스템 비용은 비싸 집니다.)

superwisdom의 이미지

제 경험상 ie6에서는 서버 하나에 커넥션을 두개 밖에 만들지 않았습니다.
참고: http://kldp.org/node/102781
파일 다운로드 받을때만 2개의 제한이 있는 것이 아니더라구요.
http 1.1 에서는 클라이언트당 2개까지의 커넥션을 권장한다고 하지만, 요즘과 같이 Ajax가 광범위하게 쓰이는
환경에서 두 개는 부족하죠. (IE8에서는 8개로 늘린다는 소식을 들었지만 확인은 못했습니다.)

다즐링의 이미지

아파치라서 그런것입니다.

동접을 더 하더라도 문제가 없는 lighttpd 나 nginx 의 경우 켜는것이 더 좋습니다.

L4 와 TIME_WAIT 의 차이는 sysctl 로 설정값을 변경해서 비슷하게 만들수 있습니다.

부연으로 이미지의 경우 도메인을 *.image.xxx.com 이런식으로 처리하고..

로딩할때 a1.image.xx.com a3 이런식으로 동시에 여러개를 열수 있습니다.

------------------------------------------------------------------------------------------------
Life is in 다즐링

------------------------------------------------------------------------------------------------
Life is in 다즐링

송효진의 이미지

사이트 제작시 부터 고려하지 않고서는 그다지 쉬운 길이 아니군요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

superwisdom의 이미지

이 경우, 서버보다는 브라우져의 영향을 많이 받았을것으로 생각됩니다.
서버(웹서버)에서도 "클라이언트 하나당 몇 개까지 동시에 붙을 수 있다!"라고 제한하지만,
클라이언트(브라우져)에서도 "서버 하나에 몇개 이상은 동시 접속 하지 말자!"라고 스스로 제한을 하거든요.

http://seaking.tistory.com/26

이 글을 보시면 많은 도움이 될 것 같습니다.

comahead의 이미지

lightpd 사용을 적극 추천해야겠네요..
참 그리구..
서버담당자가 그러는데..
KeepAlive Off 이렇게 해 놓으면 F5 무한 클릭 및 방화벽 설정을 할 수 없다는군요..
그리고 load average: 0.00 에서는 별 의미가 없다고 하구요.

송효진의 이미지

f5 연타 같은 것은 이미지 서버가 아닌 본 서버에 해당하는 것이므로 mod_evasive 정도 하면 될 것 같네요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

다즐링의 이미지

그외에 참고하실만한..

http://www.scribd.com/doc/16878352/The-Secret-Weapons-of-the-AOL-Optimization-Team

AOL 최적화팀의 비밀 무기 라는 문서입니다.

------------------------------------------------------------------------------------------------
Life is in 다즐링

------------------------------------------------------------------------------------------------
Life is in 다즐링

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.