Slide 1

Slide 1 text

Distribute the workload Helgi Þormar Þorbjörnsson PHP UK, London, 24th of Feb. 2012 Monday, 27 February 12

Slide 2

Slide 2 text

Co-founded Orchestra.io Work at EngineYard PEAR Developer From Iceland @h on Twitter Helgi Monday, 27 February 12

Slide 3

Slide 3 text

Why Distribute? Budget Efficiency Perception Monday, 27 February 12

Slide 4

Slide 4 text

Efficiency 10 small servers > 1 big Monday, 27 February 12

Slide 5

Slide 5 text

Budget Spend wisely Commodity servers Cloud Computing (EC2) Monday, 27 February 12

Slide 6

Slide 6 text

Perception Defer intensive processes Give instant feedback Users keep on browsing Monday, 27 February 12

Slide 7

Slide 7 text

Monday, 27 February 12

Slide 8

Slide 8 text

Ant Colonies Monday, 27 February 12

Slide 9

Slide 9 text

Teamwork When faced with a problem they will solve the problem as one. Monday, 27 February 12

Slide 10

Slide 10 text

Monday, 27 February 12

Slide 11

Slide 11 text

Monday, 27 February 12

Slide 12

Slide 12 text

Architect for Distribution Monday, 27 February 12

Slide 13

Slide 13 text

Characteristics Decoupling Elasticity High Availability Concurrency Monday, 27 February 12

Slide 14

Slide 14 text

Decoupling Monday, 27 February 12

Slide 15

Slide 15 text

Application DB API Cache FE Monday, 27 February 12

Slide 16

Slide 16 text

Application DB API Cache FE Cache API API Monday, 27 February 12

Slide 17

Slide 17 text

Elasticity Monday, 27 February 12

Slide 18

Slide 18 text

Cloud Computing Monday, 27 February 12

Slide 19

Slide 19 text

Load Balance Monday, 27 February 12

Slide 20

Slide 20 text

HA Proxy Nginx My Favourite Monday, 27 February 12

Slide 21

Slide 21 text

Monitoring Monday, 27 February 12

Slide 22

Slide 22 text

When do I need more servers? Monday, 27 February 12

Slide 23

Slide 23 text

Needs to be around from the start! Monday, 27 February 12

Slide 24

Slide 24 text

Keep records Monday, 27 February 12

Slide 25

Slide 25 text

Spot trends Monday, 27 February 12

Slide 26

Slide 26 text

Different types Hardware Performance Software Performance Availability Resourcing Monday, 27 February 12

Slide 27

Slide 27 text

Applications New Relic CloudKick ScoutApp Nagios Cacti Circonus Monday, 27 February 12

Slide 28

Slide 28 text

Automation Monday, 27 February 12

Slide 29

Slide 29 text

Plug into your monitoring Monday, 27 February 12

Slide 30

Slide 30 text

Bringing together Monitoring and Elastic behaviour into one beautiful whole! Monday, 27 February 12

Slide 31

Slide 31 text

Add some intelligence to add / remove servers as needed based on current information. Monday, 27 February 12

Slide 32

Slide 32 text

Just make sure it doesn’t turn into... Monday, 27 February 12

Slide 33

Slide 33 text

Skynet!! Monday, 27 February 12

Slide 34

Slide 34 text

High Availability Monday, 27 February 12

Slide 35

Slide 35 text

Get a highly available and resilient setup by following a few of those recommendations Monday, 27 February 12

Slide 36

Slide 36 text

Remember, even Google has outages Monday, 27 February 12

Slide 37

Slide 37 text

What to avoid Monday, 27 February 12

Slide 38

Slide 38 text

Local Sessions Monday, 27 February 12

Slide 39

Slide 39 text

Store sessions in DB / Memcache Solution Monday, 27 February 12

Slide 40

Slide 40 text

Local Memory Monday, 27 February 12

Slide 41

Slide 41 text

Networked Memcache Solution Monday, 27 February 12

Slide 42

Slide 42 text

Local Files Monday, 27 February 12

Slide 43

Slide 43 text

Local Uploads Monday, 27 February 12

Slide 44

Slide 44 text

Writing to /tmp Monday, 27 February 12

Slide 45

Slide 45 text

Store on S3 or a networked FS Solution Monday, 27 February 12

Slide 46

Slide 46 text

Serve up static files from CDNs Solution Monday, 27 February 12

Slide 47

Slide 47 text

Servers can vanish at any given time Monday, 27 February 12

Slide 48

Slide 48 text

Internal APIs Monday, 27 February 12

Slide 49

Slide 49 text

Application S3 GFS FS Internal Storage API Monday, 27 February 12

Slide 50

Slide 50 text

Application MySQL Mongo Cache Internal DB API Monday, 27 February 12

Slide 51

Slide 51 text

Gearman Monday, 27 February 12

Slide 52

Slide 52 text

Your Client Code Gearman Client API (C, PHP, Perl, MySQL UDF, ...) Gearman Job Server gearmand Gearman Worker API (C, PHP, Perl, Python, ...) Your Worker Code Your App Gearman Monday, 27 February 12

Slide 53

Slide 53 text

pear.php.net/ net_gearman Monday, 27 February 12

Slide 54

Slide 54 text

A Story! Monday, 27 February 12

Slide 55

Slide 55 text

Financial Software Monday, 27 February 12

Slide 56

Slide 56 text

3000+ Clients Monday, 27 February 12

Slide 57

Slide 57 text

Each one has 5 external data sources Monday, 27 February 12

Slide 58

Slide 58 text

Each data source is a web service Monday, 27 February 12

Slide 59

Slide 59 text

Ran every 6 hours every day Monday, 27 February 12

Slide 60

Slide 60 text

Cron Gearman Job 1 1 2 3 4 5 Web Services 1 4 3 2 5 Processing Monday, 27 February 12

Slide 61

Slide 61 text

But! That wasn’t enough Monday, 27 February 12

Slide 62

Slide 62 text

Job kicked off on login Monday, 27 February 12

Slide 63

Slide 63 text

Supervisord Monday, 27 February 12

Slide 64

Slide 64 text

phpadvent.org/2009/daemonize- your-php-by-sean-coates Monday, 27 February 12

Slide 65

Slide 65 text

Queue Systems Monday, 27 February 12

Slide 66

Slide 66 text

Good for Image Processing Distributed Logs Data Mining Mass Emails Intensive transformation Search Monday, 27 February 12

Slide 67

Slide 67 text

Common Tools Gearman Hadoop ZeroMQ RabbitMQ And many others! Monday, 27 February 12

Slide 68

Slide 68 text

Questions? Joind.in: https://joind.in/4958 @h [email protected] Monday, 27 February 12