Your SlideShare is downloading. ×

POSSCON 2011 - Developing Easily Deployable PHP Applications

1,440

Published on

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

Here's the scenario: you've wrote a PHP application that is designed to run on Linux, Apache, and MySQL Now you have a customer that 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? And what development and testing practices should you use to make such a project a success?

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

  • Be the first to like this

No Downloads
Views
Total Views
1,440
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
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
      @2011 SugarCRM Inc. All rights reserved.
    • 2. Who Am I?
      John Mertic
      Contact Info
      http://jmertic.wordpress.com
      Twitter: @jmertic
      jmertic@sugarcrm.com ( Sugar )
      jmertic@php.net ( PHP )
      I am the Community Manager for SugarCRM
      http://www.sugarcrm.com
      http://developers.sugarcrm.com
      Learn more about working with the SugarCRM platform during tomorrow’s session “SugarCRM: Your Next Business Application”
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      2
      Buy my book!
      http://amzn.to/enioPV
    • 3. Why deployable apps still matter
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      3
      Source: http://www.flickr.com/photos/sarchi/220539933
    • 4. What I’ll cover
      Writing portable code ( or at least trying to )
      Enabling configuration and customization ( for users and developers )
      Strategies for testing and QA
      Making your code perform (reasonably) well
      @2011 SugarCRM Inc. All rights reserved.
      3/24/2011
      4
    • 5. Writing portable code
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      5
      Source: http://www.flickr.com/photos/25339258@N05/2389910825/
    • 6. 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.x
      SQL Server 2005, 2008
      Oracle 10g, 11g
      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 )
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      6
    • 7. Design code that works for these platforms
      Avoid writing code directly talking to the bare metal; Abstract like mad!
      Use a DB abstraction layer or ORM
      Make sure PHP features you are using are supported across support matrix or provide an alternate implementation.
      Detect what else the server has for you to use, have abstraction layer to talk to them.
      Example: User cache
      ( APC, Memcache, Wincache, etc)
      Assume very little about the underlying system
      Example: Treat file system as case-sensitive, and file writes are only in one area.
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      7
    • 8. Example of what we have to work around
      Fetching a record from a database
      Mysql - mysql_fetch_assoc()
      Mysqli - mysqli_fetch_assoc()
      Mssql - mssql_fetch_assoc()
      Oci8 - oci_fetch_array()
      Sqlsrv - sqlsrv_fetch_array()
      Problems we run into
      Each has different input parameters
      What gets returned if no rows available?
      Mysql– bool false
      Mysqli - null
      Mssql– bool false
      Oci8 – bool false
      Sqlsrv– null ( bool false if error )
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      8
    • 9. 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.
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      9
      Source: http://www.flickr.com/photos/eastcapital/4554220770/
    • 10. Enabling configuration and customization
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      10
      Source: http://www.flickr.com/photos/miskypig/400004362/
    • 11. 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
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      11
    • 12. 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 documented.
      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
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      12
    • 13. Strategies for testing and QA
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      13
      Source: http://www.flickr.com/photos/cglock/386033158/
    • 14. Automated Testing Tools
      Jenkins (http://jenkins-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
      Learn more about SugarCRM’sopen source tools at http://developers.sugarcrm.com/opensource
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      14
    • 15. Non-automated testing
      You need to actually have people use your app.
      We do all of the following:
      Code reviews
      Design reviews
      Partner and customer demos
      Community previews
      Earlier the feedback, the better
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      15
    • 16. Making your code perform well
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      16
      Source: http://www.flickr.com/photos/tech1987/501427718/
    • 17. What we do to help performance
      Try to do the basic stuff
      Avoid writing slow code
      Caching where appropriate
      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
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      17
    • 18. 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
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      18
    • 19. What are the lessons we have learned?
      Define what you will support and to what extent
      Write your code to be as flexible as possible
      Make customizing, configuring, and extending your application not painful for users or developers
      Test across your support matrix, using automation when it makes sense
      Focus more on best practices and general performance, let admins handle it from there.
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      19
      Source: http://www.flickr.com/photos/dlanod/126386070/
    • 20. Questions?
      Slides available on SlideShare
      3/24/2011
      @2011 SugarCRM Inc. All rights reserved.
      20

    ×