SlideShare a Scribd company logo
Apache httpd v2.4:
The Cloud Killer App
    (but we still wuv you NOC people as well)




            Jim Jagielski
About me
➡   Jim Jagielski
    ➡   Hacker and developer
        ➡   Wearer o’ many hats at the ASF

        ➡   Director: OSI

        ➡   Director and Secretary: Outercurve

        ➡   Council member: MARSEC-XL


    ➡   Consulting Engineer with Red Hat


    ➡   @jimjag
                    This work is licensed under a Creative Commons Attribution 3.0 Unported License.
What we will cover
➡   QUICK Overview of Apache httpd 2.4
    ➡   General improvements
    ➡   Reverse proxy improvements
➡   How the Cloud is a game-changer for web (ie: what is a killer-
    app for the cloud?)
➡   Performance related enhancements
➡   Cloud specific enhancements




                  This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Apache httpd 2.4
➡   Currently at version 2.4.4 (2.4.1 went GA Feb 21, 2012)
➡   Significant Improvements
    ➡   high-performance
    ➡   cloud suitability




                     This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Apache httpd 2.4 - design drivers
➡   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




                  This work is licensed under a Creative Commons Attribution 3.0 Unported License.
What’s New: Apache httpd 2.4
➡   Bandwidth control now standard
    ➡   mod_ratelimit
➡   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])
➡   <If> supports per-request conditions
➡   slot-based shared memory capability

                   This work is licensed under a Creative Commons Attribution 3.0 Unported License.
What’s New: Apache httpd 2.4
➡   Controllable buffering of I/O
    ➡   mod_buffer
➡   Support for Lua (still experimental as of 2.4.4)
➡   Loadable MPMs
➡   Event MPM
➡   Async I/O
➡   Config file variables
➡   Cache improvements
➡   Proxy improvements (‘natch)


                      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
                                                                                        vs




➡   Apache is too complex (config file)
                                                                            It’s Squagels!!
                                                                             It’s Squagels
    ➡    really?
➡   Apache is too old
    (yeah, just like Linux)


                          This work is licensed under a Creative Commons Attribution 3.0 Unported License.
What makes a cloud killer-app?
  ➡   Stability
  ➡   Flexibility
  ➡   Performance
  ➡   Dynamic configuration
  ➡   Resource sensitive




                    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.
Apache httpd vs nginx
➡   Why nginx? Everyone asks about it...
➡   Benchmark: local and reverse proxy transaction times
    ➡   Apache httpd 2.4.4-dev, nginx 1.2.6
    ➡   CentOS5, Dual Xeon 2.28GHz
    ➡   4GB memory
    ➡   localhost loopback and external (no firewall)
    ➡   Double checked results: OSX, Fedora 16




                    This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Setup

                                                  loopback
        Setup 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)
➡   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)




  Increasing concurrency                                                                        Increasing concurrency




                           This work is licensed under a Creative Commons Attribution 3.0 Unported License.
nginx vs Worker (typical)




   Increasing concurrency                                                                        Increasing concurrency




                            This work is licensed under a Creative Commons Attribution 3.0 Unported License.
nginx vs Prefork (typical)




   Increasing concurrency                                                                        Increasing concurrency




                            This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Focus on open()




                                 Increasing concurrency




       This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Focus on write()




                                 Increasing concurrency




       This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Focus on read()




                                 Increasing concurrency




       This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Total req/resp time




                                 Increasing concurrency




       This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Resp to Req. Bursts - httperf




                                  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




      This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Benchmark Conclusions
➡   Events, polling and fork/spawn creates overhead: good for
    “more bang for buck” system, bad for performance for that
    request
➡   For concurrency, Event & Worker on par with nginx*
➡   For transaction speed, prefork shines
➡   Let’s work on leaner MPM (more streamlined)
➡   *Main Caveats:
    ➡   Apache is never resource starved
    ➡   If memory is a scarce resource, nginx still better (for now ;) )
    ➡   More work can (and should) be done


                     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.
Proxy Design Drivers
➡   Becoming a robust but generic proxy implementation
➡   Support various protocols
    ➡   HTTP, HTTPS, CONNECT, FTP
    ➡   AJP, FastCGI, SCGI, WSGI
    ➡   Load balancing
➡   Clustering, failover
➡   Performance




                   This work is licensed under a Creative Commons Attribution 3.0 Unported License.
