SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Jim Jagielski
@jimjag
Apache httpd v2.4:
What’s New,
Pussycat?
This should
be pretty good!
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
About Me
➡ Apache Software Foundation
➡ Co-founder, Director, Member and Developer
➡ Director
➡ Outercurve, MARSEC-XL, OSSI, OSI (ex)…
➡ Developer
➡ Mega FOSS projects
➡ O’Reilly Open Source Award: 2013
➡ European Commission: Luminary Award
➡ Sr. Director: Tech Fellows: Capital One
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Hold on a tic
➡ How do you define “new”??
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
httpd is sooo old school (aka fud)
➡ Apache doesn’t scale (its SLOW)
➡ http://www.youtube.com/watch?v=bzkRVzciAZg



➡ Apache is too generalized





➡ Apache is too complex (config file)
➡ really?
➡ Apache is too old

(yeah, just like Linux)
vs
It’s Squagels!
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Apache httpd 2.4 - design drivers
➡ New features and improve old ones
➡ Support for async I/O w/o dropping support for older systems
➡ Larger selection of usable MPMs: added Event, Motorz, etc...
➡ Leverage higher-performant versions of APR
➡ Increase performance
➡ Reduce memory utilization
➡ The Cloud
Currently at version 2.4.18 (2.4.1 went GA Feb 21, 2012)
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
What’s New: Apache httpd 2.4
➡ Configuration / Runtime Improvements
➡ New Modules / Capabilities
➡ Cloud / Proxy Enhancements
➡ Performance Increases
➡ HTTP/2
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Configuration - Runtime
➡ Finer control of timeouts, esp. during requests
➡ mod_reqtimeout
➡ KeepAliveTimout down to the millisecond
➡ Finer control over logging
➡ per module/per directory
➡ new logging levels (TRACE[1-8])
LogLevel info ssl:warn
<Directory "/usr/local/apache/htdocs/foo">
LogLevel debug
</Directory>
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Configuration - Runtime
➡ Other stuff:
➡ No more NameVirtualHost
➡ General purpose expression parser (BNF compatible)
➡ AllowOverrideList





➡ Loadable MPM modules
➡ Recall that different MPMs have different config directives!
AllowOverride None
AllowOverrideList Redirect RedirectMatch Header
./configure —enable-mpms-shared=all
LoadModule mpm_event_module modules/mod_mpm_event.so
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Configuration - Runtime
➡ Require
➡ Removes order/deny insanity!
AuthType Basic
AuthName "Restricted Resource"
AuthBasicProvider file
AuthUserFile /web/users
AuthGroupFile /web/groups
Require group admin
<Directory /www/docs>
<RequireAll>
Require group alpha beta
Require not group reject
</RequireAll>
</Directory>
<Directory /www/docs2>
Require all granted
</Directory>
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
New Modules
➡ mod_macro
<Macro VHost $name $domain>
<VirtualHost *:80>
ServerName $domain
ServerAlias www.$domain
DocumentRoot /var/www/vhosts/$name
ErrorLog /var/log/httpd/$name.error_log
CustomLog /var/log/httpd/$name.access_log combined
</VirtualHost>
</Macro>
Use VHost example example.com
Use VHost myhost hostname.org
Use VHost apache apache.org
UndefMacro VHost
From my
ApacheCon 2000
Preso
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Configuration - Runtime
➡ <If> supports per-request conditions
# Compare the host name to example.com and
# redirect to www.example.com if it matches
<If "%{HTTP_HOST} == 'example.com'">
Redirect permanent / http://www.example.com/
<ElseIf "%{HTTP_HOST} == ‘foobarfoo.com'">
Redirect permanent / http://www2.example.com/
</If>
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Configuration - Runtime
➡ Simple config-file variables: <Define>
<IfDefine TEST>
Define servername test.example.com
</IfDefine>
<IfDefine !TEST>
Define servername www.example.com
Define SSL
</IfDefine>
DocumentRoot /var/www/${servername}/htdocs
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
New Modules
➡ mod_lua
<Files *.lua>
SetHandler lua-script
</Files>
…
example.lua
require "string"
function handle(r)
r.content_type = "text/plain"
if r.method == 'GET' then
r:puts("Hello Lua World!n")
for k, v in pairs( r:parseargs() ) do
r:puts( string.format("%s: %sn", k, v) )
end
elseif r.method == 'POST' then
r:puts("Hello Lua World!n")
for k, v in pairs( r:parsebody() ) do
r:puts( string.format("%s: %sn", k, v) )
end
elseif r.method == 'PUT' then
r:puts("Unsupported HTTP method " .. r.method)
r.status = 405
return apache2.ok
else
return 501
end
return apache2.OK
end
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
New Modules
➡ mod_buffer
➡ buffer the i/o stacks w/i httpd
➡ mod_sed
➡ True sed functionality, alternate to mod_substitute









