WordPress & Cloud Computing:
Scalability and High Availability
            Gabriele Mittica & Walter Dal Mut




          WORDCAMP BOLOGNA - 9 FEB 2013
           @WORDCAMPBOLOGNA # WPCAMPBO13
CLOUD COMPUTING




Cloud computing refers to the delivery of computing and storage
capacity as a service to a heterogeneous community of end-
recipients.


Cloud computing entrusts services with a user's data, software
and computation over a network.


It has considerable overlap with software as a service (SaaS).




 WORDCAMP BOLOGNA - 9 FEB 2013                @WORDCAMPBOLOGNA # WPCAMPBO13
CLOUD COMPUTING




          Is the cloud just a fad?
1.        No.
          It’s a rational evolution of IT architecture towards a more efficient way
          of managing resources and designing Web apps efficiently.


          Is the cloud cheap?
2.        No.
          The cloud allows you to pay the right for each service involved.


         Is the cloud just a scalable vps?

3.       No.
         The cloud is a set of services designed to meet specific computing
         needs.


 WORDCAMP BOLOGNA - 9 FEB 2013                               @WORDCAMPBOLOGNA # WPCAMPBO13
CLOUD COMPUTING




   - access to unlimited resources

   - scalable architecture

   - no hardware dependency

   - pay as you go

   - geographical redundancy

   - high availability

   - increased competition for start-up




 WORDCAMP BOLOGNA - 9 FEB 2013            @WORDCAMPBOLOGNA # WPCAMPBO13
AMAZON WEB SERVICES




WORDCAMP BOLOGNA - 9 FEBBRAIO 2013   @WORDCAMPBOLOGNA # WPCAMPBO13
AMAZON WEB SERVICES - SIGNIN




 WORDCAMP BOLOGNA - 9 FEB 2013   @WORDCAMPBOLOGNA # WPCAMPBO13
AMAZON WEB SERVICES - CONSOLE




WORDCAMP BOLOGNA - 9 FEBBRAIO 2013   @WORDCAMPBOLOGNA # WPCAMPBO13
AMAZON WEB SERVICES - LINKS



   - Home page: http://aws.amazon.com/
   - About AWS: https://aws.amazon.com/what-is-aws/
   - All products: http://aws.amazon.com/products/
   - Dev area: http://aws.amazon.com/resources/
   - Documentation: http://aws.amazon.com/documentation/
   - SDK: http://aws.amazon.com/code/
   - Community: https://forums.aws.amazon.com/index.jspa
   - AWS Blog: http://aws.typepad.com/
   - Events: https://aws.amazon.com/about-aws/events/
   - Services Health Dashboard: http://status.aws.amazon.com/
   - Pricing Calculator: http://calculator.s3.amazonaws.com/calc5.html



 WORDCAMP BOLOGNA - 9 FEB 2013                                   @WORDCAMPBOLOGNA # WPCAMPBO13
WORDPRESS ON
                      AMAZON WEB SERVICES




WORDCAMP BOLOGNA - 9 FEB 2013         @WORDCAMPBOLOGNA # WPCAMPBO13
WORDPRESS ON AWS




 WORDCAMP BOLOGNA - 9 FEB 2013   @WORDCAMPBOLOGNA # WPCAMPBO13
WORDPRESS ON AWS




 WORDCAMP BOLOGNA - 9 FEB 2013   @WORDCAMPBOLOGNA # WPCAMPBO13
WORDPRESS ON AWS




 WORDCAMP BOLOGNA - 9 FEB 2013   @WORDCAMPBOLOGNA # WPCAMPBO13
BOOSTING WORDPRESS WITH:
             S3, CF, CLOUDSEARCH, SES




