 {"id":212,"date":"2010-05-17T23:47:23","date_gmt":"2010-05-18T04:47:23","guid":{"rendered":"http:\/\/www.networkjack.info\/blog\/?p=212"},"modified":"2010-05-17T23:47:23","modified_gmt":"2010-05-18T04:47:23","slug":"the-great-leap-beyond-one-creating-scalable-php-web-applications","status":"publish","type":"post","link":"http:\/\/www.networkjack.info\/blog\/2010\/05\/17\/the-great-leap-beyond-one-creating-scalable-php-web-applications\/","title":{"rendered":"The Great Leap Beyond One &#8211; Creating Scalable PHP Web Applications"},"content":{"rendered":"<p>I gave a presentation to the <a title=\"Dallas PHP User group\" href=\"http:\/\/www.dallasphp.org\/\" target=\"_blank\">Dallas PHP<\/a> user group on May 11, 2010 on Creating Scalable PHP Web Applications.<\/p>\n<p>Download the <a title=\"Great Leap Beyond One\" href=\"\/files\/GreatLeapBeyondOne.pdf\">presentation<\/a> in PDF.<\/p>\n<p>Here is a basic outline:<\/p>\n<ul>\n<li>Introduction\n<ul>\n<li>Traditional Single Server and Dedicated DB-2 Server data flows.<\/li>\n<li>What does it mean to be Scalable, Available and Redundant?<\/li>\n<\/ul>\n<\/li>\n<li>Planning your Delivery Architecture.\n<ul>\n<li>Delivery Resource Types &#8211; html\/image\/pdf\/email\/rss<\/li>\n<li>URL types and origins for main text\/html, static images, user generated media<\/li>\n<\/ul>\n<\/li>\n<li>Delivery Architecture Components\n<ul>\n<li>Web Servers<\/li>\n<li>Database Systems<\/li>\n<li>Load Balancers<\/li>\n<li>Caching systems<\/li>\n<li>PHP Application Code<\/li>\n<\/ul>\n<\/li>\n<li>Web Server systems\n<ul>\n<li>Make fast and agile and identical<\/li>\n<li>Key concept: Web systems must be thought of as being Disposable.<\/li>\n<li>Storage of source and non-source delivery resources<\/li>\n<li>Deployment of web servers &#8211; OS\/PHP Load, Code Deployment\/Updates<\/li>\n<\/ul>\n<\/li>\n<li>Database systems\n<ul>\n<li>Hardest to Scale, throw money at this problem<\/li>\n<li>Replication and caching layers can extend life\/performance of primary database.<\/li>\n<li>Make a plan to deal with Primary Failure &#8211; what in site will\/won&#8217;t work.<\/li>\n<li>Make a plan to deal with Primary Recovery<\/li>\n<li>TEST THAT PLAN<\/li>\n<li>Redundant MySQL Overview<\/li>\n<li>Caching Layers Overview<\/li>\n<\/ul>\n<\/li>\n<li>Load Balancers\n<ul>\n<li>Hardware\/Software List<\/li>\n<li>Primary Features<\/li>\n<li>Secondary Features<\/li>\n<li>Example Service\/Content rule Pseudo-Config<\/li>\n<\/ul>\n<\/li>\n<li>PHP Component Code changes\n<ul>\n<li>Sessions\n<ul>\n<li>Custom Session Data Handler<\/li>\n<li>Basics and Gotchas<\/li>\n<li>Example Session SQL Table<\/li>\n<\/ul>\n<\/li>\n<li>Non-Source File &amp; Data Storage\n<ul>\n<li>Uploaded images\/documents (avatars\/photos)<\/li>\n<li>System generated files (chart images for emails)<\/li>\n<li>System Generated Data (calculated results data)<\/li>\n<li>Data pulled from external system (RSS feed cache)<\/li>\n<li>Store into shared system accessible by all front-ends<\/li>\n<li>Admin system for forced pushes\/cleanouts. Monitoring.<\/li>\n<\/ul>\n<\/li>\n<li>Resource Delivery<\/li>\n<\/ul>\n<ul>\n<li>\n<ul>\n<li>Simple and complex examples.<\/li>\n<li>Code for abstracting URL generation &#8211; App::URL(&#8216;logo.jpg&#8217;, &#8216;branded&#8217;)<\/li>\n<li>Example of complex URL structures.<\/li>\n<li>Delivery issues with CSS and JavaScript<\/li>\n<li>Serving SSL protected content with references to external static media; needs SSL too!<\/li>\n<li>Using ErrorDocument to create a Just-In-Time delivery system to media servers.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Periodic Process Execution\n<ul>\n<li>Using Queues and Semaphores to control execution.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>I gave a presentation to the Dallas PHP user group on May 11, 2010 on Creating Scalable PHP Web Applications. Download the presentation in PDF.&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"http:\/\/www.networkjack.info\/blog\/2010\/05\/17\/the-great-leap-beyond-one-creating-scalable-php-web-applications\/\">Continue reading<span class=\"screen-reader-text\">The Great Leap Beyond One &#8211; Creating Scalable PHP Web Applications<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,12,22,20,38,8,13],"tags":[],"class_list":["post-212","post","type-post","status-publish","format-standard","hentry","category-content-networking","category-database","category-hardware","category-mysql","category-php","category-servers","category-web-app-development","entry"],"_links":{"self":[{"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/posts\/212"}],"collection":[{"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/comments?post=212"}],"version-history":[{"count":2,"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/posts\/212\/revisions"}],"predecessor-version":[{"id":214,"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/posts\/212\/revisions\/214"}],"wp:attachment":[{"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/media?parent=212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/categories?post=212"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.networkjack.info\/blog\/wp-json\/wp\/v2\/tags?post=212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}