SlideShare a Scribd company logo
1 of 34
Download to read offline
Tiery Eyed - Approaches to tiered development in PHP
 Kevin Schroeder




                                 Copyright © 2007, Zend Technologies Inc.
Could also be called


“Solving simple problems with complex
  solutions”




                                        |
Introduction

  • About me
      Kevin Schroeder
      Consultant for Zend Technologies
      Have worked with a bunch of languages
      Have worked with a bunch of hardware
      Have worked in a bunch of scenarios


  Enough about me




                                              |
… Almost


  • From Canada
  • Live in Dallas
  • Flew in to San Hose, Eh?




                               |
Introduction



  • What is a tiered architecture?
       Has multiple distinct parts, typically
        • Presentation
        • Business/Application Logic
        • Data
       Often used to provide access to a single layer of logic to
       multiple informational endpoints




                                                                    |
Typical Architecture




                       |
Why would you want to use a tiered architecture?


  • Less sharing
       Reduced replication and/or clustering
        • Scale vertically for your data, horizontally for your UI
        • Sharing increases complexity
        • Less likelihood of invalid or out-of-date data
  • Less duplication
       SELECT * FROM users WHERE user_key = 1 is only called
       in fewer places
       Easier code rollout
  • More options for interaction
  • Separated developer tasks

                                                                     |
Why would you want to use a tiered architecture?


  • It forces you to think about the consequences of
      your work
        No more hacking together a simple script
        …hopefully
  • It forces you to separate presentation and data
      layers
  •   Migrate your application to PHP slowly




                                                       |
When is a tiered architecture rational?


  • When your development team has highly
    segmented skill sets
       Why force good business logic developers write bad HTML
       code?
       Why force graphical people to write business logic? Can
       they?
       Separate your development efforts so people can specialize
  • When different parts of your application have
    different scalability needs
       Frontend might scale better horizontally
       Backend might scale better vertically
       Why force both to scale the same?



                                                                    |
When is a tiered architecture rational (con’t)?


  • When you want to expose your business logic to
      multiple different presentation layers
  •   When you have different programming languages
      being used in different tiers
        For example, JEE on the back end, PHP on the front




                                                             |
Why are we doing this?


  • Is an N-tiered application a better architecture than
    a more traditional web-based app?
       Probably not – depends on your needs
  • Then why go through this all?
       To give you some ideas as to
        • What to watch out for
        • What the tradeoffs are
        • What the performance overhead is




                                                            |
Where are we focusing?




                         |
What will we look at


  • 4 different options
       Soap
       XML-RPC
       REST-like
       Integration with Java backends (PHP preso tier)
        • Could also use COM
        • Could also use Zend Platform 5250 Bridge, if on IBM i




                                                                  |
How was testing done?


  • Front end is a Zend Framework microblogging
    application
       Only 2 classes
        • Account
        • Message
  • Backend is an HTTP server, or the Java Bridge in
    front of a simple MySQL database

  Let’s look at some code!!!




                                                       |
Option 1 – Soap


  • Benefits
       Easy object handling
       Most cross-platform compatible out of all the solutions
        • Works well in heterogeneous environments
       Provides highly structured data transfer
       The PHP extension is freaking fast for all that it does
  • Drawbacks
       Most complex out of all the solutions in terms of setup


  Let’s look at the Soap handling code



                                                                 |
Option 2 – XML-RPC


  • Benefits
       Pretty lightweight in terms of protocol
       Low barrier to entry
  • Drawbacks
       Limited vendor support
       … Except Zend Framework ☺
       Difficult to use with objects/classes




                                                 |
Option 2 – XML-RPC


  • Used SimpleXML
  • Why did I not use Zend Framework?
       Performance
       Framework’s XML-RPC framework is great for systems that are
       loosely coupled
       This application was tightly coupled
         • I had control over the front end
         • I had control over the backend
         • Therefore
              • Introspection was overkill
              • I could “bend” the standards a little
  • Why did I not use PHP XML-RPC extension?
       It’s still considered experimental
  Let’s look at some code

                                                                     |
Option 3 – REST or REST-like


  • Introduction
        RESTful web services typically use XML, bound to a particular URL to
        retrieve data
        This implementation passed serialized objects instead of XML
          • We had already looked at an XML-like implementation
  • Benefits
        Because it can use GET it is possible to use front and backend caching
        together
        Can utilize HTTP header codes
        Closest to a native PHP RMI
        Gives more control to networking options like persistence if you use
        pfsockopen()
  • Drawbacks
        No real standards
        Size limitations on size of GET request
  Let’s look at some code




                                                                                 |
Option 4 – Java Bridge


  • Benefits
      Makes it fairly easy to integrate with 3rd party software that is
      based on Java
      Robust caching options available
      Easy integration into enterprise environments
      Lighter communication than HTTP




                                                                          |
Option 4 – Java Bridge


  • Drawbacks
       Need to know the ins and outs of more than one language
       Need to buy twice the server to due to memory requirements
       Not a shared-nothing environment… but that’s another story
  • Things I learned
       __magic methods and variable variables are LOVELY when
       you are using the proxy design pattern
       Java likes to suck up every free resource on your system…
        • Like you didn’t know that (Had to double the RAM on the VM)




                                                                        |
Performance Tests


  • Done using a custom PHP script to set up
      repeatable scenarios
  •   Tests were done connecting to the front end
      domain so that data translation time was included
  •   No caching was used
        The only one that could have used caching was REST-ish




                                                                 |
Performance Tests


  • Tests included
      Get entries
      Post Message
      Get Subscribers
      Add Subscriber
      Remove Subscriber
  • 1000 requests for read operations
  • 100 for write operations
      Except for Java. Had difficulty with long-running requests




                                                                   |
Get Entries

0.25



 0.2



0.15                                                                              Java
                                                                                  Restish
                                                                                  Soap
 0.1                                                                              XML-RPC




