• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
BTV PHP - Building Fast Websites
 

BTV PHP - Building Fast Websites

on

  • 1,786 views

I gave this talk on 11/17/11 at the Burlington Vermont PHP group. The talk is about how to monitor and improve server side performance.

I gave this talk on 11/17/11 at the Burlington Vermont PHP group. The talk is about how to monitor and improve server side performance.

Statistics

Views

Total Views
1,786
Views on SlideShare
1,782
Embed Views
4

Actions

Likes
4
Downloads
18
Comments
0

1 Embed 4

http://a0.twimg.com 4

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    BTV PHP - Building Fast Websites BTV PHP - Building Fast Websites Presentation Transcript

    • November 17, 2011Building Faster Websites: Optimizing the Server Jonathan Klein jklein@wayfair.com @jonathanklein
    • Agenda Who Am I? Why Server Side Performance Matters Measuring Performance Speeding up the Server Improving the Database Load Testing
    • Who is this Guy?• Senior Software Engineer/Performance Guy at Wayfair• Organizer - Boston Web Performance Meetup Group• Organizer - #WPOChat (monthly Twitter chat)• Wayfair Stats: 1. ~1400 requests/sec for static content 2. ~400 requests/sec for dynamic content 3. ~10 million unique visitors per month 4. On a typical Monday we serve 75,000,000 static files 3
    • Wayfair Stack Changes• Windows Server  FreeBSD• IIS  Lighttpd• Classic ASP  PHP• But we are still on MSSQL (more on that later)• http://engineering.wayfair.com 4
    • Why Server Side Performance?
    • Doesn’t 80% happen on the client?• Yes, but not if your server is slow• Users staring at a blank page• No upper limit• HUGE spikes• Plus, bots crawl fast sites more 7
    • Time to first byte Time To First Byte (TTFB) Matters 8
    • How Do We Measure It?
    • Server Side MonitoringLots of Options:• Paid: 1. Coradiant 2. dynaTrace 3. Correlsense • http://www.real-user-monitoring.com/ - Free Version• Free: 1. StatsD/Graphite 2. Access Logs 3. Nagios 4. Ganglia 5. Hosted WebPagetest 6. Selenium/dynaTrace Ajax Edition 10
    • Or Something Simple…<?php$start = microtime(true);…script content…$end = microtime(true);do_stuff(Description, $end - $start);?> 11
    • do_stuff()?• do_stuff() can do one of: 1. Log to a database (not ideal) 2. Write to a text file (eww) 3. Make a StatsD call over UDP (good) - http://codeascraft.etsy.com/2011/02/15/measure- anything-measure-everything/ 4. Choose your own adventure 12
    • Averages can be misleadingBetter to look at percentiles 14
    • What Does a Scalability Problem Look Like?
    • This: 19
    • Or maybe this! 20
    • Much better! 21
    • So How Do We Do It?
    • What can you do?• Start with the Database• Run a database trace 1. Filter: Queries > 50ms 2. Filter: Reads > 1000 3. Start with the worst ones and optimize 23
    • What does “Optimize” mean?• Look at execution plan 1. Remove calls to remote servers 24
    • Database Optimizations• Reduce Joins• Select * from  Select Foo, Bar, Baz from…• Minimize/consolidate subqueries• Add indexes where needed 1. We added one index: Procedure dropped from 3.5 sec & 4500 reads to .06 sec and 130 reads!• Be careful with where clauses (don’t calculate stuff in them) 25
    • ExampleSELECT id, name, salaryFROM employeeWHERE salary < 25000;NOTSELECT id, name, salaryFROM employeeWHERE salary + 10000 < 35000; 26
    • ExampleSELECT id, name, salaryFROM employeeWHERE salary < 25000;NOTSELECT id, name, salaryFROM employeeWHERE salary + 10000 < 35000; 27
    • Not many hard and fast rules…• Try something, look at the plan• Try something else…look at how the plan changes• This is your friend: 28
    • The Fastest DB Query is the One You Don’t Make
    • Memcached• Caching layer between database and webserver• Can hold PHP objects and arrays 30
    • Memcached$m = new Memcached();$m->pconnect(‘1.2.3.4, 11211);$m->set(‘foo’, $bar, 600);$baz = $m->get(‘foo’); 31
    • Install APC• APC – Alternative PHP Cache 1. Opcode Cache 2. User Cache 3. Awesome! 32
    • Opcode Cache 33
    • User Cache<?php$bar = BAR;apc_store(foo, $bar);var_dump(apc_fetch(foo));?>Outputs…string(3) "BAR" 34
    • PHP Code Optimizations
    • PHP Optimizations• Set the max loop value before the loop: $max = count($rows); for ($i = 0; $i < $max; $i++) { echo $i; }• require_once() is slow• Minimize use of define()• Yes, single quotes are slightly faster than double quotes, but… 36
    • PHP Optimizations have limited value• Could go on and on… 1.http://www.wmtips.com/php/tips- optimizing-php-code.htm• Minimal returns• Find the hotspots in your application and fix them 37
    • Example…• Homepage takes 5 seconds to load• Optimize PHP… 1. Reduce PHP execution time by 50%!• But wait! PHP execution was only taking 100ms 1. Saves you 50ms in load time 2. 1% of total page load 38
    • If you really need to make your code faster…• HipHop for PHP• Built by Facebook and Open Sourced• Compiles PHP into C++• Currently supports PHP 5.2• http://developers.facebook.com/blog/post/358/• https://github.com/facebook/hiphop-php 39
    • Webserver Considerations
    • Do it right• Pick the right one 1. Lighttpd/Nginx instead of Apache 2. Designed to solve the C10K problem• Lighttpd Used By: 1. Youtube 2. Wikipedia 3. Meebo 41
    • Benefits of Lighttpd/Nginx• Event driven model: “Unlike traditional servers, Nginx doesnt rely on threads to handle requests. Instead it uses a much more scalable event- driven (asynchronous) architecture. This architecture uses small, but more importantly, predictable amounts of memory under load.” - http://wiki.nginx.org/• FastCGI + spawn-fcgi 1. PHP Process Management 2. Many child processes – scale out application tier. 42
    • If you MUST use Apache• mod_deflate 1. Gzips content for faster transfer times• mod_pagespeed 1. Automatic performance improvements• KeepAlives on 1. Server won’t create a new connection for every resource 43
    • Load Testing
    • JMeter• Open Source• Generate load via a GUI or command line• Can watch req/s peak out• Easy to use (just make sure you set the correct path to Java on your computer). 45
    • JMeter 46
    • JMeter 48
    • JMeter• Watch your User Agent• Be careful hitting sites you don’t own• You might tap out your local box/network before killing the server 49
    • Conclusion• Know and watch your site• More monitoring is better• Understand what is behind the scenes – look at the full stack• Load test BEFORE things go to production – figure out when they will fall over 50
    • Questions? We’re Hiring! www.wayfair.com/careers Get In Touch:www.meetup.com/Web-Performance-Boston/ jklein@wayfair.com @jonathanklein 51