Your SlideShare is downloading. ×
PHPNW 2010 - Developing Easily Deployable PHP Applications
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

PHPNW 2010 - Developing Easily Deployable PHP Applications

2,936

Published on

Here’s the scenario: you’ve written a PHP application designed to run on Linux, Apache, and MySQL. Now you have a customer who wants to run it on Windows. Or using Oracle. Or they like Memcache …

Here’s the scenario: you’ve written a PHP application designed to run on Linux, Apache, and MySQL. Now you have a customer who wants to run it on Windows. Or using Oracle. Or they like Memcache instead of APC. How do you do it without sacrificing performance, stability, simplicity, and your own sanity?
In this talk we’ll look at how we approached solving this problem at SugarCRM and what lessons we learned in the process.

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

No Downloads
Views
Total Views
2,936
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
44
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • People fear the cloudPeople can’t use the cloudPeople want to use different cloudsOur customer base reflects this ( 1/3 sugar cloud, 1/3 on site, 1/3 on other clouds )
  • User base is diverse, likes different offerings, and will move between them.Lots of choices ( Web Servers / OSes / Databases / PHP versions ) as well as config possibilitiesHave to cover lots of platforms; can rely on particular hardware or software being available.
  • Relate in picture, mention about balance for needed control and simplicity.Talk about how we made this a big deal in Sugar 6
  • Types of testing we useTesting is hard
  • Performance story about GNs; very particular to make go fastNeed to balance performance and configurability; make the performance choices that make the most difference, and enable ways for those working with your software to make more.
  • Try to avoid subqueries as much as possible.
  • Transcript

    • 1. Developing Easily Deployable PHP Applications
      John Mertic - SugarCRM
      http://joind.in/2059
      @2010 SugarCRM Inc. All rights reserved.
    • 2. Why deployable apps still matter
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      2
    • 3. What I’ll cover
      Writing portable code
      Enabling configuration and customization
      Strategies for testing and QA
      Making your code perform well
      @2010 SugarCRM Inc. All rights reserved.
      7/22/2010
      3
    • 4. Writing portable code
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      4
      Source: http://www.flickr.com/photos/25339258@N05/2389910825/
    • 5. Define your support matrix
      Operating System
      Any Linux, UNIX, OS X
      Windows
      Web Server
      Apache 1.3, 2.0, 2.2
      IIS 6/7 using FastCGI
      Database
      MySQL 5.0, 5.1
      SQL Server 2005, 2008
      Oracle 9i, 10g
      PHP
      5.2.x, 5.3.x
      Support most common configurations options
      mbstring.func_overload
      error_reporting = E_ALL
      Require only the most mainline extensions, plus
      Mbstrings ( i18n support )
      Imap ( mail support )
      Specific database extension ( mysql, mysqli, oci8, mssql, sqlsrv )
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      5
    • 6. Design code that works for these platforms
      DB abstraction layer or ORM
      Make sure PHP features you are using are supported across support matrix
      Assume very little about the underlying system
      Example: Treat file system as case-sensitive, and file writes are only in one area.
      Detect what features the server has for you to use, have API to talk to them
      Example: User cache ( APC, Memcache, Wincache, etc )
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      6
    • 7. Build and deploy!
      We build all 3 editions of SugarCRM from 1 codebase
      We add code tags around sections specific to a certain version.
      To test under each different edition, developers can run the build locally
      We also can tag in or out features on a per edition basis.
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      7
      Source: http://www.flickr.com/photos/eastcapital/4554220770/
    • 8. Enabling configuration and customization
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      8
      Source: http://www.flickr.com/photos/miskypig/400004362/
    • 9. Making it simple yet powerful for end users
      Expose configuration options thru multiple channels
      Remember, not everyone has source access
      Allow users to customize their UI interface easily
      Make what should be simple, simple
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      9
    • 10. Making it simple yet powerful for developers
      Create a safe place to make customizations
      Avoid painful upgrades
      Create an easy to use API
      Well defined and supported.
      Don’t break it!
      Create easy to use hooks for modifying / adding functionality
      Examples from SugarCRM include:
      Metadata driven views
      Logic Hooks
      Allow for internationalization and localization
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      10
    • 11. Strategies for testing and QA
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      11
      Source: http://www.flickr.com/photos/cglock/386033158/
    • 12. Testing different configurations
      Impossible for us to test every single permutation, so we use VM stacks instead
      Windows Vista IIS-7 (FastCGI) PHP 5.2.8 MSSQL-2005 (PHP mssql driver)
      Windows Server 2003 IIS-6 (FastCGI) PHP 5.2.11 MSSQL-2005 (PHP mssql driver)
      CentOS 5 Apache-2.2.11 PHP 5.2.9 MySQL-5.1.33
      Windows Server 2008 IIS-7 (FastCGI) PHP 5.3.1 MSSQL-2008 (Microsoft sqlsrv driver 1.1)
      Windows XP Apache-1.3.41 PHP 5.2.13 MySQL-5.0.83
      Oracle Enterprise Linux 5.1 Apache-2.0.63 PHP 5.3.2 ORCL-10g
      We test both new installations and upgrade scenarios; even customer instances!
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      12
    • 13. Automated Testing Tools
      Hudson (http://hudson-ci.org/) – Extensible CI Server
      Running on every checkin
      PHP lint ( php –l ) – Syntax checking for PHP source files
      PHPUnit (http://www.phpunit.de/) – Unit testing framework
      Runs once a day
      SODA – functional testing framework that leverages Watir
      SodaMachine – GUI tool for building SODA tests
      JMeter (http://jakarta.apache.org/jmeter/) - tool for testing a website under high load
      MeterMaid – XML language to write JMeter tests in
      SugarMMM (MeterMaid Maker) - utility to automate writing MeterMaid tests for SugarCRM
      TidBit – tool to make huge datasets for testing
      All runs are against all flavors and all supported platform stacks
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      13
    • 14. Making your code perform well
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      14
      Source: http://www.flickr.com/photos/tech1987/501427718/
    • 15. What we do to help performance
      Try to do the basic stuff
      Avoid writing slow code
      Caching, and lots of it
      Combine, minify, and version JS / CSS / images
      Keep SQL queries as simple as possible
      Leave the rest to the Sys Admin
      Provide configuration options to turn off heavy features
      Enable the application to take advantage of it’s environment
      Example: Using APC, memcache, Zend_Cache, wincache with little to no configuration
      Provide best practices for various environments
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      15
    • 16. How we gauge performance
      Formal testing
      Use Jmeter (http://jakarta.apache.org/jmeter/) on a load test cluster to test raw response speed.
      Instance analysis
      Monitor web server logs to look for non-cached items
      Track slow queries
      Ad-hoc testing
      Profile PHP execution with XDebug
      Use Firebug to measure CSS / JS / image payload
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      16
    • 17. What are the lessons we have learned?
      Define what you will support and to what extent
      Write your code to be flexible to any environment
      Make customizing, configuring, and extending your application not painful for users or developers
      Test across your support matrix, using automation as much as possible
      Focus more on best practices and general performance, let admins handle it from there.
      10/9/10
      @2010 SugarCRM Inc. All rights reserved.
      17
      Source: http://www.flickr.com/photos/dlanod/126386070/
    • 18. About me and my company
      John Mertic
      http://jmertic.wordpress.com
      Twitter: @jmertic
      jmertic@sugarcrm.com ( Work )
      jmertic@php.net ( PHP )
      Slides available on slidesharehttp://slidesha.re/9LX3Jp
      SugarCRM
      http://www.sugarcrm.com
      We’re hiring!
      Learn more about SugarCRM’s open source tools at http://developers.sugarcrm.com/opensource
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      18
      Buy my book!
    • 19. Questions?
      Please give feedback at http://joind.in/2059
      7/22/2010
      @2010 SugarCRM Inc. All rights reserved.
      19

    ×