154
Escalando una PHP App con DB Sharding & Amazon Web Services Matias Paterlini Tuesday, November 5, 13

Escalando una PHP App con DB sharding - PHP Conference

Embed Size (px)

DESCRIPTION

Presentación del PHP Conference Argentina 2013 sobre escalabilidad horizontal a nivel web y bases de datos para aplicaciones escritas en PHP, trabajando sobre sharding en mysql, amazon web services, y modelo de datos no relacional.

Citation preview

Page 1: Escalando una PHP App con DB sharding - PHP Conference

Escalando una PHP Appcon DB Sharding & Amazon Web Services

Matias PaterliniTuesday, November 5, 13

Page 2: Escalando una PHP App con DB sharding - PHP Conference

Objetivo de la charla

• Contar quien soy y qué hago

• Mostrar orígenes de la arquitectura, infraestructura y escalabilidad de TFM

• Hablar de DB Sharding

• Hablar de Amazon

• Preguntas

• Cof Cof reclutar Ejem!

Tuesday, November 5, 13

Page 3: Escalando una PHP App con DB sharding - PHP Conference

• +11 años de experiencia en PHP.

• 6 años desarrollando aplicaciones sobre Redes Sociales

• 25 empleados, + de 250 aplicaciones desarrolladas

• + 10K clientes, + 10M Usuarios

• 2 compañías construidas sobre plataformas sociales

Tuesday, November 5, 13

Page 4: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 5: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 6: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 7: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 8: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 9: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 10: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 11: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 12: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 13: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 14: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 15: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 16: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 17: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 18: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 19: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 20: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 21: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 22: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 23: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 24: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 25: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 26: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 27: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 28: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 29: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 30: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 31: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 32: Escalando una PHP App con DB sharding - PHP Conference

20.6 MAudiencia de nuestros primeros 8 clientes.

Tenemos 250 en simultáneo.

Tuesday, November 5, 13

Page 33: Escalando una PHP App con DB sharding - PHP Conference

+300.000Fans conseguidos con solo un

concurso

Tuesday, November 5, 13

Page 34: Escalando una PHP App con DB sharding - PHP Conference

Todos tenemos una historia con PHP

Tuesday, November 5, 13

Page 35: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 36: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 37: Escalando una PHP App con DB sharding - PHP Conference

<?php echo 'Hello World';?>

Tuesday, November 5, 13

Page 38: Escalando una PHP App con DB sharding - PHP Conference

?Tuesday, November 5, 13

Page 39: Escalando una PHP App con DB sharding - PHP Conference

Apache HTTP Server

Tuesday, November 5, 13

Page 40: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 41: Escalando una PHP App con DB sharding - PHP Conference

Free Web Hosting

Tuesday, November 5, 13

Page 42: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 43: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 44: Escalando una PHP App con DB sharding - PHP Conference

OOP

Tuesday, November 5, 13

Page 45: Escalando una PHP App con DB sharding - PHP Conference

<? class Caja{     var $alto;     var $ancho;     var $largo;     var $contenido;     var $color;

function introduce($cosa){     $this->contenido = $cosa; }

function muestra_contenido(){     echo $this->contenido; } } ?>

Tuesday, November 5, 13

Page 46: Escalando una PHP App con DB sharding - PHP Conference

Auto-completeObject class reference

Tuesday, November 5, 13

Page 47: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 48: Escalando una PHP App con DB sharding - PHP Conference

FRAMEWORKS

Tuesday, November 5, 13

Page 49: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 50: Escalando una PHP App con DB sharding - PHP Conference

2010

Tuesday, November 5, 13

Page 51: Escalando una PHP App con DB sharding - PHP Conference

The Fan Machine

Tuesday, November 5, 13

Page 52: Escalando una PHP App con DB sharding - PHP Conference

Esto tiene que escalar!

Tuesday, November 5, 13

Page 53: Escalando una PHP App con DB sharding - PHP Conference

¿Qué sabíamos de escalar algo en PHP?

Tuesday, November 5, 13

Page 54: Escalando una PHP App con DB sharding - PHP Conference

¿Qué sabíamos de escalar algo a

MILLONES de usuarios en PHP?

Tuesday, November 5, 13

Page 55: Escalando una PHP App con DB sharding - PHP Conference

0Tuesday, November 5, 13

Page 56: Escalando una PHP App con DB sharding - PHP Conference

CEROTuesday, November 5, 13

Page 57: Escalando una PHP App con DB sharding - PHP Conference

Qué onda con el NoSQL?

Tuesday, November 5, 13

Page 58: Escalando una PHP App con DB sharding - PHP Conference

Qué onda con el Sharding?

Tuesday, November 5, 13

Page 59: Escalando una PHP App con DB sharding - PHP Conference

Cuales eran nuestros posibles problemas?