0.05



  0
       1   14 27 40 53 66 79 92 105 118 131 144 157 170 183 196 209 222 235 248


                                                                                     |
Get Entries (10 request average)

0.16


0.14


0.12


 0.1
                                                                       Java (10 req. avg)
                                                                       Restish (10 req. avg)
0.08
                                                                       Soap (10 req. avg)
                                                                       XML-RPC (10 req. avg)
0.06


0.04


0.02


  0
       1   16 31 46 61 76 91 106 121 136 151 166 181 196 211 226 241


                                                                                            |
Post Message

0.14


0.12


 0.1

                                                                       XML-RPC
0.08
                                                                       Soap
                                                                       REST-ish
0.06
                                                                       Java

0.04


0.02


  0
       1   6   11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96


                                                                              |
Post Message (10 request average)

0.09

0.08

0.07

0.06
                                                              XML-RPC (10 sec. avg.)
0.05
                                                              Soap (10 sec. avg.)
                                                              REST-ish (10 sec. avg.)
0.04
                                                              Java (10 sec. avg.)
0.03

0.02

0.01

  0
       1   7   13 19 25 31 37 43 49 55 61 67 73 79 85 91 97


                                                                                    |
Results


  • “I thought Java would be slower”
    or
    “I thought PHP would be faster than Java”
      Java performance was partially due to the architecture of the
      Zend Platform Java Bridge
          • It uses a very efficient binary protocol instead of using HTTP as a
            transport mechanism
      It was also partially because this was not a typically
      architected Java structure.
          • Have you ever run a Java app with only 2 classes?
      It was also partially because Java is faster than most people
      give it credit for
      Slowness in Java is usually due to architectural decisions

                                                                                  |
How about debugging?


  •    Simply add the following query string to the URL that the front end connects
       to
  •    For example, looking at the Soap WSDL
  <service name=quot;tbbServicequot;>
        <port name=quot;Soap_BrokerPortquot; binding=quot;typens:Soap_BrokerBindingquot;>
                 <soap:address location=quot;http://tbb/soap.phpquot;/>
        </port>
  </service>
  To
  <service name=quot;tbbServicequot;>
        <port name=quot;Soap_BrokerPortquot; binding=quot;typens:Soap_BrokerBindingquot;>
                 <soap:address
                 location=quot;http://tbb/soap.php?use_remote=1&amp;debug_port=10137&amp;start_debug=1&a
                 mp;debug_start_session=1&amp;debug_session_id=1201&amp;send_sess_end=1&amp;debu
                 g_host=192.168.175.1&amp;debug_stop=1quot;/>
        </port>
  </service>


  •    Notice the URL-encoded &amp;
  •    You can use this string for any of the backend communication methods




                                                                                                       |
… and profiling?


  •    Simply add the following query string to the URL that the front end connects
       to
  •    For example, looking at the Soap WSDL
  <service name=quot;tbbServicequot;>
        <port name=quot;Soap_BrokerPortquot; binding=quot;typens:Soap_BrokerBindingquot;>
                 <soap:address location=quot;http://tbb/soap.phpquot;/>
        </port>
  </service>
  To
  <service name=quot;tbbServicequot;>
        <port name=quot;Soap_BrokerPortquot; binding=quot;typens:Soap_BrokerBindingquot;>
                 <soap:address
        location=quot;http://tbb/soap.php?no_remote=1&amp;debug_port=10137&amp;start_profile=1&amp;debug_start_session=1&
        amp;debug_session_id=1201&amp;send_sess_end=1&amp;debug_host=192.168.175.1&amp;profile_stop=1quot;/>
        </port>
  </service>


  Notice the URL-encoded &amp;
  You can use this string for any of the backend communication methods




                                                                                                                        |
Alternatively…

  $sc = new SoapClient('http://tbb/tbb.wsdl');
  $sc->__setCookie('use_remote', '1');
  $sc->__setCookie('debug_port', '10137');
  $sc->__setCookie('start_debug', '1');
  $sc->__setCookie('debug_start_session', '1');
  $sc->__setCookie('debug_session_id', '1201');
  $sc->__setCookie('send_sess_end', '1');
  $sc->__setCookie('debug_host', '192.168.175.1');
  $sc->__setCookie('debug_stop', '1');




                                                     |
Using a tiered architecture for migration


    As noted in the (boring :-) ) keynote this morning
       Enterprises are moving from existing environments to PHP
       Why?
        • Many applications are more complex than they need to be
        • Many applications are simply interfaces to data
        • Many applications do not really need to be strongly-typed
        • PHP flexes to fit the solution. You are not flexing the solution to
          fit PHP
        • Rapid Application Development without losing control (!!)




                                                                                |
Questions?


  • Do you have any
      Questions?
      Thoughts?
      Experiences?




                      |
Zend is looking for quality PHP experts in
North America Global Services!!




                                             |
Contact Me


  Kevin Schroeder
  kevin@zend.com




                    |

More Related Content

What's hot

Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009Hiroshi Ono
 
Seatwave Web Peformance Optimisation Case Study
Seatwave Web Peformance Optimisation Case StudySeatwave Web Peformance Optimisation Case Study
Seatwave Web Peformance Optimisation Case StudyStephen Thair
 
Turbocharging php applications with zend server
Turbocharging php applications with zend serverTurbocharging php applications with zend server
Turbocharging php applications with zend serverEric Ritchie
 
Microsoft TechDays 2011 - PHP on Windows
Microsoft TechDays 2011 - PHP on WindowsMicrosoft TechDays 2011 - PHP on Windows
Microsoft TechDays 2011 - PHP on WindowsEnterprise PHP Center
 
What's new with Zend server
What's new with Zend serverWhat's new with Zend server
What's new with Zend serverCOMMON Europe
 
Fundamentals of performance tuning PHP on IBM i
Fundamentals of performance tuning PHP on IBM i  Fundamentals of performance tuning PHP on IBM i
Fundamentals of performance tuning PHP on IBM i Zend by Rogue Wave Software
 