WORDCAMP BOLOGNA - 9 FEB 2013   @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – S3 & CLOUDFRONT




 WORDCAMP BOLOGNA - 9 FEB 2013      @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – S3 & CLOUDFRONT


 Download credentials:




 WORDCAMP BOLOGNA - 9 FEB 2013      @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – S3 & CLOUDFRONT


 Grant full access to S3, CloudSearch, SES:




 WORDCAMP BOLOGNA - 9 FEB 2013                @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – S3 & CLOUDFRONT



        Tipical use of WordPress: html and media files are provided by apache
                                    (http request):




 WORDCAMP BOLOGNA - 9 FEB 2013                               @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – S3 & CLOUDFRONT



   Uploads your wordpress             Services involved:
   attachements to S3 with an         Simple Storage Service (S3):
   option CloudFront distribution.    S3 provides a simple web services
                                      interface that can be used to store and
   This WordPress plugin allows you   retrieve any amount of data, at any
   to use Amazon's Simple Storage     time, from anywhere on the web.
   Service to host your media for     It provides 99.999999999% durability.
   your WordPress powered blog
   with an optional CloudFront        CloudFront:
   distribution.                      CF can be used to deliver your entire
                                      website, including dynamic, static and
                                      streaming content using a global
   Plugin homepage:
                                      network of edge locations.
   http://wordpress.org/extend/plug   Over 30 edge locations.
   ins/tantan-s3-cloudfront/




 WORDCAMP BOLOGNA - 9 FEB 2013                          @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – S3 & CLOUDFRONT



      Create a new bucket in S3 console:




 WORDCAMP BOLOGNA - 9 FEB 2013             @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS



      Edit the distribution setting the bucket as origin!




 WORDCAMP BOLOGNA - 9 FEB 2013                              @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – S3 & CLOUDFRONT



      Download, activate and customize the plugin:




 WORDCAMP BOLOGNA - 9 FEB 2013                       @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – S3 & CLOUDFRONT



      Static files hosted on S3 and served by CloudFront:




 WORDCAMP BOLOGNA - 9 FEB 2013                              @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – S3 & CLOUDFRONT



         Thanks to S3 and CloudFront, you can easily send all your media files
                        through the content Delivery Network




 WORDCAMP BOLOGNA - 9 FEB 2013                                 @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS - CLOUDSEARCH



   Create a scalable search engine    Services involved:
   for your content published on
   WordPress.

   This WordPress plugin allows you   CloudSearch:
   to use Amazon's CloudSearch to     Amazon CloudSearch is a fully-managed
   provide a smart search engine to   search service in the cloud that allows
   your final users.                  customers to easily integrate fast and
                                      highly scalable search functionality into
                                      their applications
   Plugin homepage:
                                      It supports over 8 millions docs.
   http://wordpress.org/extend/plug
   ins/lift-search/




 WORDCAMP BOLOGNA - 9 FEB 2013                             @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS - CLOUDSEARCH




 Starting a new engine server
 with CloudSearch:




 WORDCAMP BOLOGNA - 9 FEB 2013   @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS - CLOUDSEARCH




                   Documentation at http://getliftsearch.com/documentation/




 WORDCAMP BOLOGNA - 9 FEB 2013                                     @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – SIMPLE EMAIL SERVICE




   WP-SES is a plugin that redirects   Services involved:
   all outgoing WordPress emails
   through Amazon Simple Email
   Service (SES) for maximum email     Simple Email Service (SES):
   delivrability.                      SES is a highly scalable and cost-
                                       effective bulk and transactional email-
   You can download this plugin on     sending service for businesses and
   official website http://wp-         developers
   ses.com/                            Only $0.10 per thousand.




 WORDCAMP BOLOGNA - 9 FEB 2013                              @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – SIMPLE EMAIL SERVICE




 WORDCAMP BOLOGNA - 9 FEB 2013           @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – SIMPLE EMAIL SERVICE



   First, install like any other plugin:
   - Upload and activate the plugin
   - The setting are in settings / WP SES
   Then, proceed to the settings:
   - Fill the email address and name to use as the sender for all emails
   - Fill in Amazon API credentials
   - Save changes (Important !)
   - Ask to add the email as a confirmed sender
   - Click on the link you got by email from Amazon SES
   - Refresh the plugin, send a test email
   - If ok, ask Amazon to go out of sandbox into production mode
   - Once in production mode, you can use the top button to activate the plugin.


 WORDCAMP BOLOGNA - 9 FEB 2013                                    @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS – SIMPLE EMAIL SERVICE




                                 All emails sent by Simple Email Service:




 WORDCAMP BOLOGNA - 9 FEB 2013                                              @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS



                                 BEFORE:




 WORDCAMP BOLOGNA - 9 FEB 2013             @WORDCAMPBOLOGNA # WPCAMPBO13
PLUGINS FOR AWS



                                 AFTER:




 WORDCAMP BOLOGNA - 9 FEB 2013            @WORDCAMPBOLOGNA # WPCAMPBO13
