develop and deploy using hybrid cloud strategies confoo2012

95
Thijs Feryn Evangelist +32 (0)9 218 79 06 [email protected] Develop & deploy using hybrid cloud strategies

Upload: combell-group

Post on 06-Dec-2014

1.578 views

Category:

Technology


3 download

DESCRIPTION

Slides for my Hybrid Cloud talk at Confoo

TRANSCRIPT

Page 1: Develop and deploy using Hybrid Cloud Strategies confoo2012

Thijs  FerynEvangelist+32  (0)9  218  79  [email protected]

Develop  &  deploy  using  hybrid  cloud  strategies

Page 2: Develop and deploy using Hybrid Cloud Strategies confoo2012

Very  excited  to  be  here  !

Page 3: Develop and deploy using Hybrid Cloud Strategies confoo2012

THIJS

Page 4: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 5: Develop and deploy using Hybrid Cloud Strategies confoo2012

TAZE

Page 6: Develop and deploy using Hybrid Cloud Strategies confoo2012

Evangelist

Page 7: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 8: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 9: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 10: Develop and deploy using Hybrid Cloud Strategies confoo2012

@ThijsFeryn

Page 11: Develop and deploy using Hybrid Cloud Strategies confoo2012

Please  rate  my  talk  on  

Joind.in

https://joind.in/4951

Page 12: Develop and deploy using Hybrid Cloud Strategies confoo2012

What  is  Cloud?

Page 13: Develop and deploy using Hybrid Cloud Strategies confoo2012

“That’s  where  rain  comes  from”

Andrei  Zmievski

Page 14: Develop and deploy using Hybrid Cloud Strategies confoo2012

Cloud=

Internet

Page 15: Develop and deploy using Hybrid Cloud Strategies confoo2012

DefiniXon

A  model  for  consumpXon  &  delivery  on  the  internet  where  flexibility  is  essenXal  &  can  be  

guaranteed  through  abstracXon

Page 16: Develop and deploy using Hybrid Cloud Strategies confoo2012

Internet  as  a  uXlity

Page 17: Develop and deploy using Hybrid Cloud Strategies confoo2012

Translated  to  what  we  know  &  need

Page 18: Develop and deploy using Hybrid Cloud Strategies confoo2012

Always  available

Page 19: Develop and deploy using Hybrid Cloud Strategies confoo2012

Fast  (enough)

Page 20: Develop and deploy using Hybrid Cloud Strategies confoo2012

Scalability

Up  &  down  vs  out  &  in

Page 21: Develop and deploy using Hybrid Cloud Strategies confoo2012

Focus  on  using,  do  what  you’re  good  at

Page 22: Develop and deploy using Hybrid Cloud Strategies confoo2012

Leave  the  rest  to  others

Page 23: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 24: Develop and deploy using Hybrid Cloud Strategies confoo2012

Higher  up  the  stack

Page 25: Develop and deploy using Hybrid Cloud Strategies confoo2012

Economic  advantages

Page 26: Develop and deploy using Hybrid Cloud Strategies confoo2012

Less  moneyLess  effortLess  risk

Less  worries

Page 27: Develop and deploy using Hybrid Cloud Strategies confoo2012

Hybrid  let’s  you  do  that

Page 28: Develop and deploy using Hybrid Cloud Strategies confoo2012

Hybrid  is  just  a  fancy  way  of  saying

Page 29: Develop and deploy using Hybrid Cloud Strategies confoo2012

Pick  the  pieces  of  the  puzzle  yourself

Page 30: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 31: Develop and deploy using Hybrid Cloud Strategies confoo2012

Amazon  web  services

✓CompuXng–EC2–ELB–Auto  scaling

✓Storage–S3–EBS

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

Self-­‐service  Iaas

Page 32: Develop and deploy using Hybrid Cloud Strategies confoo2012

Windows  Azure

✓CompuXng✓Storage–Blob  storage–Table  storage✓CDN✓SQL  Azure✓Data  sync✓Service  Bus

Self-­‐service  Paas

Page 33: Develop and deploy using Hybrid Cloud Strategies confoo2012

Orchestra

✓CompuXng✓Database

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

PHP  Paas  on  top  of  AWS

Page 34: Develop and deploy using Hybrid Cloud Strategies confoo2012

Combell

Fully  customized  &  managed  soluXons

Page 35: Develop and deploy using Hybrid Cloud Strategies confoo2012

Easy  peasy,  right?

Page 36: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 37: Develop and deploy using Hybrid Cloud Strategies confoo2012

Single  point  of  failure

Page 38: Develop and deploy using Hybrid Cloud Strategies confoo2012

Shared  nothing

Page 39: Develop and deploy using Hybrid Cloud Strategies confoo2012

Nothing  is  local

