This document discusses enterprise PHP development in 10 steps: 1) assemble a skilled team, 2) define requirements, 3) design architecture, 4) select tools, 5) use a framework for foundation, 6) implement design patterns, 7) thoroughly test all aspects of development, 8) optimize performance through acceleration and caching, 9) plan deployment across environments, and 10) monitor operations through logging and issue tracking. The document uses building a skyscraper as an analogy for developing large enterprise applications in PHP.
Value Proposition canvas- Customer needs and pains
Enterprise PHP Development (Dutch PHP Conference 2008)
1. Enterprise PHP development
Ivo Jansch <ivo@ibuildings.com>
Dutch PHP Conference, June 14, 2008
Ibuildings - http://www.ibuildings.com
2. What's an enterprise?
• Wikipedia:
“Any of several ships by that name in the Star Trek
fictional universe”
“A business, company, or comparable organization”
Tuesday, February 26, 2008 2
3. Is PHP Enterprise ready?
• CIO Magazine:
“ H w r s w l f r pooy i g b c ue i i e s t g t a se u a d r n i g Ue P P t d s n
P P ok e o r t t p ea s t s ay o e i p n u n . s H o ei
n t n g
the site [...] but when it comes time for development, tell the team you want
t
he result to look and act like this PHP site...but in Java”
(Or: “great, this is exactly what I need! now do it again, at twice the cost!”)
http://www.cio.com/article/176250 (skip the article, read the comments)
Tuesday, February 26, 2008 3
4. Is PHP Enterprise ready?
Big Small
Enterprise friendly Lightweight
enterpriCe Cheap
CS required Easy to learn
Tuesday, February 26, 2008 4
5. A word from my girlfriend
It's not the
SIZE
of the tool...
It's how you USE it.
Tuesday, February 26, 2008 5
6. PHP is changing...
• 1998
Personal stuff
• 2003
Simple websites
Content management
Blogs
• 2008
Big websites
Banks
Insurance Companies
...
Tuesday, February 26, 2008 6
7. PHP is changing...
• Traditional metaphor
PHP is like Lego bricks
Bricks allowing you to build
anything
Tuesday, February 26, 2008 7
8. PHP is changing...
• PHP is no longer a toy
Let’s use the metaphor of actual bricks
Because we’re building
actual buildings now
Tuesday, February 26, 2008 8
9. About Bricks
• Extreme simplicity
• Easy to learn
• Versatile
• Cheap
... so building a skyscraper must be peanuts, right?
Tuesday, February 26, 2008 9
11. Step 1 – The Team
“Dear Mr. Businessman,
I have read about your plans to build a new
skyscraper and I am applying for a job.
I have a lot of experience with Bricks. I taught
myself how to use them and have been
maintaining our family shed for a few years now.”
Tuesday, February 26, 2008 11
12. Step 1 – The Team
• Be a software engineer
• Train your skills
• Study OO principles
• Consider Zend Certification
Tuesday, February 26, 2008 12
13. Step 2 - Requirements
• What does the customer need?
• What do visitors want?
Tuesday, February 26, 2008 13
21. Step 5 - Foundation
• Start stacking bricks?
How many bricks does it take..
What about stability?
• Start with a foundation
Tuesday, February 26, 2008 21
22. Step 5 - Foundation
• Use a framework
Provides guidelines (frame)
Off the shelf components
• Examples
Zend Framework http://framework.zend.com
CakePHP http://http://www.cakephp.org
ezComponents http://ez.no/ezcomponents
Symfony http://www.symfony-project.org
ATK http://www.achievo.org/atk
Tuesday, February 26, 2008 22
23. Step 5 - Foundation
• The “Not Invented Here” Syndrome
“The existing frameworks are no good.
I can do this better.”
“This framework is no good.
It can do A through Y but I need Z.”
“This framework is too big.
It provides A-Z but we only need A and B.”
“I know there's a good framework.
But I would like to learn.”
Tuesday, February 26, 2008 23
24. Step 6 – Design Patterns
Requirement 1056.4:
We need to be able to look outside, but we
can't make holes in the wall (rain should be
kept outside). When it's sunny, a hole is ok.
Tuesday, February 26, 2008 24
25. Step 6 – Design Patterns
• A ‘window’ is a concept
Best practice way of solving a particular problem
• In IT, we call this a ‘design pattern’
• Popular patterns in PHP:
MVC, Factory, Singleton, Registry, Decorator
• Good read:
php|architect's Guide to
PHP Design Patterns
- Jason E. Sweat
Tuesday, February 26, 2008 25
26. Step 7 - Testing
• Is your software tested after it has gone live?
Tuesday, February 26, 2008 26
27. Step 7 - Testing
• Various types of testing
Developer testing
Functional testing
Environment testing
Performance testing
Usability testing
Tuesday, February 26, 2008 27
28. Step 7 - Testing
• Common scenario
Tuesday, February 26, 2008 28
29. Step 7 - Testing
• User complains...
MWOEHA!
BUG!
Tuesday, February 26, 2008 29
30. Step 7 - Testing
• Developer attacks the problem
fix_bug();
Tuesday, February 26, 2008 30
31. Step 7 - Testing
• Problem solved!
Tuesday, February 26, 2008 31
32. Step 7 - Testing
• Solution: Unit Tests
Automated testing after each change
Prevents regressions
• Testing for PHP applications:
PHPUnit http://www.phpunit.de/
SimpleTest http://www.lastcraft.com/simple_test.php
• Continuous Integration:
CruiseControl with phpUnderControl
Xinc http://code.google.com/p/xinc/
Tuesday, February 26, 2008 32
33. Step 7 - Testing
• Test Driven Development
1. Define functionality
2. Create testcase
3. Run test -> test fails
4. Implement functionality
• Test succeeds? Done
• Test fails? Refactor
Repeat step 4 until finished
Tuesday, February 26, 2008 33
34. Step 8 - Optimization
Users are reporting:
quot;I work on the 197th floor. Every day I
have to walk the stairs for 2 hours, then I
have only 4 hours left to do my job.quot;
Tuesday, February 26, 2008 34
35. Step 8 - Optimization
• Solution: Elevator
Tuesday, February 26, 2008 35
36. Step 8 - Optimization
In PHP, this ‘elevator’ is called an ‘accelerator’
This is how PHP works (pseudo-ish code):
read index.php; // enter the building
compile index.php; // go to floor 197
echo “Hello World”; // get the job done
An accelerator improves the first 2 steps
Accelerators for PHP:
• eAccelerator http://eaccelerator.net/
• APC http://pecl.php.net/package/APC
• Zend Platform http://www.zend.com/products/zend_platform
Tuesday, February 26, 2008 36
37. Step 8 - Optimization
Users complain:
“Every time I need coffee I have to go
to the top floor to get some.”
Tuesday, February 26, 2008 37
38. Step 8 - Optimization
• Solution: Create small coffee corners on every floor so
people
d
o
n’t have to go to the main restaurant every time.
• In PHP we call this caching
Don’t query the database everytime you need data
Use locally stored copy (file or memory)
• PHP Caching solutions:
Zend_Cache http://framework.zend.com
Smarty http://smarty.php.net
Zend Platform http://www.zend.com/products/zend_platform
Memcached
Tuesday, February 26, 2008
http://danga.com/memcached/ 38
39. Step 9 - Deployment
• Lifecycle:
Develop
Test
Deploy to acceptance test environment
Deploy to live
• Use SVN
• Code is just a part, don't forget the database
• Create a 'Deployment & Release Profile'
Tuesday, February 26, 2008 39
40. Step 9 - Deployment
• System Architecture
PHP
MySQL
Apache
Linux
From a simple LAMP stack on a single machine...
Tuesday, February 26, 2008 40
41. Step 9 - Deployment
• System Architecture
... to a High Availability, Horizontally Scalable architecture
Tuesday, February 26, 2008 41
42. Step 10 - Operations
• Monitoring
Logfiles
Monitor infrastructure (tools such as Nagios)
Monitor application (tools such as Zend Platform)
Monitor business (is the money still pouring in?)
Tuesday, February 26, 2008 42
43. Step 10 - Operations
• Debugging
Ideal:
“I had error x when I selected y after I clicked z”
Reality:
“It doesn't work!”
“What exactly doesn't work, and what did you do?”
“It just ******** didn't work, FIX IT.”
Tuesday, February 26, 2008 43
44. Step 10 - Operations
• Solution
A 'root cause
analysis' tool
Tuesday, February 26, 2008 44
45. Step 10 - Operations
• Change management
Ticket system
Stick to your deployment - use the DRP
DON'T TOUCH THE LIVE ENVIRONMENT.
But I absolutely have to...
DON'T!
but...
NO! IF YOU TOUCH IT, YOU WILL LOSE ALL GURU POINTS.
Tuesday, February 26, 2008 45
46. Shameless self-promotion
• php|architect's
Guide to Enterprise PHP Development
• PDF: June 12, Print: June 26
• ISBN: 978-0-9738621-8-8
• Order via http://phparch.com
• http://www.enterprisephp.nl
46