SlideShare a Scribd company logo
Building the perfect PHP app for the enterprise
Episode 4: Optimizing
performance
Zeev Suraski
Twitter: @zeevs
Email: zeev@zend.com
2
Series overview
Keeping up with PHP
Developing apps faster
Resolving problems and high availability
Now: Optimizing performance ←
Zeev Suraski
CTO, Zend
Rogue Wave Software
4
• 3 daughters
• Photography enthusiast
• Crazy about spicy foods
• Programming since the age of 12
• Last thing I did before getting involved with PHP
was C++ CGIs (no!)
About me
5
Enterprise PHP is mission-critical
• Built securely
• Delivers optimal performance + scale
• Always on
• Meets release timelines
• Modernizes legacy business logic
• Clear support path (production + LTS)
6
What is performance?
The effectiveness of a computer
system, as measured by agreed-
upon criteria, such as throughput,
response time and availability.
7
Performance is important
• F1000: Average annual cost of
application downtime per hour
$500K – $1M
• F1000: Average time to restore
an application failure
80% > 1 hour
25% > 12 hours
• F1000: Average annual cost of
application downtime
$125M - $250M
A 1 second delay in page response can result
in a 7% reduction in conversion.
IDC, “DevOps and the Cost of Downtime:
Fortune 1000 Best Practice Metrics Quantified”
Akamai research
8
What influences performance?
Almost Anything!
• Hardware (virtual/real)
• Network bandwidth
• Application complexity
• Memory consumption
• Response time of databases and service providers
• User/client load
• Time (of day, day of week, holidays, etc.)
Measuring & improving
performance
10
Performance isn’t a one-off process
Develop
Measure
Optimize
Monitor
11
Develop
13
Performance during development
• Three Rules of Code Optimization:
1. Don’t.
2. Don’t yet.
3. Profile first.
• Design for performance
• Pay attention to performance as you develop,
but don’t optimize prematurely
14
Additional tools
• IDE – PhpStorm, Zend Studio
• Code Tracing
• xhprof
Measure
16
Measuring performance
17
Measuring performance - It’s hard…
It’s dangerously easy to get results.
It’s remarkably difficult to get accurate results.
Challenges:
• Simulating real-world workloads
• Locking issues
• Hardware changes
• Underlying software changes
• Infrastructure fluctuations (software, hardware, network)
• Uncertainty principle
18
Measuring performance – How?
Common measurements:
• Requests per second (req/s)
• Response time
• Latency
Software:
Siege
19
Measuring performance - Tips
• Automate
• Use repeatable hardware
• Dedicated hardware
• Documented cloud/virtual instances
• Perform a ‘warmup’
• Look for cron jobs
• Simulate realistic scenarios
• Use separate load generating machines
• Must also be repeatable
• Have expectations & validate them
• If results are completely off, research why
• Conduct each individual benchmark at least 3 times
• Perform often
• Automate
Optimize
21
Web erver
PHP
Frameworks
Apps
App server services
Load balancer
End users
Database
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Service
backends
Load balancer
End users
Database
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Service
backends
24
Under The Hood
25
Opcode Caching
Zend
OPcache
26
Opcode caching
OPcache
• Turnkey
Requires absolutely no changes to your code
• Very substantial performance yields
Usually at least 2x better performance
• Free & integrated into PHP
Zend’s OPcache (formerly Optimizer+) donated to the community in 2012
• Very modest requirements
Typically requires only several dozen to a few hundred megabytes of
memory server-wide
• Verdict: Always use
Web server
PHP
Frameworks
Apps
App server services
End users
Database
Service
backends
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Load balancer
28
PHP 7 – The fastest PHP ever
29
PHP 7 – The fastest PHP ever
PHP 5 PHP 7
72
56
72
32
24
16
Hash Table Bucket zVal
PHP 5 PHP 7
20%
5%
Memory Manager CPU Overhead (WP)Memory Consumption of key Data Structures
(bytes)
30
Web server
PHP
Frameworks
Apps
App server services
End Users
Database
Service
Backends
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Load balancer
31
Web server software and setup
Different Web Server software have different
performance characteristics. Some are faster than
others.
Pay attention to:
• Apache vs. Nginx vs. IIS
• mod_php vs. FPM
• Concurrency settings
• KeepAlive settings
32
End Users
Database
Service
Backends
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Load balancer
33
Data caching
Save expensive ops, such as database queries, API calls,
filesystem access, etc. by caching and reusing results.
• Pros:
• Eliminates (or greatly reduces) time of costly calls
• Reduces load on the database, service provider, filesystem
• Time spent fetching from cache typically around zero
• Cons:
• Requires code modifications
• Only works if results don’t change for long periods of time (typically >10
seconds)
• Verdict: Greatly improves performance when used in the right places.
End users
Database
Service
backends
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Load balancer
35
Page caching
Eliminates the entire execution time of the page by caching
its entire content.
• Pros:
• Page execution time is reduced to zero
• Saves memory, resources, database and CPU load
• Cons:
• Only suitable in situations where an entire rendered page can be
repeatedly served more than once for long periods of time.
• Requires configuration
• Verdict: By far the best performance booster, use whenever possible.
36
What is performance?
The effectiveness of a computer
system, as measured by agreed-
upon criteria, such as throughput,
response time and availability.
37
Perceived performance
How quickly software appears
to perform its task.
Load balancer
End users
Database
Service
backends
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
Web server
PHP
Frameworks
Apps
App server services
39
Asynchronous processing
Perform long-running tasks asynchronously.
In other words, instead of waiting for them to
complete, perform them in the background and
notify the user once they’re done (if necessary)
• Pros:
• Radically improve perceived performance for use cases such as credit
card clearance, PDF generation, sending email
• Distribute load among servers
• Cons:
• Requires code changes
• Only suitable for specific use cases
Monitor
41
Monitoring
Monitoring is important:
• Things change when the rubber meets the road
• Enables SLA between ops & business owners
• Finger on the pulse
• Find performance issues that would otherwise go
unnoticed (by you, not your customer)
42
Recap
• Performance is important to your business
• Performance is a cycle, not a one-off investment
• Set expectations – both with yourself and your business owners
• Tools can greatly help
• Especially if they’re baked into your dev cycle
43
Learn more
• Watch this webinar on demand
• Read the recap blog
Thank you!

