2. Tuesday, February 26, 2008 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”
3. Tuesday, February 26, 2008 3
Is PHP Enterprise ready?
• CIO Magazine:
“PHPworkswellforprototypingbecauseitiseasytogetasiteupandrunning.UsePHPtodesign
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)
4. Tuesday, February 26, 2008 4
Is PHP Enterprise ready?
Small
Lightweight
Cheap
Easy to learn
Big
Enterprise friendly
enterpriCe
CS required
5. Tuesday, February 26, 2008 5
A word from my girlfriend
It's not the
SIZE
of the tool...
It's how you USE it.
6. Tuesday, February 26, 2008 6
PHP is changing...
• 1998
Personal stuff
• 2003
Simple websites
Content management
Blogs
• 2008
Big websites
Banks
Insurance Companies
...
7. Tuesday, February 26, 2008 7
PHP is changing...
• Traditional metaphor
PHP is like Lego bricks
Bricks allowing you to build
anything
8. Tuesday, February 26, 2008 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
9. Tuesday, February 26, 2008 9
About Bricks
• Extreme simplicity
• Easy to learn
• Versatile
• Cheap
... so building a skyscraper must be peanuts, right?
11. Tuesday, February 26, 2008 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.”
12. Tuesday, February 26, 2008 12
Step 1 – The Team
• Be a software engineer
• Train your skills
• Study OO principles
• Consider Zend Certification
13. Tuesday, February 26, 2008 13
Step 2 - Requirements
• What does the customer need?
• What do visitors want?
21. Tuesday, February 26, 2008 21
Step 5 - Foundation
• Start stacking bricks?
How many bricks does it take..
What about stability?
• Start with a foundation
22. Tuesday, February 26, 2008 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
23. Tuesday, February 26, 2008 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.”
24. Tuesday, February 26, 2008 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.
25. Tuesday, February 26, 2008 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
26. Tuesday, February 26, 2008 26
Step 7 - Testing
• Is your software tested after it has gone live?
27. Tuesday, February 26, 2008 27
Step 7 - Testing
• Various types of testing
Developer testing
Functional testing
Environment testing
Performance testing
Usability testing
32. Tuesday, February 26, 2008 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/
33. Tuesday, February 26, 2008 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
34. Tuesday, February 26, 2008 34
Step 8 - Optimization
Users are reporting:
"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."
36. Tuesday, February 26, 2008 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
37. Tuesday, February 26, 2008 37
Step 8 - Optimization
Users complain:
“Every time I need coffee I have to go
to the top floor to get some.”
38. Tuesday, February 26, 2008 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 http://danga.com/memcached/
39. Tuesday, February 26, 2008 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'
40. Tuesday, February 26, 2008 40
Step 9 - Deployment
• System Architecture
PHP
Apache
Linux
MySQL
From a simple LAMP stack on a single machine...
41. Tuesday, February 26, 2008 41
Step 9 - Deployment
• System Architecture
... to a High Availability, Horizontally Scalable architecture
42. Tuesday, February 26, 2008 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?)
43. Tuesday, February 26, 2008 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.”
44. Tuesday, February 26, 2008 44
Step 10 - Operations
• Solution
A 'root cause
analysis' tool
45. Tuesday, February 26, 2008 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.