http://www.liveinternet.ru/stat/mail.ru/mins.html
http://www.liveinternet.ru/stat/vkontakte.ru/mins.html
Статистических пакетов в секунду (RPS,PPS)
Nginx frontend active connections
Доступность % Время простоя в год Время простоя в месяц
99% ("две девятки") 3.65 дней 7.20 часов
99.5% 1.83 дней 3.60 часо...
helloworld.pl:
#!/usr/bin/perl
print "Content-type: text/htmlnn";
print "<H1>Hello World</H1>n";
%ENV:
DOCUMENT_ROOT = /us...
•
•
•
•
•
•
•
•
•
#include <httpd.h>
#include <http_protocol.h>
#include <http_config.h>
static int helloworld_handler(request_rec *r) {
if ...
# apxs -c mod_helloworld.c
# apxs -i mod_helloworld.la
httpd.conf:
LoadModule helloworld_module modules/mod_helloworld.so
...
static ngx_int_t
ngx_http_hello_handler(ngx_http_request_t *r)
{
ngx_int_t rc;
ngx_buf_t *b;
ngx_chain_t out;
/* we respon...
config:
ngx_addon_name=ngx_http_hello_module
HTTP_MODULES="$HTTP_MODULES ngx_http_hello_module"
NGX_ADDON_SRCS="$NGX_ADDON...
nginx.conf:
location /lua_content {
content_by_lua "ngx.say('Hello,world!')";
}
•
•
•
•
•
•
•
•
•
•
•
•
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Upcoming SlideShare
Loading in...5
×

Highload осень 2012 лекция 1

274

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
274
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • RPM – для сайтовRPS – для нагруженных подистемConnections – instant messenger, websocket, L7 balancer..
  • Все менеджеры делают это – смотрят на этот графикВопрос залу: как объяснить пик ?
  • в данном случае «1 UDP-пакет» = «1 запрос»1сервер «тянет» порядка 120 000 PPS,, поэтому используем много серверов
  • Либо бесконечную загрузку, зависит от типа отказа
  • Uptime – время с последнего ребута сервера
  • Uptime – время с последнего ребута сервера
  • Был придуман для асинхронного веб-сервера lighttpd (lighty)
  • Чем эффективнее будет написан тем больше будет оценка на экзаменеСледующим заданием будет нагрузочное тестирование
  • Highload осень 2012 лекция 1

    1. 1. http://www.liveinternet.ru/stat/mail.ru/mins.html
    2. 2. http://www.liveinternet.ru/stat/vkontakte.ru/mins.html
    3. 3. Статистических пакетов в секунду (RPS,PPS)
    4. 4. Nginx frontend active connections
    5. 5. Доступность % Время простоя в год Время простоя в месяц 99% ("две девятки") 3.65 дней 7.20 часов 99.5% 1.83 дней 3.60 часов 99.9% ("три девятки") 8.76 часов 43.2 минут 99.95% 4.38 часов 21.56 минут 99.99% ("четыре девятки") 52.56 минут 4.32 минут 99.999% ("пять девяток") 5.26 минут 25.9 секунд 99.9999% ("шесть девяток") 31.5 секунд 2.59 секунд
    6. 6. helloworld.pl: #!/usr/bin/perl print "Content-type: text/htmlnn"; print "<H1>Hello World</H1>n"; %ENV: DOCUMENT_ROOT = /usr/local/www GATEWAY_INTERFACE = CGI/1.1 HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 HTTP_ACCEPT_CHARSET = ISO-8859-1,utf-8;q=0.7,*;q=0.3 HTTP_ACCEPT_ENCODING = gzip,deflate,sdch HTTP_ACCEPT_LANGUAGE = en-US,en;q=0.8 HTTP_CACHE_CONTROL = max-age=0 HTTP_CONNECTION = close HTTP_COOKIE = p=uc0bAMnfrgAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAdAA4FxQcA; VID=1Y6UOS0sMI11 HTTP_HOST = bykov.corp.mail.ru HTTP_USER_AGENT = Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 MRSpy/1.0.0 QUERY_STRING = REMOTE_ADDR = 194.186.63.231 REMOTE_PORT = 51638 REQUEST_METHOD = GET REQUEST_URI = /cgi-bin/hellowworld.pl SERVER_ADDR = 127.0.0.1 SERVER_ADMIN = bykov@corp.mail.ru SERVER_NAME = bykov.corp.mail.ru SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.0
    7. 7. • • •
    8. 8. • •
    9. 9. • • • •
    10. 10. #include <httpd.h> #include <http_protocol.h> #include <http_config.h> static int helloworld_handler(request_rec *r) { if (!r->handler || strcmp(r->handler, "helloworld")) { return DECLINED; } if (r->method_number != M_GET) { return HTTP_METHOD_NOT_ALLOWED; } ap_set_content_type(r, "text/html;charset=ascii"); ap_rputs("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">n", r); ap_rputs("<html><head><title>Apache HelloWorld " "Module</title></head>", r); ap_rputs("<body><h1>Hello World!</h1>", r); ap_rputs("<p>This is the Apache HelloWorld module!</p>", r); ap_rputs("</body></html>", r); return OK; } static void helloworld_hooks(apr_pool_t *pool) { ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE); } module AP_MODULE_DECLARE_DATA helloworld_module = { STANDARD20_MODULE_STUFF, NULL, NULL, NULL, NULL, NULL, helloworld_hooks };
    11. 11. # apxs -c mod_helloworld.c # apxs -i mod_helloworld.la httpd.conf: LoadModule helloworld_module modules/mod_helloworld.so <Location /helloworld> SetHandler helloworld </Location>
    12. 12. static ngx_int_t ngx_http_hello_handler(ngx_http_request_t *r) { ngx_int_t rc; ngx_buf_t *b; ngx_chain_t out; /* we response to 'GET' and 'HEAD' requests only */ if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) { return NGX_HTTP_NOT_ALLOWED; } /* discard request body, since we don't need it here */ rc = ngx_http_discard_request_body(r); if (rc != NGX_OK) { return rc; } /* set the 'Content-type' header */ r->headers_out.content_type_len = sizeof("text/html") - 1; r->headers_out.content_type.len = sizeof("text/html") - 1; r->headers_out.content_type.data = (u_char *) "text/html"; /* send the header only, if the request type is http 'HEAD' */ if (r->method == NGX_HTTP_HEAD) { r->headers_out.status = NGX_HTTP_OK; r->headers_out.content_length_n = sizeof(ngx_hello_string) - 1; return ngx_http_send_header(r); } /* allocate a buffer for your response body */ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); if (b == NULL) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } /* attach this buffer to the buffer chain */ out.buf = b; out.next = NULL; /* adjust the pointers of the buffer */ b->pos = ngx_hello_string; b->last = ngx_hello_string + sizeof(ngx_hello_string) - 1; b->memory = 1; /* this buffer is in memory */ b->last_buf = 1; /* this is the last buffer in the buffer chain */ /* set the status line */ r->headers_out.status = NGX_HTTP_OK; r->headers_out.content_length_n = sizeof(ngx_hello_string) - 1; /* send the headers of your response */ rc = ngx_http_send_header(r); if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) { return rc; } /* send the buffer chain of your response */ return ngx_http_output_filter(r, &out); }
    13. 13. config: ngx_addon_name=ngx_http_hello_module HTTP_MODULES="$HTTP_MODULES ngx_http_hello_module" NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_hello_module.c" ./configure –add-module=./hello/ & make && make install nginx.conf: location / { hello; }
    14. 14. nginx.conf: location /lua_content { content_by_lua "ngx.say('Hello,world!')"; }
    15. 15. • • • • • • • • • • •
    16. 16.
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×