➡ mod_remoteip
➡ allow access to the real client IP address
<Directory "/var/www/docs/status">
AddOutputFilter Sed html
OutputSed "s/complete/DONE/g"
OutputSed “s/in-progress/TODO/g"
</Directory>
RemoteIPHeader X-Client-IP
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
New Modules
➡ mod_session
➡ easily maintain application server state
➡ mod_auth_form
➡ Form-based auth can now be handled internally
<Location /dologin.html>
SetHandler form-login-handler
AuthFormLoginRequiredLocation http://example.com/login.html
AuthFormLoginSuccessLocation http://example.com/success.html
AuthFormProvider file
AuthUserFile conf/passwd
AuthType form
AuthName realm
Session On
SessionCookieName session path=/
SessionCryptoPassphrase secret
</Location>
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
New Modules
➡ mod_log_debug
➡ Add debug logging at any hook







➡ mod_ratelimit
➡ (basic) bandwidth limiting for clients
<Location /foo>
LogMessage “subreq to foo” hook=type_checker expr=%{IS_SUBREQ}
</Location>
<Location /downloads>
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 400
</Location>
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Even more!
➡ mod_cache
➡ Can serve stale data if required
➡ X-Cache-Header now supports HIT/MISS/
REVALIDATE
➡ Can cache HEAD
➡ htcacheclean improvements
➡ mod_socache / mod_slotmem
➡ Data object/blog storage mechanisms
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
New Modules
➡ mod_proxy submodules:
➡ mod_proxy_fcgi
➡ mod_proxy_scgi
➡ mod_proxy_wstunnel
➡ mod_proxy_html
➡ mod_proxy_express
ProxyExpressEnable on

ProxyExpressDBMFile emap
…
##

##express-map.txt: httxt2dbm -i express-map.txt -o emap

##



www1.example.com http://192.168.002.2:8080

www2.example.com http://192.168.002.12:8088

www3.example.com http://192.168.002.10
...
www6341.example.com http://192.168.211.26
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Cloud and Performance
➡ The Cloud is a game changer for web servers
➡ Horizontal scalability is no longer as painful
➡ Concurrency is no longer the sole consideration
➡ ... or maybe even the primary one
➡ What’s important now? Transaction Time! (because it CAN be)
➡ Low latency
➡ Fast req/resp turnover
➡ Does density still matter? Of course!
➡ micro-services
➡ Are there environs where super-mega concurrency is the bugaboo?
You betcha! (but the cloud makes these more and more rare, and you’re likely
using a bad architecture anyway)
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Cloud and Dynamics
➡ The Cloud is a game changer for web servers
➡ The cloud is a dynamic place
➡ automated reconfiguration
➡ horizontal, not vertical scaling
➡ self-aware environments
OK, maybe not THAT self-aware
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Why Dynamic Proxy Matters
➡ Apache httpd still the most frequently used front-end
➡ Proxy capabilities must be cloud friendly
➡ Front-end must be dynamic friendly
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Apache httpd 2.4 proxy
➡ Reverse Proxy Improvements
➡ Supports FastCGI, SCGI, Websockets in balancer
➡ Additional load balancing mechanisms
➡ Runtime changing of clusters w/o restarts
➡ Support for dynamic configuration
➡ mod_proxy_express
➡ mod_fcgid and fcgistarter
➡ Brand New: Support for Unix Domain Sockets
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Putting it all together
<Proxy balancer://foo>
BalancerMember http://php1:8080/ loadfactor=1
BalancerMember http://php2:8080/ loadfactor=4
BalancerMember http://phpbkup:8080/ loadfactor=1 status=+h
BalancerMember http://phpexp:8080/ lbset=1
ProxySet lbmethod=bytraffic
</Proxy>
<Proxy balancer://javaapps>
BalancerMember ajp://tc1:8089/ loadfactor=1
BalancerMember ajp://tc2:8089/ loadfactor=4
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass /apps/ balancer://foo/
ProxyPassReverse /apps/ balancer://foo/
ProxyPass /serv/ balancer://javaapps/
ProxyPass /images/ http://images:8080/
ProxyPass /foo unix:/home/www.socket|http://localhost/bar/
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
balancer-manager
➡ Embedded proxy admin web interface
➡ Allows for real-time
➡ Monitoring of stats for each worker
➡ Adjustment of worker params
➡ Allows for real-time
➡ Addition of new workers/nodes
➡ Change of LB methods
➡ Can be persistent!
➡ More RESTful
➡ Can be CLI-driven
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
server-status aware
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Performance
➡ From Bryan Call’s 2014 ApacheCon preso

