Fast Web Service #3 어디서 빨라야 하는가. 1

다즐링의 이미지

앞서 #2 번에서
어떤것이 빠른것인지 정의 했고
제어가 가능한 다음의 것에 대해서 이야기했다.

고객의 요청이 서버에 도달하는데 걸린시간 + 서버에서 처리하는데 걸린시간 + 처리결과가 도달하는데 걸린시간 + 브라우저에서 데이터를 파싱하고 보여주는 시간

먼저 고객의 요청이 서버에 도달하는데 걸린 시간이라는 항목부터 생각해보자.

현재 웹서비스에서 웹 요청은 tcp/ipv4 위에서 이루어진다.
그러면 당연히 tcp 부터 생각해야한다.
그리고 현재 ip 세상에서 일반적으로 라우터는 mtu 가 1500 이다.
( MTU 를 모른다면 http://en.wikipedia.org/wiki/Maximum_transmission_unit 를 참조 )

그리고 TCP 의 헤더사이즈는 20 byte 이다. 그럼 우리가 한번에 보낼수 있는 데이터는 1480 byte 가 되겠다.
물론 세상의 라우팅은 험란하기 때문에 안전하게 1400 byte 정도가 적절하다 하겠다. ( vpn , wan 가속기 등 변수는 무궁무진하다 , 1460 정도면 충분하지만 혹시 모르니까. )

그럼 다시금 고민을 해보자.

웹요청은 어떻게 되는가?
그림을 한번 보자. http://livehttpheaders.mozdev.org/livehttpheaders.jpg
제일위의 요청 부분이 기본적인 요청이고 다음의 필드들이 추가가 가능하다. http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

물론 위에서 1400 byte 를 이야기 했지만 대부분의 웹에서 처음요청은 tcp window size 내에서 이루어지기 떄문에
일반적으론 크게 상관없다. ( 그게 tcp window size 이내라면 ack 를 받지 않고 일단 보내고 받는다 )

하지만 쿠키가 계속 추가가 되거나 계속 달고 다니도록 프로그래밍을 한다면 그리고
packet loss 가 잦은 지역 혹은 모바일 환경이라면 1400 byte 이내로 모든 요청이 가능하도록 프로그래밍을 해야한다.
그리고 요청양이 작을수록 모든 경우에 유리하다. 대부분의 속도가 중요시되는 웹서비스들은
여러겹의 레이어에 쌓여있다.
보통 L4 -> Web -> Was 정도고 복잡한 경우는 4-8단계까지 내려가는 경우가 있다. 이런 경우까지 고려하자면 무조건 작은 경우가 유리하다.
매우 당연한 이야기다.
( 지금까지 매우 당연한 이야기를 매우 당연하게 하고 있지만 매우 당연하지 않은 대한민국의 현실은 외면하도록 하자. -_- ;; )

댓글

dhunter의 이미지

모바일 환경에서도 MTU가 1400byte 가 확보가 된다는 이론적 해석이 가능할까유? ㅇㅇ?
--
from bzImage
It's blue paper

from bzImage
It's blue paper

iamt의 이미지

다음편 기대할꼐요 ^^ 잘읽었습니다.
---------------------------------------------------------------------------------
C(++)과 php 펄등을 공부하고있습니다.
반갑습니다! 리눅스 :-)

---------------------------------------------------------------------------------
C(++)과 php 펄등을 공부하고있습니다.
반갑습니다! 리눅스 :-)

jinoos의 이미지

좋은글 잘 보고 있습니다. :)

MTU값을 고려한 처리는 모바일에서라기 보다 극강의 RT를 필요로 하는곳에서 더 절실하다고 봅니다.

예를 들어, 검색 폼에서 사용되는 다이나믹 자동완성 같은 기능들은 RT가 생명인지라 진짜 MTU 사이즈를
고려해서 해줘야 확실한 성능을 보장할수 있죠.

목적을 찾아서... jiNoos

kirrie의 이미지

헤더 포함해서 1.4kb란 말씀이시죠?
--->
데비안 & 우분투로 대동단결!

--->
데비안 & 우분투로 대동단결!

shyblue의 이미지

그런데, 웹서비스 말고 사이트 서비스는 개선안하나?? 그동네는(회사명 자체 검열) 사이트 서비스(고객만족도)가 개판5분전이 아니라 그냥 개판이던데. ㅡㅡ

時日也放聲大哭

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.