0
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  ...
What we will cover➡   QUICK Overview of Apache httpd 2.4    ➡   General improvements    ➡   Reverse proxy improvements➡   ...
Apache httpd 2.4➡   Currently at version 2.4.4 (2.4.1 went GA Feb 21, 2012)➡   Significant Improvements    ➡   high-perfor...
Apache httpd 2.4 - design drivers➡   Support for async I/O w/o dropping support for older systems➡   Larger selection of u...
What’s New: Apache httpd 2.4➡   Bandwidth control now standard    ➡   mod_ratelimit➡   Finer control of timeouts, esp. dur...
What’s New: Apache httpd 2.4➡   Controllable buffering of I/O    ➡   mod_buffer➡   Support for Lua (still experimental as ...
httpd is sooo old school                                                                                     (aka fud)➡   ...
What makes a cloud killer-app?  ➡   Stability  ➡   Flexibility  ➡   Performance  ➡   Dynamic configuration  ➡   Resource s...
Cloud and Performance➡   The Cloud is a game changer for web servers    ➡   Horizontal scalability is no longer as painful...
Apache httpd vs nginx➡   Why nginx? Everyone asks about it...➡   Benchmark: local and reverse proxy transaction times    ➡...
Setup                                                  loopback        Setup 1:           Setup 2:                        ...
Considerations➡   Multiple benchmarking systems:    ➡   flood (50/250/5/2, 50/100/5/2, 50/5/5/2)    ➡   httperf (num-conns...
nginx vs Event                                                       (typical)  Increasing concurrency                    ...
nginx vs Worker (typical)   Increasing concurrency                                                                        ...
nginx vs Prefork (typical)   Increasing concurrency                                                                       ...
Focus on open()                                 Increasing concurrency       This work is licensed under a Creative Common...
Focus on write()                                 Increasing concurrency       This work is licensed under a Creative Commo...
Focus on read()                                 Increasing concurrency       This work is licensed under a Creative Common...
Total req/resp time                                 Increasing concurrency       This work is licensed under a Creative Co...
Resp to Req. Bursts - httperf                                  Increasing concurrency        This work is licensed under a...
Independent benchmark                                    Source: Ryosuke Matsumoto : http://blog.matsumoto-r.jp/?p=1812   ...
Benchmark Conclusions➡   Events, polling and fork/spawn creates overhead: good for    “more bang for buck” system, bad for...
Cloud and Dynamics➡   The Cloud is a game changer for web servers    ➡   The cloud is a dynamic place    ➡   automated rec...
Why Dynamic Proxy Matters➡   Apache httpd still the most frequently used front-end➡   Proxy capabilities must be cloud fri...
Proxy Design Drivers➡   Becoming a robust but generic proxy implementation➡   Support various protocols    ➡   HTTP, HTTPS...
What’s New: Apache httpd 2.4 proxy➡   Reverse Proxy Improvements    ➡   Supports FastCGI, SCGI in balancer    ➡   Addition...
Load Balancer➡   mod_proxy_balancer.so➡   mod_proxy can do native load balancing    ➡   weight by actual requests    ➡   w...
Load Balancer➡   Backend connection pooling➡   Available for named workers:    ➡   eg: ProxyPass /foo http://bar.example.c...
Load Balancer➡   Sticky session support    ➡   aka “session affinity”➡   Cookie based    ➡   stickysession=PHPSESSID    ➡ ...
Load Balancer➡   Cluster set with failover➡   Group backend servers as numbered sets    ➡   balancer will try lower-valued...
Putting it all together    <Proxy balancer://foo>     BalancerMember http://php1:8080/                                 loa...
Mass Reverse Proxy➡   We front-end a LOT of reverse proxies    ➡    What a httpd.conf disaster!    ➡    Slow and bloated  ...
Mass Reverse Proxy➡   Use the new mod_proxy_express module    ➡   ProxyPass mapping obtained via db file    ➡   Fast and e...
HeartBeat / HeartMonitor➡   New LB (load balance) method    ➡   Uses multicast between gateway and reverse proxies    ➡   ...
balancer-manager➡   Embedded proxy admin web interface➡   Allows for real-time    ➡   Monitoring of stats for each worker ...
Embedded Admin➡   Allows for real-time        ➡   Addition of new workers/nodes        ➡   Change of LB methods        ➡  ...
Easy setup<Location /balancer-manager>  SetHandler balancer-manager  Require 192.168.2.22</Location>              This wor...
Admin                                                                       Click here                                    ...
Admin                                                                           Click here                                ...
Admin        This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Admin                                                                     Changing the                                    ...
Admin                                                                            Wow!                                     ...
What’s on the horizon?➡   Extend mod_proxy_express➡   Improving AJP➡   Adding additional protocols➡   More dynamic configu...
In conclusion...➡   Performance of Apache httpd 2.4 still in the big leagues (and on    par with the “big boys” and the fa...
Thanks!➡   Contact Info:                                                   ➡       Jim Jagielski              ➡     jim@ja...
Upcoming SlideShare
Loading in...5
×

Apache httpd 2.4: The Cloud Killer App

4,669

Published on

ApacheCon NA 2013 Presentation: Why Apache httpd 2.4 is, imo, the killer app for the cloud.

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,669
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
49
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Transcript of "Apache httpd 2.4: The Cloud Killer App"

  1. 1. Apache httpd v2.4:The Cloud Killer App (but we still wuv you NOC people as well) Jim Jagielski
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 14. nginx vs Event (typical) Increasing concurrency Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  15. 15. nginx vs Worker (typical) Increasing concurrency Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  16. 16. nginx vs Prefork (typical) Increasing concurrency Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  17. 17. Focus on open() Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  18. 18. Focus on write() Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  19. 19. Focus on read() Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  20. 20. Total req/resp time Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  21. 21. Resp to Req. Bursts - httperf Increasing concurrency This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  22. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 39. Admin Click here Click here This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  40. 40. Admin Click here Click here This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  41. 41. Admin This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  42. 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. 43. Admin Wow! Wow! Wow! Wow! This work is licensed under a Creative Commons Attribution 3.0 Unported License.
  44. 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. 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. 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.
  1. A particular slide catching your eye?

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

×