SCALABLE WORDPRESS
 HOW TO MAKE WORDPRESS SCALABLE ON THE CLOUD




WORDCAMP BOLOGNA - 9 FEB 2013   @WORDCAMPBOLOGNA # WPCAMPBO13
A TYPICAL SCALABLE INFRASTRUCTURE




 WORDCAMP BOLOGNA - 9 FEB 2013      @WORDCAMPBOLOGNA # WPCAMPBO13
RDBMS – START FROM THE END




  •      Computation
         •     LB listens for incoming connections and route requests to
               web applications
               •    Web applications use RDBMS to get stored information
               •    Sessions and performance improvements are handled by
                    Memcached instances.
  •      Static resources distribution
         •     CDN – Content Distribution Network
               •    A globally distributed endpoints
               •    Serve static files (also dynamic if needed)
               •    Native connections with S3 (Simple Storage Service)
         •     It handles all static resources, in this way our web servers
               have to handle only dynamic calls



 WORDCAMP BOLOGNA - 9 FEB 2013                                     @WORDCAMPBOLOGNA # WPCAMPBO13
RDBMS – START FROM THE END




       • MySQL
              •     RDBMS
                    • Relational Database Management System
              •     How it scales?
                    • Read Replica
              •     Pros (In terms of scalability)
                    • Simple to do
                    • Simple management
              •     Cons
                    • You can scale only read operations
                           •     The master instance has to handle all write operations
                                 (bottleneck on writes)



 WORDCAMP BOLOGNA - 9 FEB 2013                                           @WORDCAMPBOLOGNA # WPCAMPBO13
READ REPLICA ON AWS



   • From RDS service tab on the AWS console right
     click on a running instance and create a Read
     Replica DB Instance
   • Configure the read-replica and create it through
     the graphical console.




 WORDCAMP BOLOGNA - 9 FEB 2013                          @WORDCAMPBOLOGNA # WPCAMPBO13
IN ORDER TO PROMOTE A SLAVE TO MASTER?




      Similar to master creation
           • Select a read-replica
           • Right-click and promote Read Replica




      Discover more on RDS:
           • http://aws.typepad.com/aws/amazon-rds/



 WORDCAMP BOLOGNA - 9 FEB 2013                        @WORDCAMPBOLOGNA # WPCAMPBO13
NOW HAVE A LOOK ON WEB INSTANCES




 • All web instances scales out
   instead scales up
       • Scale out? What it means?
             • Instead increase VM performances
               (more RAM, more CPU, more IO etc.
               etc.) open new VM and serve requests
               from these instances
             • Load balancer route incoming
               connections to VMs using common
               algorithms
                    • Round robin techniques
                    • Based on VMs average load




 WORDCAMP BOLOGNA - 9 FEB 2013                        @WORDCAMPBOLOGNA # WPCAMPBO13
PROBLEMS… WE NEVER TALK ABOUT…




  •      Session management
         •     If we open and close servers runtime we have to maintain
               PHP sessions in order to handle user logins and other
               features related to sessions
  •      Database connections
         •     All MySQL connectors handle just one connection… No
               “x” RDB connections a the same time…
  •      Software and Plugins maintenance
         •     How can we have the same version of WordPress and WP
               Plugins if VMs starts and stops continuously? How can we
               handle software updates?
  •      What about logs? How can we centralize the log
         management?


 WORDCAMP BOLOGNA - 9 FEB 2013                            @WORDCAMPBOLOGNA # WPCAMPBO13
DELEGATE SESSION MANAGEMENT TO MEMCACHE




     • Memcache(d) servers are not only useful
       distributed in RAM caching servers but also
       they can manage PHP session for us.
            •     Memcache infrastructure is simple to create and
                  maintain
                  • Elasticache Service of AWS
            •     No software modification
                  • We have just to configure the PHP interpreter
                    (compile with memcache/memcached support)

     session.save_handler = memcache
     session.save_path = "tcp://1.cache.group.domain.tld:11211"




 WORDCAMP BOLOGNA - 9 FEB 2013                           @WORDCAMPBOLOGNA # WPCAMPBO13