Tuesday, November 5, 13

Page 60: Escalando una PHP App con DB sharding - PHP Conference

Escalar Rápido

Tuesday, November 5, 13

Page 61: Escalando una PHP App con DB sharding - PHP Conference

Muchos writes

Tuesday, November 5, 13

Page 62: Escalando una PHP App con DB sharding - PHP Conference

Mucha variación en el Tráfico

Tuesday, November 5, 13

Page 63: Escalando una PHP App con DB sharding - PHP Conference

MUCHOS cambios en el modelo de datos

Tuesday, November 5, 13

Page 64: Escalando una PHP App con DB sharding - PHP Conference

Mucho Storage

Tuesday, November 5, 13

Page 65: Escalando una PHP App con DB sharding - PHP Conference

Todo bajo SSL

Tuesday, November 5, 13

Page 66: Escalando una PHP App con DB sharding - PHP Conference

Startup = poco $$

Tuesday, November 5, 13

Page 67: Escalando una PHP App con DB sharding - PHP Conference

Como lo solucionamos???

Tuesday, November 5, 13

Page 68: Escalando una PHP App con DB sharding - PHP Conference

Possible solutions...

Tuesday, November 5, 13

Page 69: Escalando una PHP App con DB sharding - PHP Conference

Web Server & Storage

Tuesday, November 5, 13

Page 70: Escalando una PHP App con DB sharding - PHP Conference

HORIZONTALSCALABILITY

Tuesday, November 5, 13

Page 71: Escalando una PHP App con DB sharding - PHP Conference

Database 1

Web Server 1 Web Server 2 Web Server 3

Static File Caching

Database 1

(replicated DB)

Data Caching

Tuesday, November 5, 13

Page 72: Escalando una PHP App con DB sharding - PHP Conference

AmazonAzure

GoGrid

Rackspace

Vurbia - SoftLayerAkamai

Tuesday, November 5, 13

Page 73: Escalando una PHP App con DB sharding - PHP Conference

AMAZON

Tuesday, November 5, 13

Page 74: Escalando una PHP App con DB sharding - PHP Conference

•Route 53

•S3

•EC2 - Web & Memcache

•CloudWatch

•CloudFront

•ELB - SSL termination

Tuesday, November 5, 13

Page 75: Escalando una PHP App con DB sharding - PHP Conference

What about the DB?

Tuesday, November 5, 13

Page 76: Escalando una PHP App con DB sharding - PHP Conference

CassandraMongoDB

Hipertable

NoSQL SimpleDB

CouchDB

Membase

BigData

RaptorDB

Hbase

Tuesday, November 5, 13

Page 77: Escalando una PHP App con DB sharding - PHP Conference

CassandraMongoDB

Hipertable

NoSQL SimpleDB

CouchDB

Membase

BigData

RaptorDB

Hbase

Tuesday, November 5, 13

Page 78: Escalando una PHP App con DB sharding - PHP Conference

NoSQL = No Trust!

Tuesday, November 5, 13

Page 79: Escalando una PHP App con DB sharding - PHP Conference

Y MySQL qué onda?

Tuesday, November 5, 13

Page 80: Escalando una PHP App con DB sharding - PHP Conference

Horizontal Scalability

Tuesday, November 5, 13

Page 81: Escalando una PHP App con DB sharding - PHP Conference

Master/Slave

Tuesday, November 5, 13

Page 82: Escalando una PHP App con DB sharding - PHP Conference

MasterDatabase

Web Server 1

Web Server 2

Web Server 3

Static File Caching

SlaveDatabase

Slave Database

(Transaccional, read-write)

(read) (read)

Data Caching

Tuesday, November 5, 13

Page 83: Escalando una PHP App con DB sharding - PHP Conference

DB scalling issues...

Tuesday, November 5, 13

Page 84: Escalando una PHP App con DB sharding - PHP Conference

MasterDatabase

Web Server 1

Web Server 2

Web Server 3

Static File Caching

SlaveDatabase

Slave Database

(Transaccional, read-write)

(read) (read)

Data Caching

Tuesday, November 5, 13

Page 85: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 86: Escalando una PHP App con DB sharding - PHP Conference

CPUMemory

Disk

Tuesday, November 5, 13

Page 87: Escalando una PHP App con DB sharding - PHP Conference

MasterDatabase

Web Server 1

Web Server 2

Web Server 3

Static File Caching

SlaveDatabase

Slave Database

(Transaccional, read-write)

(read) (read)

Data Caching

Tuesday, November 5, 13

Page 88: Escalando una PHP App con DB sharding - PHP Conference

Retraso

Tuesday, November 5, 13

Page 89: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 90: Escalando una PHP App con DB sharding - PHP Conference

• MAAAAANY Records - Storage issues

Tuesday, November 5, 13

