![Page 1: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/1.jpg)
Copyright © 2008, Kargo Global, Inc. All rights reserved
Using PHP to Build a Mobile Internet Platform
Florian Hoenig <[email protected]>
1
![Page 2: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/2.jpg)
Overview
1. About Kargo
2. PHP beyond “Hypertext Preprocessing”
3. Kargo’s Mobile Web Architecture
4. Conclusions
5. Ideas & Discussion
2
![Page 3: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/3.jpg)
Who is Kargo?Kargo is a mobile media company that conceives, builds
and manages leading mobile products for media properties.
1. Mobile Web
2. Web Applications with Mobile Integration
3. Messaging Applications
4. Native Applications (J2ME, iPhone, Blackberry, etc.)
3
![Page 4: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/4.jpg)
Mobile Web
4
![Page 5: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/5.jpg)
Web/Messaging
5
![Page 6: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/6.jpg)
Panoramic ApplicationsWeb Apps Mobile
Widget
Content & Apps
MessagingText “BOB12” to 85555
to get content
6
![Page 7: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/7.jpg)
Technical Challenges
• Many thousands of variations of devices from over 40 vendors to target
• Devices vary strongly in terms of capabilities (and bugs!)
• Network speeds very strongly
• Crippled technology standards (business-driven removal of features). Misleading specifications.
• Significant amount of engineering and operational time spent on compensating for the above.
7
![Page 8: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/8.jpg)
How to address?
• Need for a flexible architecture
• Loosely coupled (web-) technology helps
• Single choice of technology
• PHP!
8
![Page 9: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/9.jpg)
PHP beyond Hypertext Preprocessing
building enterprise architectures with PHP5 and Zend Framework
9
![Page 10: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/10.jpg)
Enterprise Architecture
• From Microsoft.com: “...a methodology to encompass all of the various IT aspects and processes into a single practice.”
• From MIT: “... IT infrastructure reflecting the integration and standardization requirements of the firm’s operating model.”
In simple words: A single practice to reflect what the company
does
10
![Page 11: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/11.jpg)
Qualitative Requirements
• flexibility - platform’s potential to address new business requirements
• rapid development - reuse, simplicity, short learning curves
• performance - write efficient apps should be straight forward
• reliability - robust platforms, solid testing, security
• interoperability - offer simple ways to talk to interfacewith third-party systems
• simple deployment - application installation and update
• scalability - architectures must scale on demand
• high availability - be able to guarantee uptime
• manageable costs - ability to budget
11
![Page 12: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/12.jpg)
Qualitative Requirements
• flexibility - platform’s potential to address new business requirements
• rapid development - reuse, simplicity, short learning curves
• performance - write efficient apps should be straight forward
• reliability - robust platforms, solid testing, security
• interoperability - offer simple ways to talk to interfacewith third-party systems
• simple deployment - application installation and update
• scalability - architectures must scale on demand
• high availability - be able to guarantee uptime
• manageable costs - ability to budget
How to address
with PHP?
11
![Page 13: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/13.jpg)
Motivation and Claim
• Scripting languages (e.g. Python, Ruby) continue to grow in popularity for many applications where PHP is usually not considered.
• PHP is ready to do the same
12
![Page 14: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/14.jpg)
Legacy and Evolution
<?php if (!isset($_POST[‘item’]))
include ‘form.inc’;else{?><html><body><?php$quantity = $_POST['quantity'];$item = $_POST['item'];
echo "You ordered ". $quantity . " " . $item . ".<br />";echo "Thank you for ordering from <b>myShop</b>!";
?></body></html><?php } ?>
<?php
/** * @category Kargo * @package Smpp * @subpackage Client * @copyright Copyright (c) 2008 Kargo Global, Inc. */abstract class Kargo_Smpp_Client_Abstract
extends Kargo_Event_Buffered_Clientimplements Kargo_Event_Buffered_Handler
{ /** * The smpp connection state * * @var unknown_type */ protected $_state = KARGO_SMPP_STATE_CLOSED; /** * SMPP protocol flavor to use * * @var string */ protected $_smsc_vendor = Kargo_Smpp::KARGO_SMPP_VENDOR_NONE;...}
--------------<?php$esmc = new Kargo_Smpp_Client_MBlox($options);$esmc->connect():
Kargo_Event::enable($esmc);
Kargo_Event::dispatchLoop();
Two random code snippets. PHP looks quite different nowadays.But, is it ready for Enterprise environments?
13
![Page 15: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/15.jpg)
Zend Framework
• Already offers several enterprise grade features, principles and practices for web development
• Has roadmap for much more. Highly active community that you can plan with.
• Could be foundation to take PHP on the market for general purpose application development à la Java, .Net, C++.
Read more at: http://framework.zend.com/about/overview14
![Page 16: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/16.jpg)
Zend Framework
• Already offers several enterprise grade features, principles and practices for web development
• Has roadmap for much more. Highly active community that you can plan with.
• Could be foundation to take PHP on the market for general purpose application development à la Java, .Net, C++.
Read more at: http://framework.zend.com/about/overview
How to address
with PHP?
14
![Page 17: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/17.jpg)
Considerations for building your architecture using ZF/PHP
1. Identify architectural layers of your environment
• Use PHP “traditionally” on the front end
• Consider using PHP-CLI for back-end services
2. Maintain your own class framework
• Adapt from ZF: best practices, coding standards, testing standards, etc.
• Really solid - no need to re-invent
• Be ready to patch ZF components, without waiting for next release
3. Manage your PHP configuration
• choose your extensions carefully
• optionally write your own extensions when needed
15
![Page 18: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/18.jpg)
More Considerations for building your architecture using ZF/PHP
4. Avoid using PEAR
• lack of consistency
• not as enterprise-friendly as ZF (license)
5. Avoid tying yourself to a particular system environment
• don’t let the environment dictate your application design
6. Avoid using tightly-coupled PHP frameworks (“CMSs”)
• Often very restrictive and hard to extend or integrate with other systems
16
![Page 19: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/19.jpg)
What’s missing?
• Multi-threading
• A more concrete life-cycle model for long running processes
• However: not a huge sacrifice
17
![Page 20: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/20.jpg)
Kargo’s Mobile Application Platform
18
![Page 21: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/21.jpg)
Kargo’s Architecture: Logical Overview
Application Layer
Foun
datio
n C
lass
es
Service Layer
Mobile Web Applications
Public Web Services
Web Applications
Persistence Layer
Database Nodes
MessagingService
Billing Subsystem
Device Management
Reporting Engine
Shared FS
Digital Asset
Manager
19
![Page 22: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/22.jpg)
Kargo Framework
Karpet
Kellner
Kargo’s Architecture: Product Overview
Fever
Kamp
Kargo Platform
Kargo DAM
Zend Framework plus mobile specific Kargo class library. Basis for all other products
Feed-based mobile magazine application with community features. Abstracts mobile specifics.
Mobile downloadable content and application storefront application, with cross-carrier billing
Web-based mobile messaging application. Allows for editorial content and costumer interaction.
Mobile Messaging Application Server. Unified programming model, across all messaging protocols.
Digital Asset Management System. Offers a document-oriented database concept for content.
The core business logic application server. Handles subscriber management, device detection, reporting, ad serving, etc. All front-end applications use this as their back-end.
20
![Page 23: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/23.jpg)
The Kargo Framework
• Kargo_Daemon - toolkit for forking, shared objects, IPC, etc.
• Kargo_Dam - wrapper classes for our digital asset management system
• Kargo_Db - additions to Zend_Db_Adapter, supporting fail-over and load-balancing.
• Kargo_Event - wrappers for our libevent extension for asynchronous socket programming.
• Kargo_Mime - a full and flexible MIME implementation to use beyond Mail.
• Kargo_Mm7 - a full MM7 6.8.0 protocol implementation.
• Kargo_Platform - controller plug-ins for interaction with platform services
• Kargo_Service - a set of Zend_Service style third-party web-service wrappers for our partners.
• Kargo_Smpp - implementation for OpenMarket, SinglePoint, mBlox and Standard SMPP v3.4.
• Kargo_WebDav - a webdav implementation
Zend Framework offers a lot already, but here is what we had to do ourselves:
21
![Page 24: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/24.jpg)
Example: Approach for the Mobile Web Architecture
• Problem: Classical web server models are sub-optimal for a lot of new applications.
• Usually solved with lots of “workarounds”, mostly incorporating caching techniques on many levels.
• Solution: Cleanly decouple front-end logic from core services and let the back-end be a stateful application.
• This is common is Java-based architectures, but never seen in pure PHP.
22
![Page 25: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/25.jpg)
Apache/PHP5 node 1
Example: Mobile Web Architecture
Karpet Instance
Apache/PHP5 node 2
Karpet Instance
...
Backend Node 1
Platform ServerPHP-CLI
ext/libevent
Backend Node 2
Platform ServerPHP-CLI
ext/libevent
Backend Node 3
Platform ServerPHP-CLI
ext/libevent
...
Zend_XmlRpc
Platform server is a stateful application using asynchronous http handling
23
![Page 26: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/26.jpg)
What’s going on (simplified)
Karpet Instance
Platform ServerPHP-CLI
1: first request
2: start session (headers)
return: device, user, carrier, etc.
5: sign up [sends text message to user]
Message ServerPHP-CLI
6: sendSMS()
3: write session
4: another request
...
...
24
![Page 27: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/27.jpg)
How it worksPlatform Server (simplified)
PHP-CLI
Kargo’s libevent PHP extension
OS Kernel notification layer (KQueue, epoll, etc)
class PlatformServer implements Kargo_Event_Http_Handler{
private $_rpc_server;...public function __construct() {// 1) setup db connection// 2) setup instance of Zend_XmlRpc_Server
and add the service classes}
public function handleRequest(Kargo_Event_Http_Request $r) {$request = new Kargo_XmlRpc_Request_Event($r);$this->_rpc_server->setRequest($request);return $this->server->handle();}}
Kargo_Event::init();
$server = new Kargo_Event_Http_Server($options, new PlatformServer);
$server->enable();
Kargo_Event::dispatch();
1. Setup Db, logger, etc. only on startup
2. Start Http server with it’s socket being monitored by the underlying
event notification system
3. On an incoming http request, the handleRequest callback is triggered,
serving the xml rpc request
Now we can keep our back-end
services running stateful
25
![Page 28: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/28.jpg)
Performance
• Baseline: Apache/mod_php5, pre-fork, no opcode cache
• Setup: PHP 5.2.6 on Macbook Pro/OS X (KQueue) with libevent 1.4.5 and Zend Framework 1.5
• Concurrency level: 50 requests
• Apache: Mean requests per second: 8.76
• Kargo (one process): Mean requests per second: 450.82
26
![Page 29: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/29.jpg)
Pros
• Incredible speedup
• Low CPU and memory utilization
• Surprisingly stable (runs for months now under heavy loads)
• No need for memcached, opcode cache, db connections pooling, or similar techniques.
• Back-end applications are now stateful. Allows for lazy loading, better task scheduling, etc.
• Lot’s of database queries can be kept in memory.
27
![Page 30: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/30.jpg)
Cons
• Developers have to be more aware of memory management
• Some people call it “abuse of PHP”, since it ignores the request based PHP execution cycle.
• Garbage collection a request tear-down is not called.
• Doesn’t work well with Zend_Controller_Front, because of extensive cyclic referencing (memory leaks)
28
![Page 31: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/31.jpg)
However
• Current server does not leak memory.
• Near Future: PHP 5.3 adds control over the garbage collector, which adds additional support for this scenario.
29
![Page 32: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/32.jpg)
Conclusions• Use of Zend Framework and it’s principles opens
paths into solid software architectures.
• Using PHP as a general purpose programming language has shown to be surprisingly fast and robust in a production environment.
• Kargo has successfully replaced Java-typical application servers with PHP, leaving a pure single choice of technology across all tiers.
• Kargo has build an enterprise-grade architecture, simple and flexible enough to react to the complex requirement in the mobile domain.
30
![Page 33: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/33.jpg)
/dev/random
• How about building an app server which passes Zend_Controller_Request objects to a pool of worked?
• How about a restricted ZF app server similar to Google App Engine, running on Amazon EC2 ?
31
![Page 34: Using PHP to Build a Mobile Internet Platform - Zend the PHP … · · 2008-10-17Using PHP to Build a Mobile Internet Platform ... • rapid development ... Identify architectural](https://reader036.vdocuments.mx/reader036/viewer/2022062600/5ae567547f8b9a7b218facc3/html5/thumbnails/34.jpg)
Thank You!
text “FH” to 99799
32