More Related Content

Optimizing performance

  • 1. Building the perfect PHP app for the enterprise Episode 4: Optimizing performance Zeev Suraski Twitter: @zeevs Email: zeev@zend.com
  • 2. 2 Series overview Keeping up with PHP Developing apps faster Resolving problems and high availability Now: Optimizing performance ←
  • 4. 4 • 3 daughters • Photography enthusiast • Crazy about spicy foods • Programming since the age of 12 • Last thing I did before getting involved with PHP was C++ CGIs (no!) About me
  • 5. 5 Enterprise PHP is mission-critical • Built securely • Delivers optimal performance + scale • Always on • Meets release timelines • Modernizes legacy business logic • Clear support path (production + LTS)
  • 6. 6 What is performance? The effectiveness of a computer system, as measured by agreed- upon criteria, such as throughput, response time and availability.
  • 7. 7 Performance is important • F1000: Average annual cost of application downtime per hour $500K – $1M • F1000: Average time to restore an application failure 80% > 1 hour 25% > 12 hours • F1000: Average annual cost of application downtime $125M - $250M A 1 second delay in page response can result in a 7% reduction in conversion. IDC, “DevOps and the Cost of Downtime: Fortune 1000 Best Practice Metrics Quantified” Akamai research
  • 8. 8 What influences performance? Almost Anything! • Hardware (virtual/real) • Network bandwidth • Application complexity • Memory consumption • Response time of databases and service providers • User/client load • Time (of day, day of week, holidays, etc.)
  • 10. 10 Performance isn’t a one-off process Develop Measure Optimize Monitor
  • 11. 11
  • 13. 13 Performance during development • Three Rules of Code Optimization: 1. Don’t. 2. Don’t yet. 3. Profile first. • Design for performance • Pay attention to performance as you develop, but don’t optimize prematurely
  • 14. 14 Additional tools • IDE – PhpStorm, Zend Studio • Code Tracing • xhprof
  • 17. 17 Measuring performance - It’s hard… It’s dangerously easy to get results. It’s remarkably difficult to get accurate results. Challenges: • Simulating real-world workloads • Locking issues • Hardware changes • Underlying software changes • Infrastructure fluctuations (software, hardware, network) • Uncertainty principle
  • 18. 18 Measuring performance – How? Common measurements: • Requests per second (req/s) • Response time • Latency Software: Siege
  • 19. 19 Measuring performance - Tips • Automate • Use repeatable hardware • Dedicated hardware • Documented cloud/virtual instances • Perform a ‘warmup’ • Look for cron jobs • Simulate realistic scenarios • Use separate load generating machines • Must also be repeatable • Have expectations & validate them • If results are completely off, research why • Conduct each individual benchmark at least 3 times • Perform often • Automate
  • 22. Load balancer End users Database Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Service backends
  • 23. Load balancer End users Database Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Service backends
  • 26. 26 Opcode caching OPcache • Turnkey Requires absolutely no changes to your code • Very substantial performance yields Usually at least 2x better performance • Free & integrated into PHP Zend’s OPcache (formerly Optimizer+) donated to the community in 2012 • Very modest requirements Typically requires only several dozen to a few hundred megabytes of memory server-wide • Verdict: Always use
  • 27. Web server PHP Frameworks Apps App server services End users Database Service backends Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Load balancer
  • 28. 28 PHP 7 – The fastest PHP ever
  • 29. 29 PHP 7 – The fastest PHP ever PHP 5 PHP 7 72 56 72 32 24 16 Hash Table Bucket zVal PHP 5 PHP 7 20% 5% Memory Manager CPU Overhead (WP)Memory Consumption of key Data Structures (bytes)
  • 30. 30 Web server PHP Frameworks Apps App server services End Users Database Service Backends Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Load balancer
  • 31. 31 Web server software and setup Different Web Server software have different performance characteristics. Some are faster than others. Pay attention to: • Apache vs. Nginx vs. IIS • mod_php vs. FPM • Concurrency settings • KeepAlive settings
  • 32. 32 End Users Database Service Backends Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Load balancer
  • 33. 33 Data caching Save expensive ops, such as database queries, API calls, filesystem access, etc. by caching and reusing results. • Pros: • Eliminates (or greatly reduces) time of costly calls • Reduces load on the database, service provider, filesystem • Time spent fetching from cache typically around zero • Cons: • Requires code modifications • Only works if results don’t change for long periods of time (typically >10 seconds) • Verdict: Greatly improves performance when used in the right places.
  • 34. End users Database Service backends Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Load balancer
  • 35. 35 Page caching Eliminates the entire execution time of the page by caching its entire content. • Pros: • Page execution time is reduced to zero • Saves memory, resources, database and CPU load • Cons: • Only suitable in situations where an entire rendered page can be repeatedly served more than once for long periods of time. • Requires configuration • Verdict: By far the best performance booster, use whenever possible.
  • 36. 36 What is performance? The effectiveness of a computer system, as measured by agreed- upon criteria, such as throughput, response time and availability.
  • 37. 37 Perceived performance How quickly software appears to perform its task.
  • 38. Load balancer End users Database Service backends Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services Web server PHP Frameworks Apps App server services
  • 39. 39 Asynchronous processing Perform long-running tasks asynchronously. In other words, instead of waiting for them to complete, perform them in the background and notify the user once they’re done (if necessary) • Pros: • Radically improve perceived performance for use cases such as credit card clearance, PDF generation, sending email • Distribute load among servers • Cons: • Requires code changes • Only suitable for specific use cases
  • 41. 41 Monitoring Monitoring is important: • Things change when the rubber meets the road • Enables SLA between ops & business owners • Finger on the pulse • Find performance issues that would otherwise go unnoticed (by you, not your customer)
  • 42. 42 Recap • Performance is important to your business • Performance is a cycle, not a one-off investment • Set expectations – both with yourself and your business owners • Tools can greatly help • Especially if they’re baked into your dev cycle
  • 43. 43 Learn more • Watch this webinar on demand • Read the recap blog

Editor's Notes

  1. In other words, the worse your code is, the better