Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Do you queue

on

  • 5,333 views

 

Statistics

Views

Total Views
5,333
Views on SlideShare
5,331
Embed Views
2

Actions

Likes
7
Downloads
75
Comments
0

2 Embeds 2

https://twimg0-a.akamaihd.net 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Do you queue Do you queue Presentation Transcript

  • Do you queue? Characteristics of scalability
    Kevin Schroeder
    Technology Evangelist
    Zend Technologies
  • Kevin Schroeder
    Technology Evangelist for Zend
    Programmer
    Sys Admin
    Author
    IBM i Programmer’s Guide to PHP
    You want to do WHAT with PHP?
    Race Ferraris on the weekend
    My Honda has a dismal win record
    About me
  • I blog at eschrade.com
    Follow us!
    (good things will happen to you)
    Zend Technologies
    http://twitter.com/zend
    http://twitter.com/kpschrade (me!)
  • Could your PHP apps benefit from being able to process data or execute asynchronously?
    Twtpoll results
  • Performance
    Execute logic apart from the main request (asynchronicity)
    Scalability
    The ability to handle non-immediate logic as resources are available
    Why would you want to queue?
  • People often say that performance and scalability are two completely different things.
    This is inaccurate
    Performance is the speed by which a request is executed
    Scalability is the ability of that request to maintain its performance as load/infrastructure increases
    Performance & Scalability
  • DON’T!!
    You are not Facebook
    You probably won’t be
    Don’t overcomplicate your problems by trying to be
    So how do you scale to Facebook size?
  • Typical anatomy of a PHP Application
    Bad for scala-bility!
    Presentation
    Application Control
    Database Access
    Business Logic
    Presentation
    Application Control
    Business Logic
    Presentation
    | 8
  • Good for Scalability
    Presentation
    Something.phtml
    Something.phtml
    Something.phtml
    Something.phtml
    Something.phtml
    Something.phtml
    Something.phtml
    Something.phtml
    Application Control
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Business Logic
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Database Access
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    Something.php
    | 9
    | 3-Nov-10
  • Defined tasks
    Loose coupling
    Resource discovery
    What helps make software scalable?
  • The Golden Rule of Scalability
    “It can probably wait”
  • Pre-caching data
    Data analysis
    Data processing
    Pre-calculating (preparing data for the next request)
    Data is “out of date” once it leaves the web server
    Immediacy is seldom necessary
    Asynchronous execution uses
  • A sledgehammer can hit a machine
    Scalability and High Availability are yin and yang
    A site that can’t keep running is not scalable
    A site that can’t scale will fail (if it gets really popular)
    Machines can be added and removed at will
    Not “cloudy” necessarily
    No single point of failure
    Data exists in at least two, preferably at least three, places
    Characteristics
  • Waste disk space
    Control usage (don’t let users do anything they want)
    Pre-calculate as much as possible
    Calculate and cache/store
    Don’t scan large amounts of data
    Keep data processing off the front end servers
    Don’t just cache
    Don’t let it substitute for thought
    Cache hit rates can be meaningless if you have hundreds of cache hits for a request
    Considerations
    • Build a deployment mechanism with NO hardcoded values like directory or resource locations
    • Make as much as possible configurable/discoverable
    Decouple/Partition
    Don’t tie everything (relationships and such) into the database
    Use queues/messaging
    Stomp interfaces are really good for PHP – Can also use Java Bridge
    Zend_Queue has several interfaces
    Try to use stateless interfaces
    (polling is more scalable than idle connections)
    Considerations
  • Use Cron /w PHP CLI (probably shouldn’t do this)
    Use Gearman
    Use home-grown (don’t do this)
    Use pcntl_fork() (NEVER do this)
    Use Zend Server Job Queue
    Options
  • Your only real options
    Very cloud friendly
    * I am not an expert on Gearman. Corrections will be taken in the spirit that they are given.
    For obvious reasons, I will focus on Zend Server
  • Schedule jobs in the future
    Set recurring jobs
    Execute immediately, as resources are available (my fav)
    Utilize ZendJobQueue()
    Using the Zend Server Job Queue
  • Job Queue Architecture – Elastic Backend
    Web Server /w JQ
    Web Server
    Users!
    Web Server /w JQ
    Web Server
    Load Balancer
    Web Server /w JQ
    Web Server
    Pros
    Scale the backend as necessary
    Default (easy) mechanism
    Cons
    Getting the job status requires using a DB
  • Job Queue Architecture – Elastic Frontend
    Web Server
    Web Server /w JQ
    Users!
    Web Server
    Web Server /w JQ
    Load Balancer
    Web Server
    Web Server /w JQ
    Pros
    Easy to communicate with the Job Queue server handling the job
    Cons
    Requires you to build your own interface
  • Create a task-handling controller
    Create an abstract task class
    Understands the Job Queue
    Self contained
    If Elastic Backend: connects to localhost
    If Elastic Frontend: connects to load balancer (my preferred), load balanced JQ servers manage themselves
    Execute the task, have it serialize itself and send it to send to the task handler
    Kevin’s favorite way to implement it
  • Q_Manager
    Handles connecting to the queue and passing results back and forth
    Q_JobAbstract
    Abstract class that a job would be based off of
    Q_Response
    The response from the manager when a job is queued. Contains the server name and job number
    Job_Scandir
    The actual job that scans the directory
    Job_ScandirResult
    An object that represents the data found
    Classes involved in the demo
  • Create job and set data
    Execute job
    Job passes itself to the queue manager
    Manager serializes job
    Manager uses HTTP call through a load balancer to queue the job
    The queue on the other end returns the job id and server name
    Job ID and server name is passed to the client
    Client polls the manager to get a completed job
    When the job is returned pass the serialized version of the executed job
    Execution Flow
  • Let’s write some code
    (no I’m not copping out with slides. We’re all told to show our work in grade scool)
  • Follow us!
    Zend Technologies
    http://twitter.com/zend
    http://twitter.com/kpschrade (me!)
  • Get this information and all the examples at eschrade.com…