DB2 and PHP in Depth on IBM i
DB2 and PHP in Depth on IBM iDB2 and PHP in Depth on IBM i
DB2 and PHP in Depth on IBM iAlan Seiden
 
Performance tuning with zend framework
Performance tuning with zend frameworkPerformance tuning with zend framework
Performance tuning with zend frameworkAlan Seiden
 
Zendcon magento101
Zendcon magento101Zendcon magento101
Zendcon magento101Mathew Beane
 
Getting started with PHP on IBM i
Getting started with PHP on IBM iGetting started with PHP on IBM i
Getting started with PHP on IBM iCOMMON Europe
 
PHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iPHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iAlan Seiden
 
Magento Performance Optimization 101
Magento Performance Optimization 101Magento Performance Optimization 101
Magento Performance Optimization 101Angus Li
 
Strategic Modernization with PHP on IBM i
Strategic Modernization with PHP on IBM iStrategic Modernization with PHP on IBM i
Strategic Modernization with PHP on IBM iAlan Seiden
 
How to scale PHP applications
How to scale PHP applicationsHow to scale PHP applications
How to scale PHP applicationsEnrico Zimuel
 
Web Performance First Aid
Web Performance First AidWeb Performance First Aid
Web Performance First AidAlan Seiden
 
Create a welcoming development environment on IBM i
Create a welcoming development environment on IBM iCreate a welcoming development environment on IBM i
Create a welcoming development environment on IBM iAlan Seiden
 
Web services on IBM i with PHP and Zend Framework
Web services on IBM i with PHP and Zend FrameworkWeb services on IBM i with PHP and Zend Framework
Web services on IBM i with PHP and Zend FrameworkAlan Seiden
 
Performance scalability brandonlyon
Performance scalability brandonlyonPerformance scalability brandonlyon
Performance scalability brandonlyonDigitaria
 
PHP Batch Jobs on IBM i
PHP Batch Jobs on IBM iPHP Batch Jobs on IBM i
PHP Batch Jobs on IBM iAlan Seiden
 

What's hot (20)

Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
 
Seatwave Web Peformance Optimisation Case Study
Seatwave Web Peformance Optimisation Case StudySeatwave Web Peformance Optimisation Case Study
Seatwave Web Peformance Optimisation Case Study
 
Turbocharging php applications with zend server
Turbocharging php applications with zend serverTurbocharging php applications with zend server
Turbocharging php applications with zend server
 
Microsoft TechDays 2011 - PHP on Windows
Microsoft TechDays 2011 - PHP on WindowsMicrosoft TechDays 2011 - PHP on Windows
Microsoft TechDays 2011 - PHP on Windows
 
What's new with Zend server
What's new with Zend serverWhat's new with Zend server
What's new with Zend server
 
Fundamentals of performance tuning PHP on IBM i
Fundamentals of performance tuning PHP on IBM i  Fundamentals of performance tuning PHP on IBM i
Fundamentals of performance tuning PHP on IBM i
 
DB2 and PHP in Depth on IBM i
DB2 and PHP in Depth on IBM iDB2 and PHP in Depth on IBM i
DB2 and PHP in Depth on IBM i
 
Performance tuning with zend framework
Performance tuning with zend frameworkPerformance tuning with zend framework
Performance tuning with zend framework
 
Zendcon magento101
Zendcon magento101Zendcon magento101
Zendcon magento101
 
Getting started with PHP on IBM i
Getting started with PHP on IBM iGetting started with PHP on IBM i
Getting started with PHP on IBM i
 
PHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iPHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM i
 
Magento Performance Optimization 101
Magento Performance Optimization 101Magento Performance Optimization 101
Magento Performance Optimization 101
 
Strategic Modernization with PHP on IBM i
Strategic Modernization with PHP on IBM iStrategic Modernization with PHP on IBM i
Strategic Modernization with PHP on IBM i
 
Advanced Deployment
Advanced DeploymentAdvanced Deployment
Advanced Deployment
 
How to scale PHP applications
How to scale PHP applicationsHow to scale PHP applications
How to scale PHP applications
 
Web Performance First Aid
Web Performance First AidWeb Performance First Aid
Web Performance First Aid
 
Create a welcoming development environment on IBM i
Create a welcoming development environment on IBM iCreate a welcoming development environment on IBM i
Create a welcoming development environment on IBM i
 
Web services on IBM i with PHP and Zend Framework
Web services on IBM i with PHP and Zend FrameworkWeb services on IBM i with PHP and Zend Framework
Web services on IBM i with PHP and Zend Framework
 
Performance scalability brandonlyon
Performance scalability brandonlyonPerformance scalability brandonlyon
Performance scalability brandonlyon
 
PHP Batch Jobs on IBM i
PHP Batch Jobs on IBM iPHP Batch Jobs on IBM i
PHP Batch Jobs on IBM i
 

Viewers also liked

A Storage Story #ChefConf2013
A Storage Story #ChefConf2013A Storage Story #ChefConf2013
A Storage Story #ChefConf2013Kyle Bader
 
MySQL Manchester TT - Security
MySQL Manchester TT  - SecurityMySQL Manchester TT  - Security
MySQL Manchester TT - SecurityMark Swarbrick
 
Oracle cloud ravello介绍及测试账户申请
Oracle cloud ravello介绍及测试账户申请Oracle cloud ravello介绍及测试账户申请
Oracle cloud ravello介绍及测试账户申请Zhaoyang Wang
 
MySQL Tech Tour 2015 - 5.7 Connector/J/Net
MySQL Tech Tour 2015 - 5.7 Connector/J/NetMySQL Tech Tour 2015 - 5.7 Connector/J/Net
MySQL Tech Tour 2015 - 5.7 Connector/J/NetMark Swarbrick
 
