SlideShare a Scribd company logo
Jim Jagielski
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
➡ Jim Jagielski
➡ Hacker and developer
➡ Wearer o’ many hats at the ASF

➡ Director and President: Outercurve

➡ Council member: MARSEC-XL
!
➡ Consulting Engineer with Red Hat
!
➡ @jimjag
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, Simple, etc...
➡ Leverage higher-performant versions of APR
➡ Increase performance
➡ Reduce memory utilization
➡ The Cloud
Currently at version 2.4.9 (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
➡ Performance Increases
➡ Configuration / Runtime Improvements
➡ New Modules / Capabilities
➡ Cloud / Proxy Enhancements
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Performance
➡ Event MPM : no longer experimental
➡ 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.
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.
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 - httperf100 ---> 10000
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 benchmark
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.
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
➡ <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
➡ 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.
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.
Configuration - Runtime
➡ Other stuff:
➡ General purpose expression parser (BNF compatible)
➡ No more NameVirtualHost
➡ Loadable MPM modules
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.
Need More Info?
➡ Attend the next session!
➡ Rich Bowen @ 11:55am
➡ Configurable Configuration in httpd 2.4
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
New Modules
➡ mod_lua (semi-experimental, but we use it!)
<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.
Need More Info?
➡ Attend the latter session!
➡ Daniel Gruno @ 5:00pm
➡ (Re)Introducing mod_lua
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_wtunnel
➡ 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.
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
➡ mod_session
➡ easily maintain application server state
➡ …
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!
➡ 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.
HeartBeat / HeartMonitor
➡ New LB (load balance) method
➡ Uses multicast between gateway and reverse proxies
➡ Provides heartbeat (are you there?) capability
➡ Also provides basic load info
➡ This info stored in shm, and used for balancing
➡ Multicast can be an issue
➡ Use mod_header with %l, %i, %b (loadavg, idle, busy)
➡ but no LBmethod currently uses this :(
➡ We need a universal “load” measure
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.
Need More Info?
➡ Attend the upcoming sessions!
➡ Daniel Ruggeri today @ 3:00pm
➡ mod_proxy Cookbook
➡ Jeff Trawick tomorrow @ 10:30am
➡ Using FastCGI with Apache httpd 2.4
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Thanks
Twitter: @jimjag
Emails:


 
 jim@jaguNET.com


 
 jjagielski@outercurve.org


 
 jim@apache.org


 
 jimjag@redhat.com
http://www.slideshare.net/jimjag/

More Related Content

PDF
Converting Your Dev Environment to a Docker Stack - php[world]
PDF
Apache HTTPD 2.4 - GWO2016
PDF
Apache httpd 2.4 Reverse Proxy: The Hidden Gem
PDF
Converting Your Dev Environment to a Docker Stack - Cascadia
PDF
Reverse proxy magic
PDF
Apache httpd Reverse Proxy and Tomcat
PDF
Scalable talk notes
KEY
Plack at YAPC::NA 2010
Converting Your Dev Environment to a Docker Stack - php[world]
Apache HTTPD 2.4 - GWO2016
Apache httpd 2.4 Reverse Proxy: The Hidden Gem
Converting Your Dev Environment to a Docker Stack - Cascadia
Reverse proxy magic
Apache httpd Reverse Proxy and Tomcat
Scalable talk notes
Plack at YAPC::NA 2010

What's hot (20)

KEY
PyCon US 2012 - Web Server Bottlenecks and Performance Tuning
KEY
Plack at OSCON 2010
PDF
Building a desktop app with HTTP::Engine, SQLite and jQuery
PDF
Designing net-aws-glacier
PPTX
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
PPT
Python Deployment with Fabric
PDF
Docker Demo @ IuK Seminar
KEY
Intro to PSGI and Plack
KEY
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
KEY
Plack - LPW 2009
PDF
"Swoole: double troubles in c", Alexandr Vronskiy
PDF
Hands on Docker - Launch your own LEMP or LAMP stack
PDF
Australian OpenStack User Group August 2012: Chef for OpenStack
PDF
Not your daddy's web server
PDF
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
PPTX
Real World Lessons on the Pain Points of Node.js Applications
KEY
Deploying Plack Web Applications: OSCON 2011
PDF
Plack basics for Perl websites - YAPC::EU 2011
PPTX
0-60 with Goliath: Building High Performance Ruby Web-Services
PDF
Zero Downtime Deployment with Ansible
PyCon US 2012 - Web Server Bottlenecks and Performance Tuning
Plack at OSCON 2010
Building a desktop app with HTTP::Engine, SQLite and jQuery
Designing net-aws-glacier
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
Python Deployment with Fabric
Docker Demo @ IuK Seminar
Intro to PSGI and Plack
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
Plack - LPW 2009
"Swoole: double troubles in c", Alexandr Vronskiy
Hands on Docker - Launch your own LEMP or LAMP stack
Australian OpenStack User Group August 2012: Chef for OpenStack
Not your daddy's web server
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Real World Lessons on the Pain Points of Node.js Applications
Deploying Plack Web Applications: OSCON 2011
Plack basics for Perl websites - YAPC::EU 2011
0-60 with Goliath: Building High Performance Ruby Web-Services
Zero Downtime Deployment with Ansible
Ad

Viewers also liked (20)

KEY
Apache httpd-2.4 : Watch out cloud!
PDF
Running Successful Open Source Projects
ODP
Apache httpd 2.4: The Cloud Killer App
PDF
Open Source Management
PDF
Three Is a Magic Number
PDF
Understanding Open Source Licenses
PDF
Governance and Communities
PDF
ApacheConNA 2015: What's new in Apache httpd 2.4
KEY
Creating community - The Apache Way
KEY
What is "Open Source"
KEY
Apache State of the Feather 2010
PPT
Three Shall Be The Number
PDF
Open Source - Not just for IT anymore
PDF
Acus08 State Of The Feather
PDF
Acus08 ASF Sponsorship
KEY
Apache State Of the Feather 2011
PDF
Acus08 Advanced Load Balancing Apache2.2
PDF
Drupal Camp Balto 2015
KEY
Code, Community, and Open Source
PDF
Open source101 licenses
Apache httpd-2.4 : Watch out cloud!
Running Successful Open Source Projects
Apache httpd 2.4: The Cloud Killer App
Open Source Management
Three Is a Magic Number
Understanding Open Source Licenses
Governance and Communities
ApacheConNA 2015: What's new in Apache httpd 2.4
Creating community - The Apache Way
What is "Open Source"
Apache State of the Feather 2010
Three Shall Be The Number
Open Source - Not just for IT anymore
Acus08 State Of The Feather
Acus08 ASF Sponsorship
Apache State Of the Feather 2011
Acus08 Advanced Load Balancing Apache2.2
Drupal Camp Balto 2015
Code, Community, and Open Source
Open source101 licenses
Ad

Similar to ApacheCon 2014 - What's New in Apache httpd 2.4 (20)

PDF
What's New and Newer in Apache httpd-24
PDF
ApacheCon 2017: What's new in httpd 2.4
PDF
Apache httpd v2.4
PDF
Apache httpd 2.4 overview
PPT
Presentation (PPT)
PPT
Ch 22: Web Hosting and Internet Servers
PDF
Apache HTTPD 2.4 Reverse Proxy: The Hidden Gem
PDF
ApacheConNA 2015: Apache httpd 2.4 Reverse Proxy
KEY
Apache Cookbook - TekX Chicago 2010
KEY
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
PDF
PHP projects beyond the LAMP stack
PPTX
Apache Performance Tuning: Scaling Up
PDF
Scale Apache with Nginx
PPT
Scalable Apache for Beginners
ODP
LSA2 - 03 Http apache nginx
PDF
PowerPoint Presentation
PDF
Secure PHP environment
PPTX
Apache web server
PPT
5-WebServers.ppt
PDF
Apache and PHP: Why httpd.conf is your new BFF!
What's New and Newer in Apache httpd-24
ApacheCon 2017: What's new in httpd 2.4
Apache httpd v2.4
Apache httpd 2.4 overview
Presentation (PPT)
Ch 22: Web Hosting and Internet Servers
Apache HTTPD 2.4 Reverse Proxy: The Hidden Gem
ApacheConNA 2015: Apache httpd 2.4 Reverse Proxy
Apache Cookbook - TekX Chicago 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
PHP projects beyond the LAMP stack
Apache Performance Tuning: Scaling Up
Scale Apache with Nginx
Scalable Apache for Beginners
LSA2 - 03 Http apache nginx
PowerPoint Presentation
Secure PHP environment
Apache web server
5-WebServers.ppt
Apache and PHP: Why httpd.conf is your new BFF!

More from Jim Jagielski (20)

PDF
OSPOS: AllThingsOpen 2023
PDF
Open Source Licenses and IP Overview
PDF
The History of The Apache Software Foundation
PDF
The Apache Way
PDF
Starting an Open Source Program Office
PDF
InnerSource 101 for FinTech and FinServ
PDF
All Things Open 2017: Open Source Licensing
PDF
All Things Open 2017: The Apache Software Foundation 101
PDF
All Things Open 2017: Foundations of Inner Source
PDF
ApacheCon 2017: InnerSource and The Apache Way
PDF
Open Source Licensing 101
PDF
InnerSource 101 and The Apache Way
PDF
Keynote from the Open Source 101 Conference
PDF
InnerSource: Enterprise Lessons from Open Source
PDF
ApacheCon EU 2016 State of the Feather
PDF
Open Source Licensing and Governance
PDF
Inner Source: Enterprise Lessons from the Open Source Community.
PDF
The Apache Way: Why we do what we do
PDF
Why Community Matters
PDF
Inner Source 101 - GWO2016
OSPOS: AllThingsOpen 2023
Open Source Licenses and IP Overview
The History of The Apache Software Foundation
The Apache Way
Starting an Open Source Program Office
InnerSource 101 for FinTech and FinServ
All Things Open 2017: Open Source Licensing
All Things Open 2017: The Apache Software Foundation 101
All Things Open 2017: Foundations of Inner Source
ApacheCon 2017: InnerSource and The Apache Way
Open Source Licensing 101
InnerSource 101 and The Apache Way
Keynote from the Open Source 101 Conference
InnerSource: Enterprise Lessons from Open Source
ApacheCon EU 2016 State of the Feather
Open Source Licensing and Governance
Inner Source: Enterprise Lessons from the Open Source Community.
The Apache Way: Why we do what we do
Why Community Matters
Inner Source 101 - GWO2016

Recently uploaded (20)

PPTX
QR Codes Qr codecodecodecodecocodedecodecode
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PDF
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
PDF
SASE Traffic Flow - ZTNA Connector-1.pdf
PDF
Paper PDF World Game (s) Great Redesign.pdf
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PDF
Sims 4 Historia para lo sims 4 para jugar
PDF
Tenda Login Guide: Access Your Router in 5 Easy Steps
PDF
Unit-1 introduction to cyber security discuss about how to secure a system
PPTX
SAP Ariba Sourcing PPT for learning material
PPTX
artificial intelligence overview of it and more
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PDF
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PPTX
introduction about ICD -10 & ICD-11 ppt.pptx
PDF
Testing WebRTC applications at scale.pdf
PPTX
Introuction about WHO-FIC in ICD-10.pptx
PPTX
innovation process that make everything different.pptx
PPTX
Digital Literacy And Online Safety on internet
PDF
Triggering QUIC, presented by Geoff Huston at IETF 123
PPTX
Module 1 - Cyber Law and Ethics 101.pptx
QR Codes Qr codecodecodecodecocodedecodecode
Slides PDF The World Game (s) Eco Economic Epochs.pdf
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
SASE Traffic Flow - ZTNA Connector-1.pdf
Paper PDF World Game (s) Great Redesign.pdf
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
Sims 4 Historia para lo sims 4 para jugar
Tenda Login Guide: Access Your Router in 5 Easy Steps
Unit-1 introduction to cyber security discuss about how to secure a system
SAP Ariba Sourcing PPT for learning material
artificial intelligence overview of it and more
Design_with_Watersergyerge45hrbgre4top (1).ppt
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
introduction about ICD -10 & ICD-11 ppt.pptx
Testing WebRTC applications at scale.pdf
Introuction about WHO-FIC in ICD-10.pptx
innovation process that make everything different.pptx
Digital Literacy And Online Safety on internet
Triggering QUIC, presented by Geoff Huston at IETF 123
Module 1 - Cyber Law and Ethics 101.pptx

ApacheCon 2014 - What's New in Apache httpd 2.4

  • 1. Jim Jagielski 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 ➡ Jim Jagielski ➡ Hacker and developer ➡ Wearer o’ many hats at the ASF
 ➡ Director and President: Outercurve
 ➡ Council member: MARSEC-XL ! ➡ Consulting Engineer with Red Hat ! ➡ @jimjag
  • 3. 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!
  • 4. 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, Simple, etc... ➡ Leverage higher-performant versions of APR ➡ Increase performance ➡ Reduce memory utilization ➡ The Cloud Currently at version 2.4.9 (2.4.1 went GA Feb 21, 2012)
  • 5. This work is licensed under a Creative Commons Attribution 3.0 Unported License. What’s New: Apache httpd 2.4 ➡ Performance Increases ➡ Configuration / Runtime Improvements ➡ New Modules / Capabilities ➡ Cloud / Proxy Enhancements
  • 6. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Performance ➡ Event MPM : no longer experimental ➡ Faster, more efficient APR ➡ Smaller memory footprint ➡ More efficient data structures (worker and event)
  • 7. 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
  • 8. 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
  • 9. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Resp to Req. Bursts - httperf100 ---> 10000 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
  • 10. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Independent benchmark 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!
  • 11. 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>
  • 12. 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>
  • 13. 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>
  • 14. 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
  • 15. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Configuration - Runtime ➡ Other stuff: ➡ General purpose expression parser (BNF compatible) ➡ No more NameVirtualHost ➡ Loadable MPM modules
  • 16. 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
  • 17. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Need More Info? ➡ Attend the next session! ➡ Rich Bowen @ 11:55am ➡ Configurable Configuration in httpd 2.4
  • 18. This work is licensed under a Creative Commons Attribution 3.0 Unported License. New Modules ➡ mod_lua (semi-experimental, but we use it!) <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
  • 19. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Need More Info? ➡ Attend the latter session! ➡ Daniel Gruno @ 5:00pm ➡ (Re)Introducing mod_lua
  • 20. 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_wtunnel ➡ 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
  • 21. 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 ➡ mod_session ➡ easily maintain application server state ➡ …
  • 22. 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! ➡ 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)
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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/
  • 27. This work is licensed under a Creative Commons Attribution 3.0 Unported License. HeartBeat / HeartMonitor ➡ New LB (load balance) method ➡ Uses multicast between gateway and reverse proxies ➡ Provides heartbeat (are you there?) capability ➡ Also provides basic load info ➡ This info stored in shm, and used for balancing ➡ Multicast can be an issue ➡ Use mod_header with %l, %i, %b (loadavg, idle, busy) ➡ but no LBmethod currently uses this :( ➡ We need a universal “load” measure
  • 28. 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
  • 29. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Need More Info? ➡ Attend the upcoming sessions! ➡ Daniel Ruggeri today @ 3:00pm ➡ mod_proxy Cookbook ➡ Jeff Trawick tomorrow @ 10:30am ➡ Using FastCGI with Apache httpd 2.4
  • 30. This work is licensed under a Creative Commons Attribution 3.0 Unported License. Thanks Twitter: @jimjag Emails:
 jim@jaguNET.com
 jjagielski@outercurve.org
 jim@apache.org
 jimjag@redhat.com http://www.slideshare.net/jimjag/