Page 40: Develop and deploy using Hybrid Cloud Strategies confoo2012

Distributed  systems

Page 41: Develop and deploy using Hybrid Cloud Strategies confoo2012

Easy  to  deploy  &  manage?

Page 42: Develop and deploy using Hybrid Cloud Strategies confoo2012

How  do  you  deal  with

$_SESSIONS?

Page 43: Develop and deploy using Hybrid Cloud Strategies confoo2012

ReplicaXonR/W  splimng

Page 44: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 45: Develop and deploy using Hybrid Cloud Strategies confoo2012

“Cloud  is  for  green  field  projects”

Maarten  Balliauw

Page 46: Develop and deploy using Hybrid Cloud Strategies confoo2012

Let’s  do  it  !

Page 47: Develop and deploy using Hybrid Cloud Strategies confoo2012

Infrastructure

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

Page 48: Develop and deploy using Hybrid Cloud Strategies confoo2012

Single  server  setup

Page 49: Develop and deploy using Hybrid Cloud Strategies confoo2012

Single  server  setup

✓Developer–Everything  is  local•Files•Databases

✓Sysadmin–Sits  back,  drinks  some  coffee

Page 50: Develop and deploy using Hybrid Cloud Strategies confoo2012

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: Develop and deploy using Hybrid Cloud Strategies confoo2012

Separate  MySQL

Page 52: Develop and deploy using Hybrid Cloud Strategies confoo2012

Separate  MySQL

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

Page 53: Develop and deploy using Hybrid Cloud Strategies confoo2012

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: Develop and deploy using Hybrid Cloud Strategies confoo2012

MulXple  MySQL’s

Page 55: Develop and deploy using Hybrid Cloud Strategies confoo2012

MulXple  MySQL’s

✓Developer–Read  write  splimng  in  code–Connect  to  loadbalanced  hostname

✓Sysadmin–Setup  servers–Configure  replicaXon•Master/master•Master/slave

–Add  to  loadbalancing

Page 56: Develop and deploy using Hybrid Cloud Strategies confoo2012

MulXple  MySQL’s

Use  mysqlnd_ms  for  R/W  splimng  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: Develop and deploy using Hybrid Cloud Strategies confoo2012

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");

ConnecXon  string

Page 58: Develop and deploy using Hybrid Cloud Strategies confoo2012

MulXple  MySQL’s

✓Amazon–MulXple  EC2  instances  with  replicaXon  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: Develop and deploy using Hybrid Cloud Strategies confoo2012

MulXple  web  

servers

Page 60: Develop and deploy using Hybrid Cloud Strategies confoo2012

MulXple  web  servers

✓Developer–MulXple  places  to  deploy–Where  are  my  staXc  assets?–Sessions?

✓Sysadmin–MulXple  servers  behind  loadbalancer–$_SESSION  clustering  via  Memcached  or  sXcky  sessions–Shared  storage

Page 61: Develop and deploy using Hybrid Cloud Strategies confoo2012

Memcached  session  handler

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

php.ini

Page 62: Develop and deploy using Hybrid Cloud Strategies confoo2012

MulXple  Web  servers

✓Amazon–MulXple  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: Develop and deploy using Hybrid Cloud Strategies confoo2012

Offload  staXc  files

Page 64: Develop and deploy using Hybrid Cloud Strategies confoo2012

Offload  staXc  files

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

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

Page 65: Develop and deploy using Hybrid Cloud Strategies confoo2012

Offload  staXc  files

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

✓Azure–Blob  storage

What  about  the  Cloud?

Page 66: Develop and deploy using Hybrid Cloud Strategies confoo2012

When  the  

pressure  is  on

Page 67: Develop and deploy using Hybrid Cloud Strategies confoo2012

Auto  scaling  &  load  balancing

Page 68: Develop and deploy using Hybrid Cloud Strategies confoo2012

CDN  &  asset  offloading

Page 69: Develop and deploy using Hybrid Cloud Strategies confoo2012

Reverse  (caching)  proxy

Page 70: Develop and deploy using Hybrid Cloud Strategies confoo2012

Memcached

Page 71: Develop and deploy using Hybrid Cloud Strategies confoo2012

Adaptyourcode

Page 72: Develop and deploy using Hybrid Cloud Strategies confoo2012

Storage

Page 73: Develop and deploy using Hybrid Cloud Strategies confoo2012

require_once  'Zend/Service/WindowsAzure/Storage/Blob.php';  $storageClient  =  new  Zend_Service_WindowsAzure_Storage_Blob();$result  =  $storageClient-­‐>putBlob('testcontainer',  'example.txt',  '/example.txt');  echo  'Blob  name  is:  '  .  $result-­‐>Name;