DELEGATE CONNECTIONS TO MYSQL NATIVE DRIVER




    • MySQL native driver?
          •      Available from PHP >=5.3
          •      Compile PHP with mysqlnd support
                 • --with-mysqli=mysqlnd --with-pdo=mysqlnd --with-
                   mysql=mysqlnd
          •      WARN mysql extension is deprecated as of PHP
                 5.5.0

    • Delegate to “mysqlnd_ms” the master/slave
      management
          •      http://www.php.net/manual/en/book.mysqlnd-
                 ms.php


 WORDCAMP BOLOGNA - 9 FEB 2013                          @WORDCAMPBOLOGNA # WPCAMPBO13
DELEGATE CONNECTIONS TO MYSQL NATIVE DRIVER




                                           The simple JSON configuration is divided
                                           in two main section
 {
     "myapp": {
         "master": {                       • Master
             "master_0": {                 • Slaves
                 "host": "localhost",
                 "port": "3306"
             }                             “myapp” is the hostname that we use
         },
         "slave": {
                                           instead the real mysql host address.
             "slave_0": {
                 "host": "192.168.2.27",   Eg.
                 "port": "3306"
             }                             •     mysql_connect(“myapp”, “user”,
         }                                       “passwd”);
     }                                     •     new Mysqli(“myapp”, “user”,
 }                                               “passwd”);
                                           •     new
                                                 PDO(“mysql:dbname=testdb;host=my
                                                 app”);




 WORDCAMP BOLOGNA - 9 FEB 2013                              @WORDCAMPBOLOGNA # WPCAMPBO13
START TALKING ABOUT ELASTIC COMPUTE CLOUD




   •      ELB – Elastic Load Balancer
          •     Distributed load balancer on AWS regions (eu-west-1, 2, 3 you
                have to select in how many region you are available)
          •     Watch EC2 status thanks to a ping strategy
                •    Page check every x minutes/seconds
          •     Turn on/off EC2 instances automatically thanks to alarms
                (CloudWatch raise alarms)
                •    Receive Alarms from CloudWatch and engage scale operations
                •    You can raise CPU alarms, Network Alarms, VM status alarms and many
                     others in order to increase or decrease the actual number of EC2
          •     Scale strategy is not simple and you have to understand how your
                application works
                •    CPU is the simplest way but remember that the bandwidth is limited by
                     network interfaces and bottlenecks can obfuscate the CPU alarm and your
                     application stucks in weird and strange situations.




 WORDCAMP BOLOGNA - 9 FEB 2013                                                @WORDCAMPBOLOGNA # WPCAMPBO13
AUTOSCALING WITH ELB + EC2 + CLOUDWATCH




   •      If servers start and stops continuously, we have to
          find solutions to stay fresh and updated also on
          software
          •     When a server starts, it has to create a valid
                environment in order to provides web pages.
                Strategies?
                •    Compile and bundle all softwares in one instance image
                       •    It is very simple but all software becomes old very quickly and
                            when you have to release an update you have to compile a new
                            image and update all load balancers configurations. It is a long and
                            complex operation
                •    Use EC2_USER_DATA feature provided by AWS
                       •    You can run a shell script when your instances bootstraps. It is more
                            flexible because you can create a skeleton (PHP + libraries) and
                            download all software runtime during the boot operation




 WORDCAMP BOLOGNA - 9 FEB 2013                                                  @WORDCAMPBOLOGNA # WPCAMPBO13
THE PROBLEM WITH SOFTWARE MANAGEMENT




 Use SVN (Subversion) to download the latest version of
 WordPress
       Probably is not a good idea use the “trunk” but you can use tags in order to stay
       aligned in all VMs
       svn checkout http://core.svn.wordpress.org/tags/3.5.1/ mywebsite
             http://codex.wordpress.org/Installing/Updating_WordPress_with_Su
             bversion
 Use SVN externals to download your plugins
       cd mywebsite/wp-content/plugins/
       svn propset svn:externals akismet
       http://plugins.svn.wordpress.org/akismet/tags/2.5.7/
       svn up

 Create/Download your WordPress configuration file
 during VM bootstrap


 WORDCAMP BOLOGNA - 9 FEB 2013                                     @WORDCAMPBOLOGNA # WPCAMPBO13