What’s New: Apache httpd 2.4 proxy
➡   Reverse Proxy Improvements
    ➡   Supports FastCGI, SCGI in balancer
    ➡   Additional load balancing mechanisms
    ➡   Runtime changing of clusters w/o restarts
    ➡   Support for dynamic configuration
    ➡   mod_proxy_express
    ➡   mod_proxy_html
    ➡   mod_fcgid




                    This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Load Balancer
➡   mod_proxy_balancer.so
➡   mod_proxy can do native load balancing
    ➡   weight by actual requests
    ➡   weight by traffic
    ➡   weight by busyness
    ➡   lbfactors




                     This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Load Balancer
➡   Backend connection pooling
➡   Available for named workers:
    ➡   eg: ProxyPass /foo http://bar.example.com
➡   Reusable connection to origin
    ➡   For threaded MPMs, can adjust size of pool (min, max, smax)
    ➡   For prefork: singleton
➡   Shared data held in shared memory




                    This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Load Balancer
➡   Sticky session support
    ➡   aka “session affinity”
➡   Cookie based
    ➡   stickysession=PHPSESSID
    ➡   stickysession=JSESSIONID
➡   Natively easy with Tomcat
➡   May require more setup for “simple” HTTP proxying




                    This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Load Balancer
➡   Cluster set with failover
➡   Group backend servers as numbered sets
    ➡   balancer will try lower-valued sets first
    ➡   If no workers are available, will try next set
➡   Hot standby




                     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/



               This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Mass Reverse Proxy
➡   We front-end a LOT of reverse proxies
    ➡    What a httpd.conf disaster!
    ➡    Slow and bloated
    ➡    mod_rewrite doesn’t help
        <VirtualHost www1.example.com>
           ProxyPass / http://192.168.002.2:8080
           ProxyPassReverse / http://192.168.002.2:8080
        </VirtualHost>

        <VirtualHost www2.example.com>
           ProxyPass / http://192.168.002.12:8088
           ProxyPassReverse / http://192.168.002.12:8088
        </VirtualHost>

        <VirtualHost www3.example.com>
           ProxyPass / http://192.168.002.10
           ProxyPassReverse / http://192.168.002.10
        </VirtualHost>
         ...
        <VirtualHost www6341.example.com>
           ProxyPass / http://192.168.211.26
           ProxyPassReverse / http://192.168.211.26
        </VirtualHost>



                         This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Mass Reverse Proxy
➡   Use the new mod_proxy_express module
    ➡   ProxyPass mapping obtained via db file
    ➡   Fast and efficient
    ➡   Still dynamic, with no config changes required

        ProxyExpress map file
        ##
        ##express-map.db:
        ##

        www1.example.com                        http://192.168.002.2:8080
        www2.example.com                        http://192.168.002.12:8080
        Www3.example.com                        http://102.168.002.15:8080
         ...
        www6341.example.com                     http://192.168.211.26


                    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
        ➡   lbset
        ➡   load factor
        ➡   route
        ➡   enabled / disabled
        ➡   ...




                     This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Embedded Admin
➡   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.
Easy setup
<Location /balancer-manager>
  SetHandler balancer-manager
  Require 192.168.2.22
</Location>




              This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Admin




                                                                       Click here
                                                                       Click here




        This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Admin




                                                                           Click here
                                                                           Click here




        This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Admin




        This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Admin




                                                                     Changing the
                                                                     Changing the
                                                                     LBmethod
                                                                     LBmethod


                                                                         Adding new
                                                                         Adding new
                                                                         worker
                                                                         worker




        This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Admin




                                                                            Wow!
                                                                            Wow!




                                                                                    Wow!
                                                                                    Wow!




        This work is licensed under a Creative Commons Attribution 3.0 Unported License.
What’s on the horizon?
➡   Extend mod_proxy_express
➡   Improving AJP
➡   Adding additional protocols
➡   More dynamic configuration
    ➡   Adding balancers!
➡   Even more optimized Event MPM
    ➡   (and re-look @ serf)




                   This work is licensed under a Creative Commons Attribution 3.0 Unported License.
In conclusion...
➡   Performance of Apache httpd 2.4 still in the big leagues (and on
    par with the “big boys” and the fanboi webserver du jure)
➡   For cloud environs, the performance and dynamic control of
    Apache httpd 2.4 in reverse proxies is just what the Dr. ordered
    (and flexibility remains a big strength)
➡   Architecture of Apache httpd 2.4 allows a lot of room for growth
    and additional functionality (both for the cloud and not)
➡   There’s still a category of “edge cases” that require nginx,
    lighttpd, G-WAN, Apache Traffic Server, etc... If that’s you, don’t
    try to use Apache httpd (but if you do, provide patches!)