Page 91: Escalando una PHP App con DB sharding - PHP Conference

• MAAAAANY Records - Storage issues

• Caching not enough

Tuesday, November 5, 13

Page 92: Escalando una PHP App con DB sharding - PHP Conference

• MAAAAANY Records - Storage issues

• Caching not enough

• Alters lock tables for hours!

Tuesday, November 5, 13

Page 93: Escalando una PHP App con DB sharding - PHP Conference

• MAAAAANY Records - Storage issues

• Caching not enough

• Alters lock tables for hours!

• Maintenance Issues

Tuesday, November 5, 13

Page 94: Escalando una PHP App con DB sharding - PHP Conference

• MAAAAANY Records - Storage issues

• Caching not enough

• Alters lock tables for hours!

• Maintenance Issues

• Too much response time

Tuesday, November 5, 13

Page 95: Escalando una PHP App con DB sharding - PHP Conference

Cluster Computing

Tuesday, November 5, 13

Page 96: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 97: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 98: Escalando una PHP App con DB sharding - PHP Conference

Table Partitioning

Tuesday, November 5, 13

Page 99: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 100: Escalando una PHP App con DB sharding - PHP Conference

THE approach

Tuesday, November 5, 13

Page 101: Escalando una PHP App con DB sharding - PHP Conference

The Friendfeed approach

Tuesday, November 5, 13

Page 102: Escalando una PHP App con DB sharding - PHP Conference

MySQL

Tuesday, November 5, 13

Page 103: Escalando una PHP App con DB sharding - PHP Conference

Sharded MySQL databases

Tuesday, November 5, 13

Page 104: Escalando una PHP App con DB sharding - PHP Conference

MySQL emulating NoSQL over Sharded

Databases

Tuesday, November 5, 13

Page 105: Escalando una PHP App con DB sharding - PHP Conference

Documents = Entities

Tuesday, November 5, 13

Page 106: Escalando una PHP App con DB sharding - PHP Conference

One Table for entities, many tables for

indexes.

Tuesday, November 5, 13

Page 107: Escalando una PHP App con DB sharding - PHP Conference

The Model

entities

index_user

index_promo

index_participant

index_vote

index_fan_conversion

Tuesday, November 5, 13

Page 108: Escalando una PHP App con DB sharding - PHP Conference

The Model

entities

index_user

index_promo

index_participant

index_vote

index_fan_conversion

Tuesday, November 5, 13

Page 109: Escalando una PHP App con DB sharding - PHP Conference

entities tableadded_id

idbodyclass

createdupdateddeleted

Tuesday, November 5, 13

Page 110: Escalando una PHP App con DB sharding - PHP Conference

Entities Table

CREATE TABLE `entities` ( `added_id` int(11) NOT NULL AUTO_INCREMENT, `id` char(32) NOT NULL DEFAULT '', `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `deleted` timestamp NULL DEFAULT NULL COMMENT `body` mediumtext, `class` varchar(50) DEFAULT NULL, `created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`added_id`), UNIQUE KEY `id` (`id`), KEY `updated` (`updated`), KEY `class` (`class`), KEY `created` (`created`)) ENGINE=InnoDB AUTO_INCREMENT=1692491 DEFAULT CHARSET=utf8 |

Tuesday, November 5, 13

Page 111: Escalando una PHP App con DB sharding - PHP Conference

users index table

entity_idfb_uid

Tuesday, November 5, 13

Page 112: Escalando una PHP App con DB sharding - PHP Conference

user index table