HOW WE CAN DOWNLOAD WP AND PLUGINS?




       • If you ran 10 servers execute
         commands could be hard. You can use
         tools to run command on a server list
              • Capistrano (Ruby)
                     • https://github.com/capistrano/capistrano
              • Fabric (Python)
                     • https://github.com/fabric/fabric
                     • Use CLOTH for AWS EC2 instances
                           • https://github.com/garethr/cloth



 WORDCAMP BOLOGNA - 9 FEB 2013                                  @WORDCAMPBOLOGNA # WPCAMPBO13
HOW TO UPDATE CONFIGURATIONS RUNTIME?


#! /usr/bin/env python
from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm     EC2 instances are dynamic with don’t know
                                               address, for that reason we can use tagging
from cloth.tasks import *                      system to execute commands on a group of
                                               instances
env.user = "root"
env.directory = '/mnt/wordpress'                     fab nodes:"^production.*" tail
env.key_filename = ['/home/walter/Amazon/wp-
cms.pem']                                      Execute the “tail” command on all instances
                                               with a name that starts with “production.”
@task
def reload():                                  Eg.
  "Reload Apache configuration"                       •   production.web-1
  run('/etc/init.d/apache2 reload')                   •   production.log
                                                      •   production.mongodb
@task
def tail():
  "Tail Apache logs"
  run('tail /var/log/syslog')




 WORDCAMP BOLOGNA - 9 FEB 2013                                    @WORDCAMPBOLOGNA # WPCAMPBO13
EXAMPLE OF FABRIC – USAGE WITH CLOTH




   •     We create and destroy instances thanks to alarms but
         when we close an instance we lose immediately all
         apache logs (or equivalent)
   •     How we can manage logs?
         •      The simplest way is to use Rsyslog clusters
   •     Rsyslog is an opensource software that forwarding log
         messages in an IP network
   •     Rsyslog implement the basic syslog protol
         •      That means that we can configure apache logs to “syslog”
                instead using normal text files.
         •      In this way we can collect all logs in one group of VM and
                work on these files later thanks to other technologies.




 WORDCAMP BOLOGNA - 9 FEB 2013                                @WORDCAMPBOLOGNA # WPCAMPBO13
ALSO LOG MANAGEMENT IS NOT SIMPLE…




   • Collecting logs is not the latest operation
     because you have to analyse and reduce
     information
         •      Move logs to S3 bucket – Time based
         •      Analyze logs with Hadoop
                • Map Reduce on the cloud with Elastic Map Reduce service
                  (EMR)
         •      Use script languages on top of Hadoop in order to
                simply the log analysis
                • HIVE – Data Warehouse infrastructure (data
                  summarization)
                • Pig – High level platform for creating MapReduce program



 WORDCAMP BOLOGNA - 9 FEB 2013                            @WORDCAMPBOLOGNA # WPCAMPBO13
The end? Really you want the Red pill?




find out just how deep the rabbit hole
                 goes
RELATORI




                              Gabriele Mittica
                              Web: www.gabrielemittica.com

                              Twitter: @gabrielemittica




                              Walter Dal Mut
                              Web: www.walterdalmut.com

                              Twitter: @walterdalmut




WORDCAMP BOLOGNA - 9 FEBBRAIO 2013                           @WORDCAMPBOLOGNA # WPCAMPBO13

Cloud Computing & WordPress - Scalability and High Availability - wpcampbo13

  • 1.
    WordPress & CloudComputing: Scalability and High Availability Gabriele Mittica & Walter Dal Mut WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 2.
    CLOUD COMPUTING Cloud computingrefers to the delivery of computing and storage capacity as a service to a heterogeneous community of end- recipients. Cloud computing entrusts services with a user's data, software and computation over a network. It has considerable overlap with software as a service (SaaS). WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 3.
    CLOUD COMPUTING Is the cloud just a fad? 1. No. It’s a rational evolution of IT architecture towards a more efficient way of managing resources and designing Web apps efficiently. Is the cloud cheap? 2. No. The cloud allows you to pay the right for each service involved. Is the cloud just a scalable vps? 3. No. The cloud is a set of services designed to meet specific computing needs. WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 4.
    CLOUD COMPUTING - access to unlimited resources - scalable architecture - no hardware dependency - pay as you go - geographical redundancy - high availability - increased competition for start-up WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 5.
    AMAZON WEB SERVICES WORDCAMPBOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 6.
    AMAZON WEB SERVICES- SIGNIN WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 7.
    AMAZON WEB SERVICES- CONSOLE WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 8.
    AMAZON WEB SERVICES- LINKS - Home page: http://aws.amazon.com/ - About AWS: https://aws.amazon.com/what-is-aws/ - All products: http://aws.amazon.com/products/ - Dev area: http://aws.amazon.com/resources/ - Documentation: http://aws.amazon.com/documentation/ - SDK: http://aws.amazon.com/code/ - Community: https://forums.aws.amazon.com/index.jspa - AWS Blog: http://aws.typepad.com/ - Events: https://aws.amazon.com/about-aws/events/ - Services Health Dashboard: http://status.aws.amazon.com/ - Pricing Calculator: http://calculator.s3.amazonaws.com/calc5.html WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 9.
    WORDPRESS ON AMAZON WEB SERVICES WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 10.
    WORDPRESS ON AWS WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 11.
    WORDPRESS ON AWS WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 12.
    WORDPRESS ON AWS WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 13.
    BOOSTING WORDPRESS WITH: S3, CF, CLOUDSEARCH, SES WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 14.
    PLUGINS FOR AWS– S3 & CLOUDFRONT WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 15.
    PLUGINS FOR AWS– S3 & CLOUDFRONT Download credentials: WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 16.
    PLUGINS FOR AWS– S3 & CLOUDFRONT Grant full access to S3, CloudSearch, SES: WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 17.
    PLUGINS FOR AWS– S3 & CLOUDFRONT Tipical use of WordPress: html and media files are provided by apache (http request): WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 18.
    PLUGINS FOR AWS– S3 & CLOUDFRONT Uploads your wordpress Services involved: attachements to S3 with an Simple Storage Service (S3): option CloudFront distribution. S3 provides a simple web services interface that can be used to store and This WordPress plugin allows you retrieve any amount of data, at any to use Amazon's Simple Storage time, from anywhere on the web. Service to host your media for It provides 99.999999999% durability. your WordPress powered blog with an optional CloudFront CloudFront: distribution. CF can be used to deliver your entire website, including dynamic, static and streaming content using a global Plugin homepage: network of edge locations. http://wordpress.org/extend/plug Over 30 edge locations. ins/tantan-s3-cloudfront/ WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 19.
    PLUGINS FOR AWS– S3 & CLOUDFRONT Create a new bucket in S3 console: WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 20.
    PLUGINS FOR AWS Edit the distribution setting the bucket as origin! WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 21.
    PLUGINS FOR AWS– S3 & CLOUDFRONT Download, activate and customize the plugin: WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 22.
    PLUGINS FOR AWS– S3 & CLOUDFRONT Static files hosted on S3 and served by CloudFront: WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 23.
    PLUGINS FOR AWS– S3 & CLOUDFRONT Thanks to S3 and CloudFront, you can easily send all your media files through the content Delivery Network WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 24.
    PLUGINS FOR AWS- CLOUDSEARCH Create a scalable search engine Services involved: for your content published on WordPress. This WordPress plugin allows you CloudSearch: to use Amazon's CloudSearch to Amazon CloudSearch is a fully-managed provide a smart search engine to search service in the cloud that allows your final users. customers to easily integrate fast and highly scalable search functionality into their applications Plugin homepage: It supports over 8 millions docs. http://wordpress.org/extend/plug ins/lift-search/ WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 25.
    PLUGINS FOR AWS- CLOUDSEARCH Starting a new engine server with CloudSearch: WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 26.
    PLUGINS FOR AWS- CLOUDSEARCH Documentation at http://getliftsearch.com/documentation/ WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 27.
    PLUGINS FOR AWS– SIMPLE EMAIL SERVICE WP-SES is a plugin that redirects Services involved: all outgoing WordPress emails through Amazon Simple Email Service (SES) for maximum email Simple Email Service (SES): delivrability. SES is a highly scalable and cost- effective bulk and transactional email- You can download this plugin on sending service for businesses and official website http://wp- developers ses.com/ Only $0.10 per thousand. WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 28.
    PLUGINS FOR AWS– SIMPLE EMAIL SERVICE WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 29.
    PLUGINS FOR AWS– SIMPLE EMAIL SERVICE First, install like any other plugin: - Upload and activate the plugin - The setting are in settings / WP SES Then, proceed to the settings: - Fill the email address and name to use as the sender for all emails - Fill in Amazon API credentials - Save changes (Important !) - Ask to add the email as a confirmed sender - Click on the link you got by email from Amazon SES - Refresh the plugin, send a test email - If ok, ask Amazon to go out of sandbox into production mode - Once in production mode, you can use the top button to activate the plugin. WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 30.
    PLUGINS FOR AWS– SIMPLE EMAIL SERVICE All emails sent by Simple Email Service: WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 31.
    PLUGINS FOR AWS BEFORE: WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 32.
    PLUGINS FOR AWS AFTER: WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 33.
    SCALABLE WORDPRESS HOWTO MAKE WORDPRESS SCALABLE ON THE CLOUD WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 34.
    A TYPICAL SCALABLEINFRASTRUCTURE WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 35.
    RDBMS – STARTFROM THE END • Computation • LB listens for incoming connections and route requests to web applications • Web applications use RDBMS to get stored information • Sessions and performance improvements are handled by Memcached instances. • Static resources distribution • CDN – Content Distribution Network • A globally distributed endpoints • Serve static files (also dynamic if needed) • Native connections with S3 (Simple Storage Service) • It handles all static resources, in this way our web servers have to handle only dynamic calls WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 36.
    RDBMS – STARTFROM THE END • MySQL • RDBMS • Relational Database Management System • How it scales? • Read Replica • Pros (In terms of scalability) • Simple to do • Simple management • Cons • You can scale only read operations • The master instance has to handle all write operations (bottleneck on writes) WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 37.
    READ REPLICA ONAWS • From RDS service tab on the AWS console right click on a running instance and create a Read Replica DB Instance • Configure the read-replica and create it through the graphical console. WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 38.
    IN ORDER TOPROMOTE A SLAVE TO MASTER? Similar to master creation • Select a read-replica • Right-click and promote Read Replica Discover more on RDS: • http://aws.typepad.com/aws/amazon-rds/ WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 39.
    NOW HAVE ALOOK ON WEB INSTANCES • All web instances scales out instead scales up • Scale out? What it means? • Instead increase VM performances (more RAM, more CPU, more IO etc. etc.) open new VM and serve requests from these instances • Load balancer route incoming connections to VMs using common algorithms • Round robin techniques • Based on VMs average load WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 40.
    PROBLEMS… WE NEVERTALK ABOUT… • Session management • If we open and close servers runtime we have to maintain PHP sessions in order to handle user logins and other features related to sessions • Database connections • All MySQL connectors handle just one connection… No “x” RDB connections a the same time… • Software and Plugins maintenance • How can we have the same version of WordPress and WP Plugins if VMs starts and stops continuously? How can we handle software updates? • What about logs? How can we centralize the log management? WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 41.
    DELEGATE SESSION MANAGEMENTTO MEMCACHE • Memcache(d) servers are not only useful distributed in RAM caching servers but also they can manage PHP session for us. • Memcache infrastructure is simple to create and maintain • Elasticache Service of AWS • No software modification • We have just to configure the PHP interpreter (compile with memcache/memcached support) session.save_handler = memcache session.save_path = "tcp://1.cache.group.domain.tld:11211" WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 42.
    DELEGATE CONNECTIONS TOMYSQL NATIVE DRIVER • MySQL native driver? • Available from PHP >=5.3 • Compile PHP with mysqlnd support • --with-mysqli=mysqlnd --with-pdo=mysqlnd --with- mysql=mysqlnd • WARN mysql extension is deprecated as of PHP 5.5.0 • Delegate to “mysqlnd_ms” the master/slave management • http://www.php.net/manual/en/book.mysqlnd- ms.php WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 43.
    DELEGATE CONNECTIONS TOMYSQL NATIVE DRIVER The simple JSON configuration is divided in two main section { "myapp": { "master": { • Master "master_0": { • Slaves "host": "localhost", "port": "3306" } “myapp” is the hostname that we use }, "slave": { instead the real mysql host address. "slave_0": { "host": "192.168.2.27", Eg. "port": "3306" } • mysql_connect(“myapp”, “user”, } “passwd”); } • new Mysqli(“myapp”, “user”, } “passwd”); • new PDO(“mysql:dbname=testdb;host=my app”); WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 44.
    START TALKING ABOUTELASTIC COMPUTE CLOUD • ELB – Elastic Load Balancer • Distributed load balancer on AWS regions (eu-west-1, 2, 3 you have to select in how many region you are available) • Watch EC2 status thanks to a ping strategy • Page check every x minutes/seconds • Turn on/off EC2 instances automatically thanks to alarms (CloudWatch raise alarms) • Receive Alarms from CloudWatch and engage scale operations • You can raise CPU alarms, Network Alarms, VM status alarms and many others in order to increase or decrease the actual number of EC2 • Scale strategy is not simple and you have to understand how your application works • CPU is the simplest way but remember that the bandwidth is limited by network interfaces and bottlenecks can obfuscate the CPU alarm and your application stucks in weird and strange situations. WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 45.
    AUTOSCALING WITH ELB+ EC2 + CLOUDWATCH • If servers start and stops continuously, we have to find solutions to stay fresh and updated also on software • When a server starts, it has to create a valid environment in order to provides web pages. Strategies? • Compile and bundle all softwares in one instance image • It is very simple but all software becomes old very quickly and when you have to release an update you have to compile a new image and update all load balancers configurations. It is a long and complex operation • Use EC2_USER_DATA feature provided by AWS • You can run a shell script when your instances bootstraps. It is more flexible because you can create a skeleton (PHP + libraries) and download all software runtime during the boot operation WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 46.
    THE PROBLEM WITHSOFTWARE MANAGEMENT Use SVN (Subversion) to download the latest version of WordPress Probably is not a good idea use the “trunk” but you can use tags in order to stay aligned in all VMs svn checkout http://core.svn.wordpress.org/tags/3.5.1/ mywebsite http://codex.wordpress.org/Installing/Updating_WordPress_with_Su bversion Use SVN externals to download your plugins cd mywebsite/wp-content/plugins/ svn propset svn:externals akismet http://plugins.svn.wordpress.org/akismet/tags/2.5.7/ svn up Create/Download your WordPress configuration file during VM bootstrap WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 47.
    HOW WE CANDOWNLOAD WP AND PLUGINS? • If you ran 10 servers execute commands could be hard. You can use tools to run command on a server list • Capistrano (Ruby) • https://github.com/capistrano/capistrano • Fabric (Python) • https://github.com/fabric/fabric • Use CLOTH for AWS EC2 instances • https://github.com/garethr/cloth WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 48.
    HOW TO UPDATECONFIGURATIONS RUNTIME? #! /usr/bin/env python from __future__ import with_statement from fabric.api import * from fabric.contrib.console import confirm EC2 instances are dynamic with don’t know address, for that reason we can use tagging from cloth.tasks import * system to execute commands on a group of instances env.user = "root" env.directory = '/mnt/wordpress' fab nodes:"^production.*" tail env.key_filename = ['/home/walter/Amazon/wp- cms.pem'] Execute the “tail” command on all instances with a name that starts with “production.” @task def reload(): Eg. "Reload Apache configuration" • production.web-1 run('/etc/init.d/apache2 reload') • production.log • production.mongodb @task def tail(): "Tail Apache logs" run('tail /var/log/syslog') WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 49.
    EXAMPLE OF FABRIC– USAGE WITH CLOTH • We create and destroy instances thanks to alarms but when we close an instance we lose immediately all apache logs (or equivalent) • How we can manage logs? • The simplest way is to use Rsyslog clusters • Rsyslog is an opensource software that forwarding log messages in an IP network • Rsyslog implement the basic syslog protol • That means that we can configure apache logs to “syslog” instead using normal text files. • In this way we can collect all logs in one group of VM and work on these files later thanks to other technologies. WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 50.
    ALSO LOG MANAGEMENTIS NOT SIMPLE… • Collecting logs is not the latest operation because you have to analyse and reduce information • Move logs to S3 bucket – Time based • Analyze logs with Hadoop • Map Reduce on the cloud with Elastic Map Reduce service (EMR) • Use script languages on top of Hadoop in order to simply the log analysis • HIVE – Data Warehouse infrastructure (data summarization) • Pig – High level platform for creating MapReduce program WORDCAMP BOLOGNA - 9 FEB 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
  • 51.
    The end? Reallyyou want the Red pill? find out just how deep the rabbit hole goes
  • 52.
    RELATORI Gabriele Mittica Web: www.gabrielemittica.com Twitter: @gabrielemittica Walter Dal Mut Web: www.walterdalmut.com Twitter: @walterdalmut WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13