Hybrid cloud wiskyweb2012

Post on 01-Nov-2014

782 views 2 download

Tags:

description

Slides for my Hybrid Cloud talk at Whiskyweb 2012

Transcript of Hybrid cloud wiskyweb2012

Is Your App Ready For The

(Hybrid) Cloud?Thijs Feryn

Very%excited%to%be%here%!

THIJS

TAZE

Evangelist

@ThijsFeryn

Please&rate&my&talk&on&

Joind.in

https://joind.in/6295

What%is%Cloud?

“That’s(where(rain(comes(from”

Andrei%Zmievski

Cloud=

Internet

DefiniIon

A%model%for%consumpIon%&%delivery%on%the%internet%where%flexibility%is%essenIal%&%can%be%

guaranteed%through%abstracIon

Internet%as%a%uIlity

Translated%to%what%we%know%&%need

Always%available

Fast%(enough)

Scalability

Up%&%down%vs%out%&%in

Focus%on%using,%do%what%you’re%good%at

Leave%the%rest%to%others

Higher%up%the%stack

Economic%advantages

Less%moneyLess%effortLess%risk

Less%worries

Hybrid%let’s%you%do%that

Hybrid%is%just%a%fancy%way%of%saying

Pick%the%pieces%of%the%puzzle%yourself

Amazon%web%services

✓CompuIng–EC2–ELB–Auto%scaling

✓Storage–S3–EBS

✓Database–RDS–DynamoDB–SimpleDB–ElasIcache–SQS✓CDN–CloudFront

Self\service%Iaas

Windows%Azure

✓CompuIng✓Storage–Blob%storage–Table%storage✓CDN✓SQL%Azure✓Data%sync✓Service%BusSelf\service%Paas

Orchestra

✓Compu5ng✓Database

–Memcached–MySQL&&&RDS–CouchDB–MongoDB–Redis

PHP%Paas%on%top%of%AWS

Combell

Fully%customized%&%managed%soluIons

Easy%peasy,%right?

Single%point%of%failure

Shared%nothing

Nothing%is%local

Distributed%systems

Easy%to%deploy%&%manage?

How%do%you%deal%with

$_SESSIONS?

ReplicaIonR/W%spliang

“Cloud(is(for(green(field(projects”

Maarten%Balliauw

Let’s%do%it%!

Infrastructure

✓Basics–Webservers–MySQL%servers–File%servers✓AddiIonal%servers–Caching%servers–Reverse%proxy%servers✓External%CDN

Single%server%setup

Single%server%setup

✓Developer–Everything%is%local•Files•Databases

✓Sysadmin–Sits%back,%drinks%some%coffee

Single%server%setup

✓Amazon–1%EC2%instance–Local%MySQL%or%RDS%(as%a%service)–Local%files✓Azure–Single%App%deployment–Include%PHP%&%MySQL%in%package%script✓Orchestra–Single%App%deployment–Request%MySQL%database%or%RDS

What%about%the%Cloud?

Separate%MySQL

Separate%MySQL

✓Developer–Change%connecIonstring(s)✓Sysadmin–Sets%up%separate%server–Tunes%for%MySQL

Separate%MySQL

✓Amazon–Extra%EC2%instance%for%MySQL–RDS✓Azure–MySQL%deployment%with%worker%role–Doesn’t%scale%well–Use%SQL%Azure%instead✓Orchestra–By%default%separate–Create%separate%MySQL%database–RDS

What%about%the%Cloud?

MulIple%MySQL’s

MulIple%MySQL’s

✓Developer–Read&write&spliEng&in&code–Connect&to&loadbalanced&hostname

✓Sysadmin–Setup&servers–Configure&replica5on•Master/master•Master/slave

–Add&to&loadbalancing

MulIple%MySQL’s

Use%mysqlnd_ms%for%R/W%spliang%in%case%of%crappy%code{%%%%"myapp":%{%%%%%%%%"master":%{%%%%%%%%%%%%"write_group":%{%%%%%%%%%%%%%%%%"host":%"master.db.myapp.ext",%%%%%%%%%%%%%%%%"port":%"3306"%%%%%%%%%%%%}%%%%%%%%},%%%%%%%%"slave":%{%%%%%%%%%%%%"read_group":%{%%%%%%%%%%%%%%%%"host":%"slave.db.myapp.ext",%%%%%%%%%%%%%%%%"port":%"3306"%%%%%%%%%%%%}%%%%%%%%}%%%%}}

mysqlnd_ms_plugin.ini

mysqlnd_ms.enable=1mysqlnd_ms.ini_file=/path/to/mysqlnd_ms_plugin.ini

php.ini

<?php$mysqli = new mysqli("myapp", "username", "password", "database");$pdo = new PDO('mysql:host=myapp;dbname=database', 'username', 'password');$mysql = mysql_connect("myapp", "username", "password");

ConnecIon%string

MulIple%MySQL’s

✓Amazon–Mul5ple&EC2&instances&with&replica5on&and&loadbalancing–RDS&with&read&replica

✓Azure–Include&PHP&&&MySQL&in&package&script–Doesn’t&scale–Use&SQL&Azure

✓Orchestra–RDS–Xeround

What%about%the%Cloud?

MulIple%web%

servers

MulIple%web%servers

✓Developer–Mul5ple&places&to&deploy–Where&are&my&sta5c&assets?–Sessions?

✓Sysadmin–Mul5ple&servers&behind&loadbalancer–$_SESSION&clustering&via&Memcached&or&s5cky&sessions–Shared&storage

Memcached%session%handler

session.save_handler&=&memcachedsession.save_path=&“mc1.myapp.ext:11211,mc2.myapp.ext:11211”

php.ini

MulIple%Web%servers

✓Amazon–Mul5ple&EC2&instances&–Use&ELB&for&loadbalancing–AMI&for&easy&setup–Config&management&(puppet,&chef,&...)

✓Azure–Out&of&the&box–Tuning&possible

✓Orchestra–Out&of&the&box

What%about%the%Cloud?

Offload%staIc%files

Offload%staIc%files

✓Developer–Sync&current&assets–Store&new&files&on&external&servers–Use&external&hostname&when&referencing&files

✓Sysadmin–Tune&external&servers&for&sta5c&content–CDN,&perhaps?

Offload%staIc%files

✓Amazon–EC2&instances&for&storage&with&clustered&file&system–S3&buckets

✓Azure–Blob&storage

What%about%the%Cloud?

When%the%

pressure%is%on

Auto%scaling%&%load%balancing

CDN%&%asset%offloading

Reverse%(caching)%proxy

Memcached

Adaptyourcode

Storage

require_once*'Zend/Service/WindowsAzure/Storage/Blob.php';*

$storageClient*=*new*Zend_Service_WindowsAzure_Storage_Blob();$result*=*$storageClientE>putBlob(

'testcontainer',*'example.txt',*'/example.txt'

);*

echo*'Blob*name*is:*'*.*$resultE>Name;

require_once*'Zend/Service/Amazon/S3.php';*

$s3*=*new*Zend_Service_Amazon_S3($my_aws_key,*$my_aws_secret_key);*

$s3E>createBucket("myEownEbucket");*

$s3E>putObject("myEownEbucket/myobject",*"somedata");

echo*$s3E>getObject("myEownEbucket/myobject");

Azure%Blog%storage

Amazon%S3

<?php$storage = Zend_Cloud_StorageService_Factory::getAdapter(array(    Zend_Cloud_StorageService_Factory::STORAGE_ADAPTER_KEY => 'Zend_Cloud_StorageService_Adapter_S3',    Zend_Cloud_StorageService_Adapter_S3::AWS_ACCESS_KEY   => $amazonKey,    Zend_Cloud_StorageService_Adapter_S3::AWS_SECRET_KEY   => $amazonSecret,));$data = file_get_contents('/my/local/dir/picture.jpg');$returnedData = $storage->storeItem('/my/remote/path/picture.jpg', $data);

Supports%Azure%&%AWS

<?php$storage = Zend_Cloud_StorageService_Factory::getAdapter(array(    Zend_Cloud_StorageService_Factory::STORAGE_ADAPTER_KEY => 'Zend_Cloud_StorageService_Adapter_FileSystem',    Zend_Cloud_StorageService_Adapter_FileSystem::LOCAL_DIRECTORY   => $localDirectory,));$data = file_get_contents('/my/local/dir/picture.jpg');$returnedData = $storage->storeItem('/my/remote/path/picture.jpg', $data);

Even%supports%local%file%system

Put%opIons%in%config%file

Design%paoernse.g.

Dependency&injec5on

Modular&designAbstracIon%

layers

+%W3%Total%Cache

W3%Total%Cache

✓Page&caching&dMemcached&(loadbalanced)d Varnish&(loadbalanced)

✓Database&&&object&cachedMemcached&(loadbalanced)

✓CDNd Push&to&S3&or&Azure&Blob&storage&bucketsd Pull&from&CDN&(CloudFront(or(Azure)d Custom&hostnames

✓Scale&across&EC2&nodes&with&ELB

Deploy%your%code

Deploy%your%code

✓General%deployment%methods–Capistrano–Phing–Puppet%(config%is%code%too)–Version%control%tools

✓Amazon%specific–AMI’s

✓Azure%specific–Scaffolding%&%packaging%%command%line%tool–Upload%packages%in%control%panel

✓Orchestra%specific–Git

Mix%&%match

Management%models%(oAen(forgoBen)

Management%models%(oAen(forgoBen)

Managed%Cloud%is%the%new%dedicated%server

Unmanaged%Cloud%is%virtual%colocaIon

Management%models%(oAen(forgoBen)

Custom%soluIon%at%hoster%under%heavy%SLA

Burst%model%at%unmanaged%vendor

When%to%choose%what?