(http://www.slideshare.net/bryan_call/choosing-a-proxy-server-apachecon-2014)
•  Squid&used&the&most&
CPU&again&
•  NGiNX&had&latency&
issues&
•  ATS&most&throughput& 0&
500&
1000&
1500&
2000&
2500&
ATS& NGiNX& Squid& Varnish& hBpd&
RPS$/$CPU$Usage$
0&
5000&
10000&
15000&
20000&
25000&
30000&
ATS& NGiNX& Squid& Varnish& hBpd&
Requests$Per$Second$
0&
5&
10&
15&
20&
25&
30&
35&
40&
ATS& NGiNX& Squid& Varnish& hBpd&
Latency$
Median&
95th&
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Performance
➡ From Nic Rosenthal Battle of the stacks

(http://www.slideshare.net/AllThingsOpen/battle-of-the-stacks)
HHVM + NGINX!
!
vs!
!
HHVM + Apache 2.4!
!
http://ldr.io/1ogvD7X
http://ldr.io/1ogD7b3
Response time: 76ms
Response time: 60ms
HHVM + NGINX
HHVM + Apache 2.4
Image by Articularnos.com https://www.flickr.com/photos/articularnos/
Champion of the !
Battle Of The Stacks
ATO Edition
HHVM + Apache 2.4
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Raw Performance
➡ Event MPM : no longer experimental
➡ non-blocking
➡ async
➡ Faster, more efficient APR
➡ Smaller memory footprint
➡ More efficient data structures (worker and event)
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Apache httpd vs nginx
➡ Why nginx? Everyone asks about it...
➡ Benchmark: local and reverse proxy transaction times
➡ Apache httpd 2.4.18-dev, nginx 1.8.1
➡ CentOS6, Dual Xeon 3.33GHz
➡ 4GB memory
➡ localhost loopback and external (no firewall)
➡ Double checked results: OSX 10.11.2 (8-core), Fedora 23 (4-core)
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Setup
loopbackSetup 1:
Setup 2:
Setup 3:
Setup 3:
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Considerations
➡ Multiple benchmarking systems:
➡ flood (50/250/5/2, 50/100/5/2, 50/5/5/2)
➡ httperf (num-conns=100->20000, numcalls=3,10,100)
➡ weighttp
➡ Full URL requests (www.example.com/index.html)
➡ Static local requests
➡ Static reverse proxy requests
➡ All Apache httpd MPMs
➡ No significant “tuning” efforts (mostly out of the box configs)
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
nginx vs Event (typical)
Apache - Event MPM
0
500
1000
1500
2000
nginx
0
500
1,000
1,500
2,000
Open Write Read Close
Increasing concurrency Increasing concurrency
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Apache - Prefork MPM
0
500
1000
1500
2000
nginx vs Prefork (typical)
nginx
0
500
1,000
1,500
2,000
Open Write Read Close
Increasing concurrency Increasing concurrency
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Total req/resp time
Comparison - total transaction (close)
0
500
1000
1500
2000
Prefork Worker Event nginx
Increasing concurrency
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Resp to Req. Bursts - httperf
100 ---> 20000
0.00
1.75
3.50
5.25
7.00
min avg max dev min avg max dev min avg max dev min avg max dev min avg max dev min avg max dev
prefork worker event nginx
Increasing concurrency
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Independent benchmarks
Source: Ryosuke Matsumoto : http://blog.matsumoto-r.jp/?p=1812
#!/bin/sh
RESULT='./result.txt'
 
for port in 80 8080 8888
do
#for count in 1000 2000 3000 4000 5000 6000 7000 8000
9000 10000
#for count in 11000 12000 13000 14000 15000 16000 17000
18000 19000 20000
for count in 21000 22000 23000 24000 25000 26000 27000
28000 29000 30000
do
echo -n "$port $count " >> $RESULT
httperf --rate $count --num-conns 25000 --server
ipaddr --port $port 
--uri=/test.html | grep "Request rate:" >>
$RESULT.$port
sleep 60
done
done
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Take-away
➡ Today, the web-server isn’t the slow link in the chain.
➡ Benchmarks get stale… fast!
➡ Real world trumps test environs
➡ Choose the right tool for the right job
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
What’s next?
➡ HTTP/2 support for proxy*
➡ TCP Proxy*
➡ Dynamic health-checks*
➡ Better async support
➡ More MPMs
➡ motorz:
➡ Streamlined event driven MPM
➡ Prelim benchmarks: 10% faster, 70% the size
➡ You tell us!
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Thanks
Twitter: @jimjag
Emails:

jim@jaguNET.com

jim@apache.org

jim.jagielski@capitalone.com
http://www.slideshare.net/jimjag/

Más contenido relacionado

La actualidad más candente

Web frameworks don't matter
Web frameworks don't matterWeb frameworks don't matter
Web frameworks don't matter
Tomas Doran
 
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Tatsuhiko Miyagawa
 
Tricks and Tips With NIO Using the Grizzly Framework
Tricks and Tips With NIO Using the Grizzly FrameworkTricks and Tips With NIO Using the Grizzly Framework
Tricks and Tips With NIO Using the Grizzly Framework
elliando dias
 

La actualidad más candente (20)

Nuts and Bolts of WebSocket Devoxx 2014
Nuts and Bolts of WebSocket Devoxx 2014Nuts and Bolts of WebSocket Devoxx 2014
Nuts and Bolts of WebSocket Devoxx 2014
 
JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...
JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...
JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...
 
HTML5 Real-Time and Connectivity
HTML5 Real-Time and ConnectivityHTML5 Real-Time and Connectivity
HTML5 Real-Time and Connectivity
 
Adventures with Podman and Varlink
Adventures with Podman and VarlinkAdventures with Podman and Varlink
Adventures with Podman and Varlink
 
HTML5 WebSocket for the Real-Time Web and the Internet of Things
HTML5 WebSocket for the Real-Time Weband the Internet of ThingsHTML5 WebSocket for the Real-Time Weband the Internet of Things
HTML5 WebSocket for the Real-Time Web and the Internet of Things
 
Plack at OSCON 2010
Plack at OSCON 2010Plack at OSCON 2010
Plack at OSCON 2010
 
The History of The Apache Software Foundation
The History of The Apache Software FoundationThe History of The Apache Software Foundation
The History of The Apache Software Foundation
 
Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]
 
Converting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - CascadiaConverting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - Cascadia
 
The HTML5 WebSocket API
The HTML5 WebSocket APIThe HTML5 WebSocket API
The HTML5 WebSocket API
 
Web frameworks don't matter
Web frameworks don't matterWeb frameworks don't matter
Web frameworks don't matter
 
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
 
Introduction to WebSockets
Introduction to WebSocketsIntroduction to WebSockets
Introduction to WebSockets
 
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Servicesewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
 
qewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tierqewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tier
 
QEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooQEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It Too
 
Scaling Django
Scaling DjangoScaling Django
Scaling Django
 
Tricks and Tips With NIO Using the Grizzly Framework
Tricks and Tips With NIO Using the Grizzly FrameworkTricks and Tips With NIO Using the Grizzly Framework
Tricks and Tips With NIO Using the Grizzly Framework
 
A web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentationA web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentation
 
HTML5 WebSocket: The New Network Stack for the Web
HTML5 WebSocket: The New Network Stack for the WebHTML5 WebSocket: The New Network Stack for the Web
HTML5 WebSocket: The New Network Stack for the Web
 

Similar a Apache HTTPD 2.4 - GWO2016

Plack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and serversPlack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and servers
Tatsuhiko Miyagawa
 
Git Workshop : Git On The Server
Git Workshop : Git On The ServerGit Workshop : Git On The Server
Git Workshop : Git On The Server
Wildan Maulana
 

Similar a Apache HTTPD 2.4 - GWO2016 (20)

ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4
 
ApacheCon 2014 - What's New in Apache httpd 2.4
ApacheCon 2014 - What's New in Apache httpd 2.4ApacheCon 2014 - What's New in Apache httpd 2.4
ApacheCon 2014 - What's New in Apache httpd 2.4
 
ApacheCon 2017: What's new in httpd 2.4
ApacheCon 2017: What's new in httpd 2.4ApacheCon 2017: What's new in httpd 2.4
ApacheCon 2017: What's new in httpd 2.4
 
Apache httpd 2.4 overview
Apache httpd 2.4 overviewApache httpd 2.4 overview
Apache httpd 2.4 overview
 
Apache httpd 2.4: The Cloud Killer App
Apache httpd 2.4: The Cloud Killer AppApache httpd 2.4: The Cloud Killer App
Apache httpd 2.4: The Cloud Killer App
 
Apache httpd-2.4 : Watch out cloud!
Apache httpd-2.4 : Watch out cloud!Apache httpd-2.4 : Watch out cloud!
Apache httpd-2.4 : Watch out cloud!
 
Apache httpd 2.4 Reverse Proxy
Apache httpd 2.4 Reverse ProxyApache httpd 2.4 Reverse Proxy
Apache httpd 2.4 Reverse Proxy
 
Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018
 
Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018
 
Profiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / WebgrindProfiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / Webgrind
 
WordPress At Scale. WordCamp Dhaka 2019
WordPress At Scale. WordCamp Dhaka 2019WordPress At Scale. WordCamp Dhaka 2019
WordPress At Scale. WordCamp Dhaka 2019
 
Tame Your Build And Deployment Process With Hudson, PHPUnit, and SSH
Tame Your Build And Deployment Process With Hudson, PHPUnit, and SSHTame Your Build And Deployment Process With Hudson, PHPUnit, and SSH
Tame Your Build And Deployment Process With Hudson, PHPUnit, and SSH
 
Ganeti Web Manager: Cluster Management Made Simple
Ganeti Web Manager: Cluster Management Made SimpleGaneti Web Manager: Cluster Management Made Simple
Ganeti Web Manager: Cluster Management Made Simple
 
Plack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and serversPlack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and servers
 
Introduction to python scrapping
Introduction to python scrappingIntroduction to python scrapping
Introduction to python scrapping
 
Use Xdebug to profile PHP
Use Xdebug to profile PHPUse Xdebug to profile PHP
Use Xdebug to profile PHP
 
Open up your platform with Open Source and GitHub
Open up your platform with Open Source and GitHubOpen up your platform with Open Source and GitHub
Open up your platform with Open Source and GitHub
 
Git Workshop : Git On The Server
Git Workshop : Git On The ServerGit Workshop : Git On The Server
Git Workshop : Git On The Server
 
Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!
 
Intro. to Git and Github
Intro. to Git and GithubIntro. to Git and Github
Intro. to Git and Github
 

Más de Jim Jagielski

Más de Jim Jagielski (20)

OSPOS: AllThingsOpen 2023
OSPOS: AllThingsOpen 2023OSPOS: AllThingsOpen 2023
OSPOS: AllThingsOpen 2023
 
Open Source Licenses and IP Overview
Open Source Licenses and IP OverviewOpen Source Licenses and IP Overview
Open Source Licenses and IP Overview
 
The Apache Way
The Apache WayThe Apache Way
The Apache Way
 
Starting an Open Source Program Office
Starting an Open Source Program OfficeStarting an Open Source Program Office
Starting an Open Source Program Office
 
InnerSource 101 for FinTech and FinServ
InnerSource 101 for FinTech and FinServInnerSource 101 for FinTech and FinServ
InnerSource 101 for FinTech and FinServ
 
All Things Open 2017: Open Source Licensing
All Things Open 2017: Open Source LicensingAll Things Open 2017: Open Source Licensing
All Things Open 2017: Open Source Licensing
 
All Things Open 2017: The Apache Software Foundation 101
All Things Open 2017: The Apache Software Foundation 101All Things Open 2017: The Apache Software Foundation 101
All Things Open 2017: The Apache Software Foundation 101
 
All Things Open 2017: Foundations of Inner Source
All Things Open 2017: Foundations of Inner SourceAll Things Open 2017: Foundations of Inner Source
All Things Open 2017: Foundations of Inner Source
 
ApacheCon 2017: InnerSource and The Apache Way
ApacheCon 2017: InnerSource and The Apache WayApacheCon 2017: InnerSource and The Apache Way
ApacheCon 2017: InnerSource and The Apache Way
 
Open Source Licensing 101
Open Source Licensing 101Open Source Licensing 101
Open Source Licensing 101
 
InnerSource 101 and The Apache Way
InnerSource 101 and The Apache WayInnerSource 101 and The Apache Way
InnerSource 101 and The Apache Way
 
Open source101 licenses
Open source101 licensesOpen source101 licenses
Open source101 licenses
 
Keynote from the Open Source 101 Conference
Keynote from the Open Source 101 ConferenceKeynote from the Open Source 101 Conference
Keynote from the Open Source 101 Conference
 
InnerSource: Enterprise Lessons from Open Source
InnerSource: Enterprise Lessons from Open SourceInnerSource: Enterprise Lessons from Open Source
InnerSource: Enterprise Lessons from Open Source
 
ApacheCon EU 2016 State of the Feather
ApacheCon EU 2016 State of the FeatherApacheCon EU 2016 State of the Feather
ApacheCon EU 2016 State of the Feather
 
Open Source Licensing and Governance
Open Source Licensing and GovernanceOpen Source Licensing and Governance
Open Source Licensing and Governance
 
Inner Source: Enterprise Lessons from the Open Source Community.
Inner Source: Enterprise Lessons from the Open Source Community.Inner Source: Enterprise Lessons from the Open Source Community.
Inner Source: Enterprise Lessons from the Open Source Community.
 
The Apache Way: Why we do what we do
The Apache Way: Why we do what we doThe Apache Way: Why we do what we do
The Apache Way: Why we do what we do
 
Why Community Matters
Why Community MattersWhy Community Matters
Why Community Matters
 
Inner Source 101 - GWO2016
Inner Source 101 - GWO2016Inner Source 101 - GWO2016
Inner Source 101 - GWO2016
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Último (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

Apache HTTPD 2.4 - GWO2016

  • 1. Jim Jagielski @jimjag Apache httpd v2.4: What’s New, Pussycat? This should be pretty good!
  • 2. This work is licensed under a Creative Commons Attribution 3.0 Unported License. About Me ➡ Apache Software Foundation ➡ Co-founder, Director, Member and Developer ➡ Director ➡ Outercurve, MARSEC-XL, OSSI, OSI (ex)… ➡ Developer ➡ Mega FOSS projects ➡ O’Reilly Open Source Award: 2013 ➡ European Commission: Luminary Award ➡ Sr. Director: Tech Fellows: Capital One
  • 3. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Hold on a tic ➡ How do you define “new”??
  • 4. This work is licensed under a Creative Commons Attribution 3.0 Unported License. httpd is sooo old school (aka fud) ➡ Apache doesn’t scale (its SLOW) ➡ http://www.youtube.com/watch?v=bzkRVzciAZg
 
 ➡ Apache is too generalized
 
 
 ➡ Apache is too complex (config file) ➡ really? ➡ Apache is too old
 (yeah, just like Linux) vs It’s Squagels!
  • 5. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Apache httpd 2.4 - design drivers ➡ New features and improve old ones ➡ Support for async I/O w/o dropping support for older systems ➡ Larger selection of usable MPMs: added Event, Motorz, etc... ➡ Leverage higher-performant versions of APR ➡ Increase performance ➡ Reduce memory utilization ➡ The Cloud Currently at version 2.4.18 (2.4.1 went GA Feb 21, 2012)
  • 6. This work is licensed under a Creative Commons Attribution 3.0 Unported License. What’s New: Apache httpd 2.4 ➡ Configuration / Runtime Improvements ➡ New Modules / Capabilities ➡ Cloud / Proxy Enhancements ➡ Performance Increases ➡ HTTP/2
  • 7. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Configuration - Runtime ➡ Finer control of timeouts, esp. during requests ➡ mod_reqtimeout ➡ KeepAliveTimout down to the millisecond ➡ Finer control over logging ➡ per module/per directory ➡ new logging levels (TRACE[1-8]) LogLevel info ssl:warn <Directory "/usr/local/apache/htdocs/foo"> LogLevel debug </Directory>
  • 8. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Configuration - Runtime ➡ Other stuff: ➡ No more NameVirtualHost ➡ General purpose expression parser (BNF compatible) ➡ AllowOverrideList
 
 
 ➡ Loadable MPM modules ➡ Recall that different MPMs have different config directives! AllowOverride None AllowOverrideList Redirect RedirectMatch Header ./configure —enable-mpms-shared=all LoadModule mpm_event_module modules/mod_mpm_event.so
  • 9. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Configuration - Runtime ➡ Require ➡ Removes order/deny insanity! AuthType Basic AuthName "Restricted Resource" AuthBasicProvider file AuthUserFile /web/users AuthGroupFile /web/groups Require group admin <Directory /www/docs> <RequireAll> Require group alpha beta Require not group reject </RequireAll> </Directory> <Directory /www/docs2> Require all granted </Directory>
  • 10. This work is licensed under a Creative Commons Attribution 3.0 Unported License. New Modules ➡ mod_macro <Macro VHost $name $domain> <VirtualHost *:80> ServerName $domain ServerAlias www.$domain DocumentRoot /var/www/vhosts/$name ErrorLog /var/log/httpd/$name.error_log CustomLog /var/log/httpd/$name.access_log combined </VirtualHost> </Macro> Use VHost example example.com Use VHost myhost hostname.org Use VHost apache apache.org UndefMacro VHost From my ApacheCon 2000 Preso
  • 11. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Configuration - Runtime ➡ <If> supports per-request conditions # Compare the host name to example.com and # redirect to www.example.com if it matches <If "%{HTTP_HOST} == 'example.com'"> Redirect permanent / http://www.example.com/ <ElseIf "%{HTTP_HOST} == ‘foobarfoo.com'"> Redirect permanent / http://www2.example.com/ </If>
  • 12. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Configuration - Runtime ➡ Simple config-file variables: <Define> <IfDefine TEST> Define servername test.example.com </IfDefine> <IfDefine !TEST> Define servername www.example.com Define SSL </IfDefine> DocumentRoot /var/www/${servername}/htdocs
  • 13. This work is licensed under a Creative Commons Attribution 3.0 Unported License. New Modules ➡ mod_lua <Files *.lua> SetHandler lua-script </Files> … example.lua require "string" function handle(r) r.content_type = "text/plain" if r.method == 'GET' then r:puts("Hello Lua World!n") for k, v in pairs( r:parseargs() ) do r:puts( string.format("%s: %sn", k, v) ) end elseif r.method == 'POST' then r:puts("Hello Lua World!n") for k, v in pairs( r:parsebody() ) do r:puts( string.format("%s: %sn", k, v) ) end elseif r.method == 'PUT' then r:puts("Unsupported HTTP method " .. r.method) r.status = 405 return apache2.ok else return 501 end return apache2.OK end
  • 14. This work is licensed under a Creative Commons Attribution 3.0 Unported License. New Modules ➡ mod_buffer ➡ buffer the i/o stacks w/i httpd ➡ mod_sed ➡ True sed functionality, alternate to mod_substitute
 
 
 
 
 ➡ mod_remoteip ➡ allow access to the real client IP address <Directory "/var/www/docs/status"> AddOutputFilter Sed html OutputSed "s/complete/DONE/g" OutputSed “s/in-progress/TODO/g" </Directory> RemoteIPHeader X-Client-IP
  • 15. This work is licensed under a Creative Commons Attribution 3.0 Unported License. New Modules ➡ mod_session ➡ easily maintain application server state ➡ mod_auth_form ➡ Form-based auth can now be handled internally <Location /dologin.html> SetHandler form-login-handler AuthFormLoginRequiredLocation http://example.com/login.html AuthFormLoginSuccessLocation http://example.com/success.html AuthFormProvider file AuthUserFile conf/passwd AuthType form AuthName realm Session On SessionCookieName session path=/ SessionCryptoPassphrase secret </Location>
  • 16. This work is licensed under a Creative Commons Attribution 3.0 Unported License. New Modules ➡ mod_log_debug ➡ Add debug logging at any hook
 
 
 
 ➡ mod_ratelimit ➡ (basic) bandwidth limiting for clients <Location /foo> LogMessage “subreq to foo” hook=type_checker expr=%{IS_SUBREQ} </Location> <Location /downloads> SetOutputFilter RATE_LIMIT SetEnv rate-limit 400 </Location>
  • 17. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Even more! ➡ mod_cache ➡ Can serve stale data if required ➡ X-Cache-Header now supports HIT/MISS/ REVALIDATE ➡ Can cache HEAD ➡ htcacheclean improvements ➡ mod_socache / mod_slotmem ➡ Data object/blog storage mechanisms
  • 18. This work is licensed under a Creative Commons Attribution 3.0 Unported License. New Modules ➡ mod_proxy submodules: ➡ mod_proxy_fcgi ➡ mod_proxy_scgi ➡ mod_proxy_wstunnel ➡ mod_proxy_html ➡ mod_proxy_express ProxyExpressEnable on
 ProxyExpressDBMFile emap … ##
 ##express-map.txt: httxt2dbm -i express-map.txt -o emap
 ##
 
 www1.example.com http://192.168.002.2:8080
 www2.example.com http://192.168.002.12:8088
 www3.example.com http://192.168.002.10 ... www6341.example.com http://192.168.211.26
  • 19. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Cloud and Performance ➡ The Cloud is a game changer for web servers ➡ Horizontal scalability is no longer as painful ➡ Concurrency is no longer the sole consideration ➡ ... or maybe even the primary one ➡ What’s important now? Transaction Time! (because it CAN be) ➡ Low latency ➡ Fast req/resp turnover ➡ Does density still matter? Of course! ➡ micro-services ➡ Are there environs where super-mega concurrency is the bugaboo? You betcha! (but the cloud makes these more and more rare, and you’re likely using a bad architecture anyway)
  • 20. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Cloud and Dynamics ➡ The Cloud is a game changer for web servers ➡ The cloud is a dynamic place ➡ automated reconfiguration ➡ horizontal, not vertical scaling ➡ self-aware environments OK, maybe not THAT self-aware
  • 21. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Why Dynamic Proxy Matters ➡ Apache httpd still the most frequently used front-end ➡ Proxy capabilities must be cloud friendly ➡ Front-end must be dynamic friendly
  • 22. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Apache httpd 2.4 proxy ➡ Reverse Proxy Improvements ➡ Supports FastCGI, SCGI, Websockets in balancer ➡ Additional load balancing mechanisms ➡ Runtime changing of clusters w/o restarts ➡ Support for dynamic configuration ➡ mod_proxy_express ➡ mod_fcgid and fcgistarter ➡ Brand New: Support for Unix Domain Sockets
  • 23. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Putting it all together <Proxy balancer://foo> BalancerMember http://php1:8080/ loadfactor=1 BalancerMember http://php2:8080/ loadfactor=4 BalancerMember http://phpbkup:8080/ loadfactor=1 status=+h BalancerMember http://phpexp:8080/ lbset=1 ProxySet lbmethod=bytraffic </Proxy> <Proxy balancer://javaapps> BalancerMember ajp://tc1:8089/ loadfactor=1 BalancerMember ajp://tc2:8089/ loadfactor=4 ProxySet lbmethod=byrequests </Proxy> ProxyPass /apps/ balancer://foo/ ProxyPassReverse /apps/ balancer://foo/ ProxyPass /serv/ balancer://javaapps/ ProxyPass /images/ http://images:8080/ ProxyPass /foo unix:/home/www.socket|http://localhost/bar/
  • 24. This work is licensed under a Creative Commons Attribution 3.0 Unported License. balancer-manager ➡ Embedded proxy admin web interface ➡ Allows for real-time ➡ Monitoring of stats for each worker ➡ Adjustment of worker params ➡ Allows for real-time ➡ Addition of new workers/nodes ➡ Change of LB methods ➡ Can be persistent! ➡ More RESTful ➡ Can be CLI-driven
  • 25. This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 26. This work is licensed under a Creative Commons Attribution 3.0 Unported License. server-status aware
  • 27. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Performance ➡ From Bryan Call’s 2014 ApacheCon preso
 (http://www.slideshare.net/bryan_call/choosing-a-proxy-server-apachecon-2014) •  Squid&used&the&most& CPU&again& •  NGiNX&had&latency& issues& •  ATS&most&throughput& 0& 500& 1000& 1500& 2000& 2500& ATS& NGiNX& Squid& Varnish& hBpd& RPS$/$CPU$Usage$ 0& 5000& 10000& 15000& 20000& 25000& 30000& ATS& NGiNX& Squid& Varnish& hBpd& Requests$Per$Second$ 0& 5& 10& 15& 20& 25& 30& 35& 40& ATS& NGiNX& Squid& Varnish& hBpd& Latency$ Median& 95th&
  • 28. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Performance ➡ From Nic Rosenthal Battle of the stacks
 (http://www.slideshare.net/AllThingsOpen/battle-of-the-stacks) HHVM + NGINX! ! vs! ! HHVM + Apache 2.4! ! http://ldr.io/1ogvD7X http://ldr.io/1ogD7b3 Response time: 76ms Response time: 60ms HHVM + NGINX HHVM + Apache 2.4 Image by Articularnos.com https://www.flickr.com/photos/articularnos/ Champion of the ! Battle Of The Stacks ATO Edition HHVM + Apache 2.4
  • 29. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Raw Performance ➡ Event MPM : no longer experimental ➡ non-blocking ➡ async ➡ Faster, more efficient APR ➡ Smaller memory footprint ➡ More efficient data structures (worker and event)
  • 30. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Apache httpd vs nginx ➡ Why nginx? Everyone asks about it... ➡ Benchmark: local and reverse proxy transaction times ➡ Apache httpd 2.4.18-dev, nginx 1.8.1 ➡ CentOS6, Dual Xeon 3.33GHz ➡ 4GB memory ➡ localhost loopback and external (no firewall) ➡ Double checked results: OSX 10.11.2 (8-core), Fedora 23 (4-core)
  • 31. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Setup loopbackSetup 1: Setup 2: Setup 3: Setup 3:
  • 32. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Considerations ➡ Multiple benchmarking systems: ➡ flood (50/250/5/2, 50/100/5/2, 50/5/5/2) ➡ httperf (num-conns=100->20000, numcalls=3,10,100) ➡ weighttp ➡ Full URL requests (www.example.com/index.html) ➡ Static local requests ➡ Static reverse proxy requests ➡ All Apache httpd MPMs ➡ No significant “tuning” efforts (mostly out of the box configs)
  • 33. This work is licensed under a Creative Commons Attribution 3.0 Unported License. nginx vs Event (typical) Apache - Event MPM 0 500 1000 1500 2000 nginx 0 500 1,000 1,500 2,000 Open Write Read Close Increasing concurrency Increasing concurrency
  • 34. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Apache - Prefork MPM 0 500 1000 1500 2000 nginx vs Prefork (typical) nginx 0 500 1,000 1,500 2,000 Open Write Read Close Increasing concurrency Increasing concurrency
  • 35. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Total req/resp time Comparison - total transaction (close) 0 500 1000 1500 2000 Prefork Worker Event nginx Increasing concurrency
  • 36. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Resp to Req. Bursts - httperf 100 ---> 20000 0.00 1.75 3.50 5.25 7.00 min avg max dev min avg max dev min avg max dev min avg max dev min avg max dev min avg max dev prefork worker event nginx Increasing concurrency
  • 37. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Independent benchmarks Source: Ryosuke Matsumoto : http://blog.matsumoto-r.jp/?p=1812 #!/bin/sh RESULT='./result.txt'   for port in 80 8080 8888 do #for count in 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 #for count in 11000 12000 13000 14000 15000 16000 17000 18000 19000 20000 for count in 21000 22000 23000 24000 25000 26000 27000 28000 29000 30000 do echo -n "$port $count " >> $RESULT httperf --rate $count --num-conns 25000 --server ipaddr --port $port --uri=/test.html | grep "Request rate:" >> $RESULT.$port sleep 60 done done
  • 38. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Take-away ➡ Today, the web-server isn’t the slow link in the chain. ➡ Benchmarks get stale… fast! ➡ Real world trumps test environs ➡ Choose the right tool for the right job
  • 39. This work is licensed under a Creative Commons Attribution 3.0 Unported License. What’s next? ➡ HTTP/2 support for proxy* ➡ TCP Proxy* ➡ Dynamic health-checks* ➡ Better async support ➡ More MPMs ➡ motorz: ➡ Streamlined event driven MPM ➡ Prelim benchmarks: 10% faster, 70% the size ➡ You tell us!
  • 40. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Thanks Twitter: @jimjag Emails:
 jim@jaguNET.com
 jim@apache.org
 jim.jagielski@capitalone.com http://www.slideshare.net/jimjag/