CREATE TABLE `index_user` ( `entity_id` char(32) NOT NULL DEFAULT '', `uid` bigint(20) NOT NULL, PRIMARY KEY (`entity_id`,`uid`), UNIQUE KEY `uid` (`uid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

Tuesday, November 5, 13

Page 113: Escalando una PHP App con DB sharding - PHP Conference

How do we scale it?

Tuesday, November 5, 13

Page 114: Escalando una PHP App con DB sharding - PHP Conference

DB Server 1

Web Server 2

Shard 1Shard 2Shard 3

Shard 4Shard 5Shard 6

Shard 7Shard 8Shard 9

Shard 10Shard 11Shard 12

Web Server 1

Web Server 3

File Caching

Database Backups

Data Caching

} Databases

Tuesday, November 5, 13

Page 115: Escalando una PHP App con DB sharding - PHP Conference

DB Server

1

Shard 1Shard 2Shard 3

Web Server 1

Web Server 2

Web Server 3

Web Server 3

Shard 4Shard 5Shard 6

DBServer

2

Shard 7Shard 8Shard 9

DBServer

3

Shard 10Shard 11Shard 12

DBServer

4

Static File Caching

Database Backups per Shard

Tuesday, November 5, 13

Page 116: Escalando una PHP App con DB sharding - PHP Conference

THE Benefits...

Tuesday, November 5, 13

Page 117: Escalando una PHP App con DB sharding - PHP Conference

• Bases de datos más pequeñas son más fáciles de manejar

• Bases de datos más chicas son más rápidas

• El sharding puede reducir costos

Tuesday, November 5, 13

Page 118: Escalando una PHP App con DB sharding - PHP Conference

• Server maintenance per db-server

• Data Maintenance Per db-shard

• NO ALTERS on tables

• Easy recovery and replication with MultiAZ

• Easy scaling

• Easy migration to other No-SQL data engines

Tuesday, November 5, 13

Page 119: Escalando una PHP App con DB sharding - PHP Conference

¿When is DB sharding Appropiate?

Tuesday, November 5, 13

Page 120: Escalando una PHP App con DB sharding - PHP Conference

High transaction Applications

Write-intensive transactions

Tuesday, November 5, 13

Page 121: Escalando una PHP App con DB sharding - PHP Conference

Cómo repartimos entre los shards?

Tuesday, November 5, 13

Page 122: Escalando una PHP App con DB sharding - PHP Conference

Driver

Programmatic DB

Tuesday, November 5, 13

Page 123: Escalando una PHP App con DB sharding - PHP Conference

DBServer

1

Shard 1Shard 2Shard 3

Shard 4Shard 5Shard 6

DBServer

2

Shard 7Shard 8Shard 9

DB Server

3

Shard 10Shard 11Shard 12

DBServer

4

memory cache

DB Driver

Driver DB

Tuesday, November 5, 13

Page 124: Escalando una PHP App con DB sharding - PHP Conference

shard_idemail

DB driver table

Tuesday, November 5, 13

Page 125: Escalando una PHP App con DB sharding - PHP Conference

Progamatic Driver

Tuesday, November 5, 13

Page 126: Escalando una PHP App con DB sharding - PHP Conference

Cómo usamos el driver

Fetchear la entidad de un usuario:

Tuesday, November 5, 13

Page 127: Escalando una PHP App con DB sharding - PHP Conference

Cómo usamos el driver

Crear o actualizar una promo:

Tuesday, November 5, 13

Page 128: Escalando una PHP App con DB sharding - PHP Conference

otra forma de guardar...

Tuesday, November 5, 13

Page 129: Escalando una PHP App con DB sharding - PHP Conference

y se utiliza así en un helper:

Tuesday, November 5, 13

Page 130: Escalando una PHP App con DB sharding - PHP Conference

Amazon Web Services

Tuesday, November 5, 13

Page 131: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 132: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 133: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 134: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 135: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 136: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 137: Escalando una PHP App con DB sharding - PHP Conference

Tuesday, November 5, 13

Page 138: Escalando una PHP App con DB sharding - PHP Conference

Como evolucionamos en Amazon...

Tuesday, November 5, 13

Page 139: Escalando una PHP App con DB sharding - PHP Conference

Un servidor LAMP, S3DNS externo

Tuesday, November 5, 13

Page 140: Escalando una PHP App con DB sharding - PHP Conference

Amazon Linux AMI

Tuesday, November 5, 13

Page 141: Escalando una PHP App con DB sharding - PHP Conference

Memcache

Tuesday, November 5, 13

Page 142: Escalando una PHP App con DB sharding - PHP Conference

Balancer

Tuesday, November 5, 13

Page 143: Escalando una PHP App con DB sharding - PHP Conference

Route 53

Tuesday, November 5, 13

Page 144: Escalando una PHP App con DB sharding - PHP Conference

Que aprendimos??

Tuesday, November 5, 13

Page 145: Escalando una PHP App con DB sharding - PHP Conference

OJO con las public AMIs!!!

Tuesday, November 5, 13

Page 146: Escalando una PHP App con DB sharding - PHP Conference

Cuando estopeas una instancia.... CHAN

Tuesday, November 5, 13

Page 147: Escalando una PHP App con DB sharding - PHP Conference

PERDES LA IP ELASTICA

Tuesday, November 5, 13

Page 148: Escalando una PHP App con DB sharding - PHP Conference

SE TE CAMBIA LA DNS PUBLICA

Tuesday, November 5, 13

Page 149: Escalando una PHP App con DB sharding - PHP Conference

Clonar es super simple pero no super rápido

Tuesday, November 5, 13

Page 150: Escalando una PHP App con DB sharding - PHP Conference

Tener stopeada una instancia sale.... casi

nada!!

Tuesday, November 5, 13

Page 151: Escalando una PHP App con DB sharding - PHP Conference

DNS...

Tuesday, November 5, 13

Page 152: Escalando una PHP App con DB sharding - PHP Conference

SSL Termination

Tuesday, November 5, 13

Page 153: Escalando una PHP App con DB sharding - PHP Conference

Límite de certificados de ssl

Tuesday, November 5, 13