Why MySQL High Availability Matters
Why MySQL High Availability MattersWhy MySQL High Availability Matters
Why MySQL High Availability MattersMark Swarbrick
 
Oracle cloud 使用云市场快速搭建小型电商网站
Oracle cloud 使用云市场快速搭建小型电商网站Oracle cloud 使用云市场快速搭建小型电商网站
Oracle cloud 使用云市场快速搭建小型电商网站Zhaoyang Wang
 
PHP on Windows - What's New
PHP on Windows - What's NewPHP on Windows - What's New
PHP on Windows - What's NewZendCon
 
Application Diagnosis with Zend Server Tracing
Application Diagnosis with Zend Server TracingApplication Diagnosis with Zend Server Tracing
Application Diagnosis with Zend Server TracingZendCon
 
Zend_Tool: Practical use and Extending
Zend_Tool: Practical use and ExtendingZend_Tool: Practical use and Extending
Zend_Tool: Practical use and ExtendingZendCon
 
Oracle Compute Cloud Service快速实践
Oracle Compute Cloud Service快速实践Oracle Compute Cloud Service快速实践
Oracle Compute Cloud Service快速实践Zhaoyang Wang
 
MySQL Optimizer Overview
MySQL Optimizer OverviewMySQL Optimizer Overview
MySQL Optimizer OverviewOlav Sandstå
 
Zend Core on IBM i - Security Considerations
Zend Core on IBM i - Security ConsiderationsZend Core on IBM i - Security Considerations
Zend Core on IBM i - Security ConsiderationsZendCon
 
PHP on IBM i Tutorial
PHP on IBM i TutorialPHP on IBM i Tutorial
PHP on IBM i TutorialZendCon
 
MySQL Manchester TT - 5.7 Whats new
MySQL Manchester TT - 5.7 Whats newMySQL Manchester TT - 5.7 Whats new
MySQL Manchester TT - 5.7 Whats newMark Swarbrick
 
Framework Shootout
Framework ShootoutFramework Shootout
Framework ShootoutZendCon
 
PHP and Platform Independance in the Cloud
PHP and Platform Independance in the CloudPHP and Platform Independance in the Cloud
PHP and Platform Independance in the CloudZendCon
 
Oracle Compute Cloud Service介绍
Oracle Compute Cloud Service介绍Oracle Compute Cloud Service介绍
Oracle Compute Cloud Service介绍Zhaoyang Wang
 
MySQL Manchester TT - Replication Features
MySQL Manchester TT  - Replication FeaturesMySQL Manchester TT  - Replication Features
MySQL Manchester TT - Replication FeaturesMark Swarbrick
 

Viewers also liked (20)

A Storage Story #ChefConf2013
A Storage Story #ChefConf2013A Storage Story #ChefConf2013
A Storage Story #ChefConf2013
 
MySQL Manchester TT - Security
MySQL Manchester TT  - SecurityMySQL Manchester TT  - Security
MySQL Manchester TT - Security
 
Oracle cloud ravello介绍及测试账户申请
Oracle cloud ravello介绍及测试账户申请Oracle cloud ravello介绍及测试账户申请
Oracle cloud ravello介绍及测试账户申请
 
MySQL Tech Tour 2015 - 5.7 Connector/J/Net
MySQL Tech Tour 2015 - 5.7 Connector/J/NetMySQL Tech Tour 2015 - 5.7 Connector/J/Net
MySQL Tech Tour 2015 - 5.7 Connector/J/Net
 
Why MySQL High Availability Matters
Why MySQL High Availability MattersWhy MySQL High Availability Matters
Why MySQL High Availability Matters
 
Oracle cloud 使用云市场快速搭建小型电商网站
Oracle cloud 使用云市场快速搭建小型电商网站Oracle cloud 使用云市场快速搭建小型电商网站
Oracle cloud 使用云市场快速搭建小型电商网站
 
PHP on Windows - What's New
PHP on Windows - What's NewPHP on Windows - What's New
PHP on Windows - What's New
 
Application Diagnosis with Zend Server Tracing
Application Diagnosis with Zend Server TracingApplication Diagnosis with Zend Server Tracing
Application Diagnosis with Zend Server Tracing
 
Zend_Tool: Practical use and Extending
Zend_Tool: Practical use and ExtendingZend_Tool: Practical use and Extending
Zend_Tool: Practical use and Extending
 
Oracle Compute Cloud Service快速实践
Oracle Compute Cloud Service快速实践Oracle Compute Cloud Service快速实践
Oracle Compute Cloud Service快速实践
 
Script it
Script itScript it
Script it
 
MySQL Optimizer Overview
MySQL Optimizer OverviewMySQL Optimizer Overview
MySQL Optimizer Overview
 
Zend Core on IBM i - Security Considerations
Zend Core on IBM i - Security ConsiderationsZend Core on IBM i - Security Considerations
Zend Core on IBM i - Security Considerations
 
PHP on IBM i Tutorial
PHP on IBM i TutorialPHP on IBM i Tutorial
PHP on IBM i Tutorial
 
MySQL Manchester TT - 5.7 Whats new
MySQL Manchester TT - 5.7 Whats newMySQL Manchester TT - 5.7 Whats new
MySQL Manchester TT - 5.7 Whats new
 
Framework Shootout
Framework ShootoutFramework Shootout
Framework Shootout
 
PHP and Platform Independance in the Cloud
PHP and Platform Independance in the CloudPHP and Platform Independance in the Cloud
PHP and Platform Independance in the Cloud
 
Oracle Compute Cloud Service介绍
Oracle Compute Cloud Service介绍Oracle Compute Cloud Service介绍
Oracle Compute Cloud Service介绍
 
MySQL Manchester TT - Replication Features
MySQL Manchester TT  - Replication FeaturesMySQL Manchester TT  - Replication Features
MySQL Manchester TT - Replication Features
 
