рд╣рдо рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рдПрдПрдордХреНрдпреВрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдкреИрдорд╛рдиреЗ рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдирдП рдореЙрдбреНрдпреВрд▓ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рджрд▓рд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ, RabbitMQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирдЧрдиреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреНрд░рдВрдЯреЗрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рддрдХ, рд╣рд░ рдЬрдЧрд╣ рд╣рдордиреЗ рдПрдХ рдмреНрд░реЛрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП php-amqp рдФрд░ librabbitmq-0.0.1 рдХрд╛ рдЧреБрдЪреНрдЫрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ, рдпрд╣ рд╣рдореЗрдВ рдмреЗрдорд╛рдиреА рд▓рдЧ рд░рд╣рд╛ рдерд╛ред
рдХрд╛рд░реНрдп
рд░реИрдмрд┐рдЯрдПрдордХреНрдпреВ рдмреНрд░реЛрдХрд░ рдХреЛ рд╕реАрдзреЗ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рд╕реАрдЦреЗрдВ, php рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░реЗрдВред рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд┐рдВрдЧ рдмреИрд╕рд╛рдЦреА рдХреЛ рдХрдо рдХрд░реЗрдВред
рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛ рдЬреЛ рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╣реБрдд рд╣реА рд╕реЗрд╡рд╛ рднрд╛рдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЬреЛ рдХреБрдЫ рдЖрдВрдХрдбрд╝реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдХреЛ рдЖрдЧреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рднреА рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдзреАрдореЗ рдмреИрдХрдПрдВрдб рднреА рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдХреБрдЫ рднреА рдХрд╣реАрдВ рднреА рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИред
рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗред
Nginx рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ
рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдУрдкрдирдПрд╕реНрдЯреА рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдордХреНрдпреВрдкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдЗрдВрдЯрд░рдиреЗрдЯ рднреА рд▓рдЧрднрдЧ рдЦрд╛рд▓реА рд╣реИ, рдпрд╣ рд╡рд┐рд╖рдп 2010 рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рд╛рд▓ рдпрд╣ рднреА рдорд░ рдЧрдпрд╛ред
0MQ рдХреЗ рд▓рд┐рдП
рдПрдХ Nginx рдореЙрдбреНрдпреВрд▓ рдФрд░ RabbitMQ рдХреЗ рд▓рд┐рдП рдПрдХ
рдкреНрд▓рдЧрдЗрди рд╣реИ, рдЬреЛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╕реЗ, 2010ред
- рдЖрдк Nginx рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
- рдЖрдк рд▓реБрдЖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рддреИрдпрд╛рд░ рдмрд╛рдБрдз рдирд╣реАрдВ рд╣реИрдВ, рдЖрдкрдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
- рдЖрдк рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рддреЗрдЬ рдФрд░ рддреЗрдЬ рдХрд░реЗрдВред
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рд▓рдВрдмрд╛ рд╣реИ рдФрд░ рд╣рдо рдЕрднреА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдирд╣реАрдВ рд╣реИрдВ)))
рдкрд░реНрд▓ рдореЗрдВ рд▓рд┐рдмрд░рд░рд╛рдмрдмрд┐рдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ
рдЖрд╡рд░рдг рдкрд╛рдпрд╛ рдЧрдпрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, nginx рдПрдореНрдмреЗрдбреЗрдб рдкрд░реНрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рд╕рднреА рдбрд┐рдмреЗрдЯ рдореЗрдВ рдкреИрдХреЗрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА nginx = 1.2.4ред
рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ --with-http_perl_module рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдФрд░ рдпрд╣ рдХрд┐ рдЗрдХрдЯреНрдареЗ рдореЙрдбреНрдпреВрд▓ рдХреА рдлрд╛рдЗрд▓реЗрдВ рд░рд╛рд╕реНрддреЛрдВ рдореЗрдВ рдЦреЛрдЬреА рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛:
objs/src/http/modules/perl/blib/lib/nginx.pm usr/lib/perl/5.14
objs/src/http/modules/perl/blib/arch/auto/nginx/nginx.so usr/lib/perl/5.14/auto/nginx
рдиреЗрдЯ :: RabbitMQ рд╣рдо
рдпрд╣рд╛рдБ рд╕реЗ рд▓реЗ
рдЧрдП ред
Nginx.conf рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛
http { perl_modules /etc/nginx/perl; perl_require rmqsux.pm; ...
Testite.conf рдХрд╛ рдЯреБрдХрдбрд╝рд╛ server { listen 80; server_name test01.dev; location / { perl rmqsux::amqppull; } }
рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдкрд┐: whoareyou@test01:/etc/nginx/perl
рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдлреЗрд▓ рд╣реЛ рдЧрдпрд╛ ред рдЖрдк рдЕрдзрд┐рдХ рдЧрдВрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЦрд░рдЧреЛрд╢рдореЗрдХ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯреНрдпреВрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
silenkov@sn00p:/home$ ab -c 300 -n 100000 http://test01.dev/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking test01.dev (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: nginx Server Hostname: test01.dev Server Port: 80 Document Path: / Document Length: 20 bytes Concurrency Level: 300 Time taken for tests: 10.402 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Total transferred: 13500000 bytes HTML transferred: 2000000 bytes Requests per second: 9613.40 [#/sec] (mean) Time per request: 31.206 [ms] (mean) Time per request: 0.104 [ms] (mean, across all concurrent requests) Transfer rate: 1267.39 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 14 126.9 2 3007 Processing: 1 14 30.0 9 1543 Waiting: 1 13 30.0 8 1543 Total: 3 29 136.8 11 3230 Percentage of the requests served within a certain time (ms) 50% 11 66% 15 75% 16 80% 16 90% 20 95% 49 98% 56 99% 1009 100% 3230 (longest request)
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо 5% рдХреЗ рднреАрддрд░ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
Php + librabbitmq рдХреЗ рдПрдХ рд╕рдореВрд╣ рдиреЗ рд╣рдореЗрдВ 300-600 рдЖрд░рдкреАрдПрд╕ рджрд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ php рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рдЕрдВрддрд┐рдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- рд▓реЛрдб рдХреЗ рддрд╣рдд, рдХрдиреЗрдХреНрдЯ рдЕрдХреНрд╕рд░ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЗрддрдиреА рдореБрд╢реНрдХрд┐рд▓ рдЪрд╛рд▓) рд╣рдо рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдП рд╣реИрдВред 6000 рдЖрд░рдкреАрдПрд╕ рддрдХ, рдХреБрдЫ рднреА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдлрдЯрд╛ рдирд╣реАрдВ рд╣реИред
- рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдЖрдк рд▓реБрдЖ рдкрд░ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдЧрд╛ред
- рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЕрднреА рддрдХ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред
- рдЗрд╕ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рддрдВрддреНрд░ рдХреА рдЬрд░реВрд░рдд рд╣реИред Nginx рдЕрднреА рднреА рдХрд┐рд╕реА рднреА рдмреИрдХрдПрдВрдб рд╕реЗ рддреЗрдЬ рд╣реИред рд╡рд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд▓рд╛рдЦ рдЖрд░рдкреАрдПрд╕ рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреИрдХрдПрдВрдб рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИред limit_req_zone рдпрд╣рд╛рдВ рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд▓реЛрдб рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдлрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдмрд╣реБрдд рднрд╛рддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рдЦреЛ рдирд╣реАрдВ рд░рд╣реЗ рд╣реИрдВ, рдЪреМрдереЗ рджрд┐рди рдХреБрдЫ рднреА рд▓реАрдХ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдЕрдм рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд╣рдо рдЙрдкрднреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдореЗрдВ рд░рдЯрдирд╛ рд╣реИ, рдирдЧреНрдиреЗрдХреНрд╕ рдореЗрдВ рднреА рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
рдХреГрдкрдпрд╛ рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдРрд╕реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрд░рдкреАрдПрд╕ рдФрд░ рдмрд╣реБрдд рдХрдо рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ, рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рднреА рдХрд┐рд╕реА рднреА рдорджрдж рдФрд░ рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реЛрдВрдЧреЗ!