require_once  'Zend/Service/Amazon/S3.php';  $s3  =  new  Zend_Service_Amazon_S3($my_aws_key,  $my_aws_secret_key);  $s3-­‐>createBucket("my-­‐own-­‐bucket");  $s3-­‐>putObject("my-­‐own-­‐bucket/myobject",  "somedata");echo  $s3-­‐>getObject("my-­‐own-­‐bucket/myobject");

Azure  Blog  storage

Amazon  S3

Page 74: Develop and deploy using Hybrid Cloud Strategies confoo2012

<?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: Develop and deploy using Hybrid Cloud Strategies confoo2012

<?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  opXons  in  config  file

Page 76: Develop and deploy using Hybrid Cloud Strategies confoo2012

Design  pawernse.g.

Dependency  injecXon

Modular  designAbstracXon  

layers

Page 77: Develop and deploy using Hybrid Cloud Strategies confoo2012

+  W3  Total  Cache

Page 78: Develop and deploy using Hybrid Cloud Strategies confoo2012

W3  Total  Cache

✓Page  caching  -­‐Memcached  (loadbalanced)-­‐ Varnish  (loadbalanced)

✓Database  &  object  cache-­‐Memcached  (loadbalanced)

✓CDN-­‐ Push  to  S3  or  Azure  Blob  storage  buckets-­‐ Pull  from  CDN  (CloudFront  or  Azure)-­‐ Custom  hostnames

✓Scale  across  EC2  nodes  with  ELB

Page 79: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 80: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 81: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 82: Develop and deploy using Hybrid Cloud Strategies confoo2012

Deploy  your  code

Page 83: Develop and deploy using Hybrid Cloud Strategies confoo2012

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: Develop and deploy using Hybrid Cloud Strategies confoo2012

About  Azure  deployment

Page 85: Develop and deploy using Hybrid Cloud Strategies confoo2012

About  Azure  deployment

scaffolder  run  -­‐out="c:\temp\HelloAzure\Project"

package  create  -­‐in="C:\temp\HelloAzure\Project"  -­‐out="C:\temp\HelloAzure\DeployDev"  -­‐dev=true

package  create  -­‐in="C:\temp\HelloAzure\Project"  -­‐out="C:\temp\HelloAzure\DeployProduction"  -­‐dev=false

package  and  run  on  emulator

package  for  deployment

Page 86: Develop and deploy using Hybrid Cloud Strategies confoo2012

About  Azure  deployment

Certificate=XXXXXXXXSubscriptionId=XXXXXPassphrase=XXXXXXXXXStorageAccount=XXXXXPackageLocation=_files\PhpOnAzure.cspkgServiceConfigLocation=_files\ServiceConfiguration.cscfg

Semngs.ini

Page 87: Develop and deploy using Hybrid Cloud Strategies confoo2012

About  Azure  deployment

deployment.php  CreateFromLocal  -­‐-­‐ConfigFile="settings.ini"  -­‐-­‐Name="mysubdomain"  -­‐-­‐DeploymentName="testdeploy"  -­‐-­‐Label="testdeploy"  -­‐-­‐BySlot="staging"  -­‐-­‐StartImmediately  -­‐-­‐WaitFor

Deploy  to  staging

Page 88: Develop and deploy using Hybrid Cloud Strategies confoo2012

About  Azure  deployment

deployment.php  Swap  -­‐-­‐ConfigFile="settings.ini"  -­‐-­‐Name="mysubdomain"  -­‐-­‐WaitFor

deployment.php  EditInstanceNumber  -­‐-­‐ConfigFile="settings.ini"  -­‐-­‐Name="subdomain"  -­‐-­‐ByName="testdeploy"  -­‐-­‐RoleName="PhpOnAzure.Web"  -­‐-­‐NewInstanceNumber=2

Swap  to  producXon

Scale  out

Page 89: Develop and deploy using Hybrid Cloud Strategies confoo2012

Mix  &  match

Page 90: Develop and deploy using Hybrid Cloud Strategies confoo2012

Management  models  (oAen  forgoBen)

Page 91: Develop and deploy using Hybrid Cloud Strategies confoo2012

Management  models  (oAen  forgoBen)

Managed  Cloud  is  the  new  dedicated  server

Unmanaged  Cloud  is  virtual  colocaXon

Page 92: Develop and deploy using Hybrid Cloud Strategies confoo2012

Management  models  (oAen  forgoBen)

Custom  soluXon  at  hoster  under  heavy  SLA

Burst  model  at  unmanaged  vendor

Page 93: Develop and deploy using Hybrid Cloud Strategies confoo2012

When  to  choose  what?

Page 94: Develop and deploy using Hybrid Cloud Strategies confoo2012
Page 95: Develop and deploy using Hybrid Cloud Strategies confoo2012