MySQL in your laptop
MySQL in your laptopMySQL in your laptop
MySQL in your laptop
 

Similar to Tiery Eyed

DevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & AnsibleDevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & AnsibleArnaud LEMAIRE
 
Professional PHP: an open-source alternative for enterprise development [Kort...
Professional PHP: an open-source alternative for enterprise development [Kort...Professional PHP: an open-source alternative for enterprise development [Kort...
Professional PHP: an open-source alternative for enterprise development [Kort...Combell NV
 
Scaling with Symfony - PHP UK
Scaling with Symfony - PHP UKScaling with Symfony - PHP UK
Scaling with Symfony - PHP UKRicard Clau
 
Drupal Performance and Scaling
Drupal Performance and ScalingDrupal Performance and Scaling
Drupal Performance and ScalingGerald Villorente
 
High performance PHP: Scaling and getting the most out of your infrastructure
High performance PHP: Scaling and getting the most out of your infrastructureHigh performance PHP: Scaling and getting the most out of your infrastructure
High performance PHP: Scaling and getting the most out of your infrastructuremkherlakian
 
Debugging with Zend Studio for Eclipse
Debugging with Zend Studio for EclipseDebugging with Zend Studio for Eclipse
Debugging with Zend Studio for EclipseOSSCube
 
Scalable Architecture 101
Scalable Architecture 101Scalable Architecture 101
Scalable Architecture 101ConFoo
 
Slides from LAX & DEN usergroup meetings
Slides from LAX & DEN usergroup meetingsSlides from LAX & DEN usergroup meetings
Slides from LAX & DEN usergroup meetings10n Software, LLC
 
PHP Apps on the Move - Migrating from In-House to Cloud
PHP Apps on the Move - Migrating from In-House to Cloud  PHP Apps on the Move - Migrating from In-House to Cloud
PHP Apps on the Move - Migrating from In-House to Cloud RightScale
 
Rails Conf Europe 2007 Notes
Rails Conf  Europe 2007  NotesRails Conf  Europe 2007  Notes
Rails Conf Europe 2007 NotesRoss Lawley
 
Zingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHPZingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHPChau Thanh
 
Zingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHPZingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHPVõ Duy Tuấn
 
zingmepracticeforbuildingscalablewebsitewithphp
zingmepracticeforbuildingscalablewebsitewithphpzingmepracticeforbuildingscalablewebsitewithphp
zingmepracticeforbuildingscalablewebsitewithphphazzaz
 
01 zingme practice for building scalable website with php
01 zingme practice for building scalable website with php01 zingme practice for building scalable website with php
01 zingme practice for building scalable website with phpNguyen Duc Phu
 
Laird Best Practices Ajax World West2008
Laird Best Practices Ajax World West2008Laird Best Practices Ajax World West2008
Laird Best Practices Ajax World West2008rajivmordani
 
Performance automation 101 @LDNWebPerf MickMcGuinness
Performance automation 101 @LDNWebPerf MickMcGuinnessPerformance automation 101 @LDNWebPerf MickMcGuinness
Performance automation 101 @LDNWebPerf MickMcGuinnessStephen Thair
 
Building software using Rich Clients Platforms Rikard Thulin
Building software using Rich Clients Platforms Rikard ThulinBuilding software using Rich Clients Platforms Rikard Thulin
Building software using Rich Clients Platforms Rikard ThulinRikard Thulin
 
Web frameworks don't matter
Web frameworks don't matterWeb frameworks don't matter
Web frameworks don't matterTomas Doran
 

Similar to Tiery Eyed (20)

DevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & AnsibleDevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & Ansible
 
Professional PHP: an open-source alternative for enterprise development [Kort...
Professional PHP: an open-source alternative for enterprise development [Kort...Professional PHP: an open-source alternative for enterprise development [Kort...
Professional PHP: an open-source alternative for enterprise development [Kort...
 
Scaling with Symfony - PHP UK
Scaling with Symfony - PHP UKScaling with Symfony - PHP UK
Scaling with Symfony - PHP UK
 
Rest Vs Soap Yawn2289
Rest Vs Soap Yawn2289Rest Vs Soap Yawn2289
Rest Vs Soap Yawn2289
 
PaaS with Java
PaaS with JavaPaaS with Java
PaaS with Java
 
Drupal Performance and Scaling
Drupal Performance and ScalingDrupal Performance and Scaling
Drupal Performance and Scaling
 
High performance PHP: Scaling and getting the most out of your infrastructure
High performance PHP: Scaling and getting the most out of your infrastructureHigh performance PHP: Scaling and getting the most out of your infrastructure
High performance PHP: Scaling and getting the most out of your infrastructure
 
Debugging with Zend Studio for Eclipse
Debugging with Zend Studio for EclipseDebugging with Zend Studio for Eclipse
Debugging with Zend Studio for Eclipse
 
Scalable Architecture 101
Scalable Architecture 101Scalable Architecture 101
Scalable Architecture 101
 
Slides from LAX & DEN usergroup meetings
Slides from LAX & DEN usergroup meetingsSlides from LAX & DEN usergroup meetings
Slides from LAX & DEN usergroup meetings
 
PHP Apps on the Move - Migrating from In-House to Cloud
PHP Apps on the Move - Migrating from In-House to Cloud  PHP Apps on the Move - Migrating from In-House to Cloud
PHP Apps on the Move - Migrating from In-House to Cloud
 
Rails Conf Europe 2007 Notes
Rails Conf  Europe 2007  NotesRails Conf  Europe 2007  Notes
Rails Conf Europe 2007 Notes
 
Zingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHPZingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHP
 
Zingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHPZingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHP
 
zingmepracticeforbuildingscalablewebsitewithphp
zingmepracticeforbuildingscalablewebsitewithphpzingmepracticeforbuildingscalablewebsitewithphp
zingmepracticeforbuildingscalablewebsitewithphp
 
01 zingme practice for building scalable website with php
01 zingme practice for building scalable website with php01 zingme practice for building scalable website with php
01 zingme practice for building scalable website with php
 
Laird Best Practices Ajax World West2008
Laird Best Practices Ajax World West2008Laird Best Practices Ajax World West2008
Laird Best Practices Ajax World West2008
 
Performance automation 101 @LDNWebPerf MickMcGuinness
Performance automation 101 @LDNWebPerf MickMcGuinnessPerformance automation 101 @LDNWebPerf MickMcGuinness
Performance automation 101 @LDNWebPerf MickMcGuinness
 
Building software using Rich Clients Platforms Rikard Thulin
Building software using Rich Clients Platforms Rikard ThulinBuilding software using Rich Clients Platforms Rikard Thulin
Building software using Rich Clients Platforms Rikard Thulin
 
Web frameworks don't matter
Web frameworks don't matterWeb frameworks don't matter
Web frameworks don't matter
 

More from ZendCon

I18n with PHP 5.3
I18n with PHP 5.3I18n with PHP 5.3
I18n with PHP 5.3ZendCon
 
Cloud Computing: The Hard Problems Never Go Away
Cloud Computing: The Hard Problems Never Go AwayCloud Computing: The Hard Problems Never Go Away
Cloud Computing: The Hard Problems Never Go AwayZendCon
 
Planning for Synchronization with Browser-Local Databases
Planning for Synchronization with Browser-Local DatabasesPlanning for Synchronization with Browser-Local Databases
Planning for Synchronization with Browser-Local DatabasesZendCon
 
Magento - a Zend Framework Application
Magento - a Zend Framework ApplicationMagento - a Zend Framework Application
Magento - a Zend Framework ApplicationZendCon
 
Enterprise-Class PHP Security
Enterprise-Class PHP SecurityEnterprise-Class PHP Security
Enterprise-Class PHP SecurityZendCon
 
PHP and IBM i - Database Alternatives
PHP and IBM i - Database AlternativesPHP and IBM i - Database Alternatives
PHP and IBM i - Database AlternativesZendCon
 
Insights from the Experts: How PHP Leaders Are Transforming High-Impact PHP A...
Insights from the Experts: How PHP Leaders Are Transforming High-Impact PHP A...Insights from the Experts: How PHP Leaders Are Transforming High-Impact PHP A...
Insights from the Experts: How PHP Leaders Are Transforming High-Impact PHP A...ZendCon
 
Joe Staner Zend Con 2008
Joe Staner Zend Con 2008Joe Staner Zend Con 2008
Joe Staner Zend Con 2008ZendCon
 
Make your PHP Application Software-as-a-Service (SaaS) Ready with the Paralle...
Make your PHP Application Software-as-a-Service (SaaS) Ready with the Paralle...Make your PHP Application Software-as-a-Service (SaaS) Ready with the Paralle...
Make your PHP Application Software-as-a-Service (SaaS) Ready with the Paralle...ZendCon
 
DB2 Storage Engine for MySQL and Open Source Applications Session
DB2 Storage Engine for MySQL and Open Source Applications SessionDB2 Storage Engine for MySQL and Open Source Applications Session
DB2 Storage Engine for MySQL and Open Source Applications SessionZendCon
 
Digital Identity
Digital IdentityDigital Identity
Digital IdentityZendCon
 
Modernizing i5 Applications
Modernizing i5 ApplicationsModernizing i5 Applications
Modernizing i5 ApplicationsZendCon
 
Lesser Known Security Problems in PHP Applications
Lesser Known Security Problems in PHP ApplicationsLesser Known Security Problems in PHP Applications
Lesser Known Security Problems in PHP ApplicationsZendCon
 
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"ZendCon
 
SQL Query Tuning: The Legend of Drunken Query Master
SQL Query Tuning: The Legend of Drunken Query MasterSQL Query Tuning: The Legend of Drunken Query Master
SQL Query Tuning: The Legend of Drunken Query MasterZendCon
 
ZendCon 2008 Closing Keynote
ZendCon 2008 Closing KeynoteZendCon 2008 Closing Keynote
ZendCon 2008 Closing KeynoteZendCon
 
Top Zend Studio Secrets
Top Zend Studio SecretsTop Zend Studio Secrets
Top Zend Studio SecretsZendCon
 
VIM for (PHP) Programmers
VIM for (PHP) ProgrammersVIM for (PHP) Programmers
VIM for (PHP) ProgrammersZendCon
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentZendCon
 
Rickroll To Go With PHP, WURFL, and Other Open Source Tools
Rickroll To Go With PHP, WURFL, and Other Open Source ToolsRickroll To Go With PHP, WURFL, and Other Open Source Tools
Rickroll To Go With PHP, WURFL, and Other Open Source ToolsZendCon
 

More from ZendCon (20)

I18n with PHP 5.3
I18n with PHP 5.3I18n with PHP 5.3
I18n with PHP 5.3
 
Cloud Computing: The Hard Problems Never Go Away
Cloud Computing: The Hard Problems Never Go AwayCloud Computing: The Hard Problems Never Go Away
Cloud Computing: The Hard Problems Never Go Away
 
Planning for Synchronization with Browser-Local Databases
Planning for Synchronization with Browser-Local DatabasesPlanning for Synchronization with Browser-Local Databases
Planning for Synchronization with Browser-Local Databases
 
Magento - a Zend Framework Application
Magento - a Zend Framework ApplicationMagento - a Zend Framework Application
Magento - a Zend Framework Application
 
Enterprise-Class PHP Security
Enterprise-Class PHP SecurityEnterprise-Class PHP Security
Enterprise-Class PHP Security
 
PHP and IBM i - Database Alternatives
PHP and IBM i - Database AlternativesPHP and IBM i - Database Alternatives
PHP and IBM i - Database Alternatives
 
Insights from the Experts: How PHP Leaders Are Transforming High-Impact PHP A...
Insights from the Experts: How PHP Leaders Are Transforming High-Impact PHP A...Insights from the Experts: How PHP Leaders Are Transforming High-Impact PHP A...
Insights from the Experts: How PHP Leaders Are Transforming High-Impact PHP A...
 
Joe Staner Zend Con 2008
Joe Staner Zend Con 2008Joe Staner Zend Con 2008
Joe Staner Zend Con 2008
 
Make your PHP Application Software-as-a-Service (SaaS) Ready with the Paralle...
Make your PHP Application Software-as-a-Service (SaaS) Ready with the Paralle...Make your PHP Application Software-as-a-Service (SaaS) Ready with the Paralle...
Make your PHP Application Software-as-a-Service (SaaS) Ready with the Paralle...
 
DB2 Storage Engine for MySQL and Open Source Applications Session
DB2 Storage Engine for MySQL and Open Source Applications SessionDB2 Storage Engine for MySQL and Open Source Applications Session
DB2 Storage Engine for MySQL and Open Source Applications Session
 
Digital Identity
Digital IdentityDigital Identity
Digital Identity
 
Modernizing i5 Applications
Modernizing i5 ApplicationsModernizing i5 Applications
Modernizing i5 Applications
 
Lesser Known Security Problems in PHP Applications
Lesser Known Security Problems in PHP ApplicationsLesser Known Security Problems in PHP Applications
Lesser Known Security Problems in PHP Applications
 
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
 
SQL Query Tuning: The Legend of Drunken Query Master
SQL Query Tuning: The Legend of Drunken Query MasterSQL Query Tuning: The Legend of Drunken Query Master
SQL Query Tuning: The Legend of Drunken Query Master
 
ZendCon 2008 Closing Keynote
ZendCon 2008 Closing KeynoteZendCon 2008 Closing Keynote
ZendCon 2008 Closing Keynote
 
Top Zend Studio Secrets
Top Zend Studio SecretsTop Zend Studio Secrets
Top Zend Studio Secrets
 
VIM for (PHP) Programmers
VIM for (PHP) ProgrammersVIM for (PHP) Programmers
VIM for (PHP) Programmers
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Rickroll To Go With PHP, WURFL, and Other Open Source Tools
Rickroll To Go With PHP, WURFL, and Other Open Source ToolsRickroll To Go With PHP, WURFL, and Other Open Source Tools
Rickroll To Go With PHP, WURFL, and Other Open Source Tools
 

Recently uploaded

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 

Recently uploaded (20)

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 

Tiery Eyed

  • 1. Tiery Eyed - Approaches to tiered development in PHP Kevin Schroeder Copyright © 2007, Zend Technologies Inc.
  • 2. Could also be called “Solving simple problems with complex solutions” |
  • 3. Introduction • About me Kevin Schroeder Consultant for Zend Technologies Have worked with a bunch of languages Have worked with a bunch of hardware Have worked in a bunch of scenarios Enough about me |
  • 4. … Almost • From Canada • Live in Dallas • Flew in to San Hose, Eh? |
  • 5. Introduction • What is a tiered architecture? Has multiple distinct parts, typically • Presentation • Business/Application Logic • Data Often used to provide access to a single layer of logic to multiple informational endpoints |
  • 7. Why would you want to use a tiered architecture? • Less sharing Reduced replication and/or clustering • Scale vertically for your data, horizontally for your UI • Sharing increases complexity • Less likelihood of invalid or out-of-date data • Less duplication SELECT * FROM users WHERE user_key = 1 is only called in fewer places Easier code rollout • More options for interaction • Separated developer tasks |
  • 8. Why would you want to use a tiered architecture? • It forces you to think about the consequences of your work No more hacking together a simple script …hopefully • It forces you to separate presentation and data layers • Migrate your application to PHP slowly |
  • 9. When is a tiered architecture rational? • When your development team has highly segmented skill sets Why force good business logic developers write bad HTML code? Why force graphical people to write business logic? Can they? Separate your development efforts so people can specialize • When different parts of your application have different scalability needs Frontend might scale better horizontally Backend might scale better vertically Why force both to scale the same? |
  • 10. When is a tiered architecture rational (con’t)? • When you want to expose your business logic to multiple different presentation layers • When you have different programming languages being used in different tiers For example, JEE on the back end, PHP on the front |
  • 11. Why are we doing this? • Is an N-tiered application a better architecture than a more traditional web-based app? Probably not – depends on your needs • Then why go through this all? To give you some ideas as to • What to watch out for • What the tradeoffs are • What the performance overhead is |
  • 12. Where are we focusing? |
  • 13. What will we look at • 4 different options Soap XML-RPC REST-like Integration with Java backends (PHP preso tier) • Could also use COM • Could also use Zend Platform 5250 Bridge, if on IBM i |
  • 14. How was testing done? • Front end is a Zend Framework microblogging application Only 2 classes • Account • Message • Backend is an HTTP server, or the Java Bridge in front of a simple MySQL database Let’s look at some code!!! |
  • 15. Option 1 – Soap • Benefits Easy object handling Most cross-platform compatible out of all the solutions • Works well in heterogeneous environments Provides highly structured data transfer The PHP extension is freaking fast for all that it does • Drawbacks Most complex out of all the solutions in terms of setup Let’s look at the Soap handling code |
  • 16. Option 2 – XML-RPC • Benefits Pretty lightweight in terms of protocol Low barrier to entry • Drawbacks Limited vendor support … Except Zend Framework ☺ Difficult to use with objects/classes |
  • 17. Option 2 – XML-RPC • Used SimpleXML • Why did I not use Zend Framework? Performance Framework’s XML-RPC framework is great for systems that are loosely coupled This application was tightly coupled • I had control over the front end • I had control over the backend • Therefore • Introspection was overkill • I could “bend” the standards a little • Why did I not use PHP XML-RPC extension? It’s still considered experimental Let’s look at some code |
  • 18. Option 3 – REST or REST-like • Introduction RESTful web services typically use XML, bound to a particular URL to retrieve data This implementation passed serialized objects instead of XML • We had already looked at an XML-like implementation • Benefits Because it can use GET it is possible to use front and backend caching together Can utilize HTTP header codes Closest to a native PHP RMI Gives more control to networking options like persistence if you use pfsockopen() • Drawbacks No real standards Size limitations on size of GET request Let’s look at some code |
  • 19. Option 4 – Java Bridge • Benefits Makes it fairly easy to integrate with 3rd party software that is based on Java Robust caching options available Easy integration into enterprise environments Lighter communication than HTTP |
  • 20. Option 4 – Java Bridge • Drawbacks Need to know the ins and outs of more than one language Need to buy twice the server to due to memory requirements Not a shared-nothing environment… but that’s another story • Things I learned __magic methods and variable variables are LOVELY when you are using the proxy design pattern Java likes to suck up every free resource on your system… • Like you didn’t know that (Had to double the RAM on the VM) |
  • 21. Performance Tests • Done using a custom PHP script to set up repeatable scenarios • Tests were done connecting to the front end domain so that data translation time was included • No caching was used The only one that could have used caching was REST-ish |
  • 22. Performance Tests • Tests included Get entries Post Message Get Subscribers Add Subscriber Remove Subscriber • 1000 requests for read operations • 100 for write operations Except for Java. Had difficulty with long-running requests |
  • 23. Get Entries 0.25 0.2 0.15 Java Restish Soap 0.1 XML-RPC 0.05 0 1 14 27 40 53 66 79 92 105 118 131 144 157 170 183 196 209 222 235 248 |
  • 24. Get Entries (10 request average) 0.16 0.14 0.12 0.1 Java (10 req. avg) Restish (10 req. avg) 0.08 Soap (10 req. avg) XML-RPC (10 req. avg) 0.06 0.04 0.02 0 1 16 31 46 61 76 91 106 121 136 151 166 181 196 211 226 241 |
  • 25. Post Message 0.14 0.12 0.1 XML-RPC 0.08 Soap REST-ish 0.06 Java 0.04 0.02 0 1 6 11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 |
  • 26. Post Message (10 request average) 0.09 0.08 0.07 0.06 XML-RPC (10 sec. avg.) 0.05 Soap (10 sec. avg.) REST-ish (10 sec. avg.) 0.04 Java (10 sec. avg.) 0.03 0.02 0.01 0 1 7 13 19 25 31 37 43 49 55 61 67 73 79 85 91 97 |
  • 27. Results • “I thought Java would be slower” or “I thought PHP would be faster than Java” Java performance was partially due to the architecture of the Zend Platform Java Bridge • It uses a very efficient binary protocol instead of using HTTP as a transport mechanism It was also partially because this was not a typically architected Java structure. • Have you ever run a Java app with only 2 classes? It was also partially because Java is faster than most people give it credit for Slowness in Java is usually due to architectural decisions |
  • 28. How about debugging? • Simply add the following query string to the URL that the front end connects to • For example, looking at the Soap WSDL <service name=quot;tbbServicequot;> <port name=quot;Soap_BrokerPortquot; binding=quot;typens:Soap_BrokerBindingquot;> <soap:address location=quot;http://tbb/soap.phpquot;/> </port> </service> To <service name=quot;tbbServicequot;> <port name=quot;Soap_BrokerPortquot; binding=quot;typens:Soap_BrokerBindingquot;> <soap:address location=quot;http://tbb/soap.php?use_remote=1&amp;debug_port=10137&amp;start_debug=1&a mp;debug_start_session=1&amp;debug_session_id=1201&amp;send_sess_end=1&amp;debu g_host=192.168.175.1&amp;debug_stop=1quot;/> </port> </service> • Notice the URL-encoded &amp; • You can use this string for any of the backend communication methods |
  • 29. … and profiling? • Simply add the following query string to the URL that the front end connects to • For example, looking at the Soap WSDL <service name=quot;tbbServicequot;> <port name=quot;Soap_BrokerPortquot; binding=quot;typens:Soap_BrokerBindingquot;> <soap:address location=quot;http://tbb/soap.phpquot;/> </port> </service> To <service name=quot;tbbServicequot;> <port name=quot;Soap_BrokerPortquot; binding=quot;typens:Soap_BrokerBindingquot;> <soap:address location=quot;http://tbb/soap.php?no_remote=1&amp;debug_port=10137&amp;start_profile=1&amp;debug_start_session=1& amp;debug_session_id=1201&amp;send_sess_end=1&amp;debug_host=192.168.175.1&amp;profile_stop=1quot;/> </port> </service> Notice the URL-encoded &amp; You can use this string for any of the backend communication methods |
  • 30. Alternatively… $sc = new SoapClient('http://tbb/tbb.wsdl'); $sc->__setCookie('use_remote', '1'); $sc->__setCookie('debug_port', '10137'); $sc->__setCookie('start_debug', '1'); $sc->__setCookie('debug_start_session', '1'); $sc->__setCookie('debug_session_id', '1201'); $sc->__setCookie('send_sess_end', '1'); $sc->__setCookie('debug_host', '192.168.175.1'); $sc->__setCookie('debug_stop', '1'); |
  • 31. Using a tiered architecture for migration As noted in the (boring :-) ) keynote this morning Enterprises are moving from existing environments to PHP Why? • Many applications are more complex than they need to be • Many applications are simply interfaces to data • Many applications do not really need to be strongly-typed • PHP flexes to fit the solution. You are not flexing the solution to fit PHP • Rapid Application Development without losing control (!!) |
  • 32. Questions? • Do you have any Questions? Thoughts? Experiences? |
  • 33. Zend is looking for quality PHP experts in North America Global Services!! |
  • 34. Contact Me Kevin Schroeder kevin@zend.com |