Hybrid cloud wiskyweb2012

90
Is Your App Ready For The (Hybrid) Cloud? Thijs Feryn

description

Slides for my Hybrid Cloud talk at Whiskyweb 2012

Transcript of Hybrid cloud wiskyweb2012

Page 1: Hybrid cloud wiskyweb2012

Is Your App Ready For The

(Hybrid) Cloud?Thijs Feryn

Page 2: Hybrid cloud wiskyweb2012

Very%excited%to%be%here%!

Page 3: Hybrid cloud wiskyweb2012

THIJS

Page 4: Hybrid cloud wiskyweb2012
Page 5: Hybrid cloud wiskyweb2012

TAZE

Page 6: Hybrid cloud wiskyweb2012

Evangelist

Page 7: Hybrid cloud wiskyweb2012
Page 8: Hybrid cloud wiskyweb2012
Page 9: Hybrid cloud wiskyweb2012
Page 10: Hybrid cloud wiskyweb2012

@ThijsFeryn

Page 11: Hybrid cloud wiskyweb2012

Please&rate&my&talk&on&

Joind.in

https://joind.in/6295

Page 12: Hybrid cloud wiskyweb2012

What%is%Cloud?

Page 13: Hybrid cloud wiskyweb2012

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

Andrei%Zmievski

Page 14: Hybrid cloud wiskyweb2012

Cloud=

Internet

Page 15: Hybrid cloud wiskyweb2012

DefiniIon

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

guaranteed%through%abstracIon

Page 16: Hybrid cloud wiskyweb2012

Internet%as%a%uIlity

Page 17: Hybrid cloud wiskyweb2012

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

Page 18: Hybrid cloud wiskyweb2012

Always%available

Page 19: Hybrid cloud wiskyweb2012

Fast%(enough)

Page 20: Hybrid cloud wiskyweb2012

Scalability

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

Page 21: Hybrid cloud wiskyweb2012

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

Page 22: Hybrid cloud wiskyweb2012

Leave%the%rest%to%others

Page 23: Hybrid cloud wiskyweb2012
Page 24: Hybrid cloud wiskyweb2012

Higher%up%the%stack

Page 25: Hybrid cloud wiskyweb2012

Economic%advantages

Page 26: Hybrid cloud wiskyweb2012

Less%moneyLess%effortLess%risk

Less%worries

Page 27: Hybrid cloud wiskyweb2012

Hybrid%let’s%you%do%that

Page 28: Hybrid cloud wiskyweb2012

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

Page 29: Hybrid cloud wiskyweb2012

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

Page 30: Hybrid cloud wiskyweb2012
Page 31: Hybrid cloud wiskyweb2012

Amazon%web%services

✓CompuIng–EC2–ELB–Auto%scaling

✓Storage–S3–EBS

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

Self\service%Iaas

Page 32: Hybrid cloud wiskyweb2012

Windows%Azure

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

Page 33: Hybrid cloud wiskyweb2012

Orchestra

✓Compu5ng✓Database

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

PHP%Paas%on%top%of%AWS

Page 34: Hybrid cloud wiskyweb2012

Combell

Fully%customized%&%managed%soluIons

Page 35: Hybrid cloud wiskyweb2012

Easy%peasy,%right?

Page 36: Hybrid cloud wiskyweb2012
Page 37: Hybrid cloud wiskyweb2012

Single%point%of%failure

Page 38: Hybrid cloud wiskyweb2012

Shared%nothing

Page 39: Hybrid cloud wiskyweb2012

Nothing%is%local

Page 40: Hybrid cloud wiskyweb2012

Distributed%systems

Page 41: Hybrid cloud wiskyweb2012

Easy%to%deploy%&%manage?

Page 42: Hybrid cloud wiskyweb2012

How%do%you%deal%with

$_SESSIONS?

Page 43: Hybrid cloud wiskyweb2012

ReplicaIonR/W%spliang

Page 44: Hybrid cloud wiskyweb2012
Page 45: Hybrid cloud wiskyweb2012

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

Maarten%Balliauw

Page 46: Hybrid cloud wiskyweb2012

Let’s%do%it%!

Page 47: Hybrid cloud wiskyweb2012

Infrastructure

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

Page 48: Hybrid cloud wiskyweb2012

Single%server%setup

Page 49: Hybrid cloud wiskyweb2012

Single%server%setup

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

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

Page 50: Hybrid cloud wiskyweb2012

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?

Page 51: Hybrid cloud wiskyweb2012

Separate%MySQL

Page 52: Hybrid cloud wiskyweb2012

Separate%MySQL

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

Page 53: Hybrid cloud wiskyweb2012

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?

Page 54: Hybrid cloud wiskyweb2012

MulIple%MySQL’s

Page 55: Hybrid cloud wiskyweb2012

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

Page 56: Hybrid cloud wiskyweb2012

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

Page 57: Hybrid cloud wiskyweb2012

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

Page 58: Hybrid cloud wiskyweb2012

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?

Page 59: Hybrid cloud wiskyweb2012

MulIple%web%

servers

Page 60: Hybrid cloud wiskyweb2012

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

Page 61: Hybrid cloud wiskyweb2012

Memcached%session%handler

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

php.ini

Page 62: Hybrid cloud wiskyweb2012

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?

Page 63: Hybrid cloud wiskyweb2012

Offload%staIc%files

Page 64: Hybrid cloud wiskyweb2012

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?

Page 65: Hybrid cloud wiskyweb2012

Offload%staIc%files

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

✓Azure–Blob&storage

What%about%the%Cloud?

Page 66: Hybrid cloud wiskyweb2012

When%the%

pressure%is%on

Page 67: Hybrid cloud wiskyweb2012

Auto%scaling%&%load%balancing

Page 68: Hybrid cloud wiskyweb2012

CDN%&%asset%offloading

Page 69: Hybrid cloud wiskyweb2012

Reverse%(caching)%proxy

Page 70: Hybrid cloud wiskyweb2012

Memcached

Page 71: Hybrid cloud wiskyweb2012

Adaptyourcode

Page 72: Hybrid cloud wiskyweb2012

Storage

Page 73: Hybrid cloud wiskyweb2012

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

Page 74: Hybrid cloud wiskyweb2012

<?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

Page 75: Hybrid cloud wiskyweb2012

<?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

Page 76: Hybrid cloud wiskyweb2012

Design%paoernse.g.

Dependency&injec5on

Modular&designAbstracIon%

layers

Page 77: Hybrid cloud wiskyweb2012

+%W3%Total%Cache

Page 78: Hybrid cloud wiskyweb2012

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

Page 79: Hybrid cloud wiskyweb2012
Page 80: Hybrid cloud wiskyweb2012
Page 81: Hybrid cloud wiskyweb2012
Page 82: Hybrid cloud wiskyweb2012

Deploy%your%code

Page 83: Hybrid cloud wiskyweb2012

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

Page 84: Hybrid cloud wiskyweb2012

Mix%&%match

Page 85: Hybrid cloud wiskyweb2012

Management%models%(oAen(forgoBen)

Page 86: Hybrid cloud wiskyweb2012

Management%models%(oAen(forgoBen)

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

Unmanaged%Cloud%is%virtual%colocaIon

Page 87: Hybrid cloud wiskyweb2012

Management%models%(oAen(forgoBen)

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

Burst%model%at%unmanaged%vendor

Page 88: Hybrid cloud wiskyweb2012

When%to%choose%what?

Page 89: Hybrid cloud wiskyweb2012
Page 90: Hybrid cloud wiskyweb2012