Apache httpd 2.4: The Cloud Killer App

5,833 views

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
5,833
On SlideShare
0
From Embeds
0
Number of Embeds
77
Actions
Shares
0
Downloads
59
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

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.

×