➡   lies, damned lies and benchmarks (sorry, statistics).

                   This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Thanks!
➡   Contact Info:
                                                   ➡       Jim Jagielski
              ➡     jim@jaguNET.com | jim@apache.org | jimjag@redhat.com
                                 ➡       @jimjag                      www.jimjag.com
                                     ➡       www.slideshare.net/jimjag




                            This work is licensed under a Creative Commons Attribution 3.0 Unported License.

More Related Content

Apache httpd 2.4: The Cloud Killer App

  • 1. Apache httpd v2.4: The Cloud Killer App (but we still wuv you NOC people as well) Jim Jagielski
  • 2. About me ➡ Jim Jagielski ➡ Hacker and developer ➡ Wearer o’ many hats at the ASF ➡ Director: OSI ➡ Director and Secretary: Outercurve ➡ Council member: MARSEC-XL ➡ Consulting Engineer with Red Hat ➡ @jimjag This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 3. What we will cover ➡ QUICK Overview of Apache httpd 2.4 ➡ General improvements ➡ Reverse proxy improvements ➡ How the Cloud is a game-changer for web (ie: what is a killer- app for the cloud?) ➡ Performance related enhancements ➡ Cloud specific enhancements This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 4. Apache httpd 2.4 ➡ Currently at version 2.4.4 (2.4.1 went GA Feb 21, 2012) ➡ Significant Improvements ➡ high-performance ➡ cloud suitability This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 5. Apache httpd 2.4 - design drivers ➡ 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 This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 6. What’s New: Apache httpd 2.4 ➡ Bandwidth control now standard ➡ mod_ratelimit ➡ 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]) ➡ <If> supports per-request conditions ➡ slot-based shared memory capability This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 7. What’s New: Apache httpd 2.4 ➡ Controllable buffering of I/O ➡ mod_buffer ➡ Support for Lua (still experimental as of 2.4.4) ➡ Loadable MPMs ➡ Event MPM ➡ Async I/O ➡ Config file variables ➡ Cache improvements ➡ Proxy improvements (‘natch) This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 8. httpd is sooo old school (aka fud) ➡ Apache doesn’t scale (its SLOW) ➡ http://www.youtube.com/watch?v=bzkRVzciAZg ➡ Apache is too generalized vs ➡ Apache is too complex (config file) It’s Squagels!! It’s Squagels ➡ really? ➡ Apache is too old (yeah, just like Linux) This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 9. What makes a cloud killer-app? ➡ Stability ➡ Flexibility ➡ Performance ➡ Dynamic configuration ➡ Resource sensitive This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 10. 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.
  • 11. Apache httpd vs nginx ➡ Why nginx? Everyone asks about it... ➡ Benchmark: local and reverse proxy transaction times ➡ Apache httpd 2.4.4-dev, nginx 1.2.6 ➡ CentOS5, Dual Xeon 2.28GHz ➡ 4GB memory ➡ localhost loopback and external (no firewall) ➡ Double checked results: OSX, Fedora 16 This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 12. Setup loopback Setup 1: Setup 2: Setup 3: Setup 3: This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 13. 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) ➡ 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.
  • 14. nginx vs Event (typical) Increasing concurrency Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 15. nginx vs Worker (typical) Increasing concurrency Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 16. nginx vs Prefork (typical) Increasing concurrency Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 17. Focus on open() Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 18. Focus on write() Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 19. Focus on read() Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 20. Total req/resp time Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 21. Resp to Req. Bursts - httperf Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 22. Independent benchmark Source: Ryosuke Matsumoto : http://blog.matsumoto-r.jp/?p=1812 This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 23. Benchmark Conclusions ➡ Events, polling and fork/spawn creates overhead: good for “more bang for buck” system, bad for performance for that request ➡ For concurrency, Event & Worker on par with nginx* ➡ For transaction speed, prefork shines ➡ Let’s work on leaner MPM (more streamlined) ➡ *Main Caveats: ➡ Apache is never resource starved ➡ If memory is a scarce resource, nginx still better (for now ;) ) ➡ More work can (and should) be done This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 24. 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.
  • 25. 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.
  • 26. Proxy Design Drivers ➡ Becoming a robust but generic proxy implementation ➡ Support various protocols ➡ HTTP, HTTPS, CONNECT, FTP ➡ AJP, FastCGI, SCGI, WSGI ➡ Load balancing ➡ Clustering, failover ➡ Performance This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 27. What’s New: Apache httpd 2.4 proxy ➡ Reverse Proxy Improvements ➡ Supports FastCGI, SCGI in balancer ➡ Additional load balancing mechanisms ➡ Runtime changing of clusters w/o restarts ➡ Support for dynamic configuration ➡ mod_proxy_express ➡ mod_proxy_html ➡ mod_fcgid This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 28. Load Balancer ➡ mod_proxy_balancer.so ➡ mod_proxy can do native load balancing ➡ weight by actual requests ➡ weight by traffic ➡ weight by busyness ➡ lbfactors This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 29. Load Balancer ➡ Backend connection pooling ➡ Available for named workers: ➡ eg: ProxyPass /foo http://bar.example.com ➡ Reusable connection to origin ➡ For threaded MPMs, can adjust size of pool (min, max, smax) ➡ For prefork: singleton ➡ Shared data held in shared memory This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 30. Load Balancer ➡ Sticky session support ➡ aka “session affinity” ➡ Cookie based ➡ stickysession=PHPSESSID ➡ stickysession=JSESSIONID ➡ Natively easy with Tomcat ➡ May require more setup for “simple” HTTP proxying This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 31. Load Balancer ➡ Cluster set with failover ➡ Group backend servers as numbered sets ➡ balancer will try lower-valued sets first ➡ If no workers are available, will try next set ➡ Hot standby This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 32. 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/ This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 33. Mass Reverse Proxy ➡ We front-end a LOT of reverse proxies ➡ What a httpd.conf disaster! ➡ Slow and bloated ➡ mod_rewrite doesn’t help <VirtualHost www1.example.com> ProxyPass / http://192.168.002.2:8080 ProxyPassReverse / http://192.168.002.2:8080 </VirtualHost> <VirtualHost www2.example.com> ProxyPass / http://192.168.002.12:8088 ProxyPassReverse / http://192.168.002.12:8088 </VirtualHost> <VirtualHost www3.example.com> ProxyPass / http://192.168.002.10 ProxyPassReverse / http://192.168.002.10 </VirtualHost> ... <VirtualHost www6341.example.com> ProxyPass / http://192.168.211.26 ProxyPassReverse / http://192.168.211.26 </VirtualHost> This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 34. Mass Reverse Proxy ➡ Use the new mod_proxy_express module ➡ ProxyPass mapping obtained via db file ➡ Fast and efficient ➡ Still dynamic, with no config changes required ProxyExpress map file ## ##express-map.db: ## www1.example.com http://192.168.002.2:8080 www2.example.com http://192.168.002.12:8080 Www3.example.com http://102.168.002.15:8080 ... www6341.example.com http://192.168.211.26 This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 35. 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.
  • 36. balancer-manager ➡ Embedded proxy admin web interface ➡ Allows for real-time ➡ Monitoring of stats for each worker ➡ Adjustment of worker params ➡ lbset ➡ load factor ➡ route ➡ enabled / disabled ➡ ... This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 37. Embedded Admin ➡ 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.
  • 38. Easy setup <Location /balancer-manager> SetHandler balancer-manager Require 192.168.2.22 </Location> This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 39. Admin Click here Click here This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 40. Admin Click here Click here This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 41. Admin This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 42. Admin Changing the Changing the LBmethod LBmethod Adding new Adding new worker worker This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 43. Admin Wow! Wow! Wow! Wow! This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 44. What’s on the horizon? ➡ Extend mod_proxy_express ➡ Improving AJP ➡ Adding additional protocols ➡ More dynamic configuration ➡ Adding balancers! ➡ Even more optimized Event MPM ➡ (and re-look @ serf) This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 45. In conclusion... ➡ Performance of Apache httpd 2.4 still in the big leagues (and on par with the “big boys” and the fanboi webserver du jure) ➡ For cloud environs, the performance and dynamic control of Apache httpd 2.4 in reverse proxies is just what the Dr. ordered (and flexibility remains a big strength) ➡ Architecture of Apache httpd 2.4 allows a lot of room for growth and additional functionality (both for the cloud and not) ➡ There’s still a category of “edge cases” that require nginx, lighttpd, G-WAN, Apache Traffic Server, etc... If that’s you, don’t try to use Apache httpd (but if you do, provide patches!) ➡ lies, damned lies and benchmarks (sorry, statistics). This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  • 46. Thanks! ➡ Contact Info: ➡ Jim Jagielski ➡ jim@jaguNET.com | jim@apache.org | jimjag@redhat.com ➡ @jimjag www.jimjag.com ➡ www.slideshare.net/jimjag This work is licensed under a Creative Commons Attribution 3.0 Unported License.