Transcript
Page 1: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

© 2011 Mayflower GmbH

Thorsten Rinne I 11th October 2011

Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Page 2: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Team LeadScrum MasterHead of Open Source Labs

@ThorstenRinne2

Page 3: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Last year a new customer came up with an idea...

3

Page 4: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

A Social Network!

4

Page 5: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

A Social Network?

5

Page 6: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

for friends.Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 6

Page 7: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 7

for business.

Page 8: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 8

for videos.

Page 9: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

for photos.Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 9

Page 10: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

for real estate?Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 10

Page 11: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

The idea:Connect people, buildings

and businesses.

11

Page 12: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 12

Business

People

Building

Page 13: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 12

Business

People

Building

... is living at ...

Page 14: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 12

Business

People

Building

... is living at ...... is the home of ...

Page 15: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 12

Business

People

Building

... is an employee of ...... is living at ...... is the home of ...

Page 16: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 12

Business

People

Building

... is an employee of ...... is living at ...... is the home of ...

... has as employee ...

Page 17: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 12

Business

People

Building

... is an employee of ...... is living at ...

... has its office at ...

... is the home of ...

... has as employee ...

Page 18: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 12

Business

People

Building

... is an employee of ...... is living at ...

... has its office at ...

... is the home of ...

... has as employee ...

... is the office location of ...

Page 19: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

We thought:Nice idea, let‘s start!

13

Page 20: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

4 Requirements

14

Page 21: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

1Agile software

development with Scrum

15

Page 22: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 16

Page 23: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

1 product owner (customer)

16

Page 24: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

1 product owner (customer)

16

1 scrum master (myself)

Page 25: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

1 product owner (customer)

16

1 scrum master (myself)1 development team

Page 26: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Scrum

CancelGift wrap

Return

Productbacklog

17

Page 27: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Scrum

CancelGift wrap

Return

Sprint2 weeks

Productbacklog

17

Page 28: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Scrum

CancelGift wrap

Sprint2 weeks

Return

Sprint goal

Productbacklog

17

Page 29: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Scrum

CancelGift wrap

Sprint2 weeks

Return

Sprint goal

Sprint backlog

Productbacklog

17

Page 30: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Scrum

CancelGift wrap

Sprint2 weeks

Return

Sprint goal

Sprint backlog

Potentially shippableproduct increment

Productbacklog

17

Page 31: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Scrum

CancelGift wrap

Sprint2 weeks

Return

Sprint goal

Sprint backlog

Potentially shippableproduct increment

Productbacklog

Coupons

17

Page 32: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Scrum

Sprint2 weeks

Return

Sprint goal

Sprint backlog

Potentially shippableproduct increment

Productbacklog

Gift wrapCoupons

Cancel

17

Page 33: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Scrum

Sprint2 weeks

Return

Sprint goal

Sprint backlog

Potentially shippableproduct increment

Productbacklog

Gift wrapCoupons

Cancel

24 hours

17

Page 34: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

2Scalability

18

Page 35: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Classic web architecture

19

Page 36: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 20

Browser

Page 37: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 20

Appserver 1 Appserver 2

Browser

Page 38: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 20

Appserver 1 Appserver 2

DB SlaveDB Master

Browser

Page 39: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

We built a simple, scalable n-tier architecture.

21

Page 40: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Frontend NodesBackend Nodes

22

Page 41: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Frontend Nodes don‘t save anything. Never.

23

Page 42: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Backend Nodes can be sharded and/or clustered.

24

Page 43: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

The solution?The cloud.

25

http://www.flickr.com/photos/nirak/644337888/

Page 44: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 26

http://www.flickr.com/photos/nirak/644337888/

Page 45: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

3Simplicity

27

Page 46: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Automate as much as possible

28

Page 47: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

No new fancy things like Scala, node.js or MongoDB.

29

Page 48: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 30

Page 49: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

4Extensibility

31

Page 50: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Lean StartupWe can kick/create new

features all the time

32

Page 51: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Lean StartupDecoupled modules and

classes

33

Page 52: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Architecture

34

Page 53: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 35

Frontnode 1Varnish nginx

PHP 5.3

Frontnode 2Varnish nginx

PHP 5.3

Backendnode 3RabbitMQ

Apache SolrPHP 5.3

Backendnode 2MySQL Slave

MogileFSMemcached

PHP 5.3

Backendnode 1MySQL Master

MogileFSMemcached

PHP 5.3

Page 54: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Is this scalable?

36

Page 55: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 37

Frontnode 1Varnish nginx

PHP 5.3

Frontnode 2Varnish nginx

PHP 5.3

Backendnode 3RabbitMQ

Apache SolrPHP 5.3

Backendnode 2MySQL Slave

MogileFSMemcached

PHP 5.3

Backendnode 1MySQL Master

MogileFSMemcached

PHP 5.3

Page 56: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 38

Page 57: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 39

3

Page 58: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Page 59: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Page 60: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Page 61: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Page 62: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Page 63: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Page 64: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Page 65: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Page 66: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Multiple Frontnodes

Page 67: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 40

3

Multiple Frontnodes

Backend Sharding

Page 68: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Infrastructure

41

Page 69: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

One Ubuntu package to rule them all.

42

Page 70: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Development VMsJenkins CI ServerSelenium Server

Monitoring ServerTesting Server

43

Page 71: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Only on production:Frontend Nodes 11.04

Backend Nodes 10.04 LTS

44

http://www.flickr.com/photos/nirak/644337888/

Page 72: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 45

☁☁ ☁

Mayflower DMZ

Eucalyptus Cloud

amazon AWS

http://www.flickr.com/photos/nirak/644337888/

Page 73: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 46

☁☁ ☁

Mayflower DMZ

Eucalyptus Cloud

amazon AWSDeveloper Laptopwith Ubuntu VM

(Git repo + completesoftware stack)

http://www.flickr.com/photos/nirak/644337888/

Page 74: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 47

☁☁ ☁

Mayflower DMZ

Eucalyptus Cloud

amazon AWSGitorious ServerJenkins CI Server

Puppet MasterSelenium Server

http://www.flickr.com/photos/nirak/644337888/

Page 75: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 48

☁☁ ☁

Mayflower DMZ

Eucalyptus Cloud

amazon AWS

2 Frontnodes3 Backendnodes

Development MonitorStaging Monitor

http://www.flickr.com/photos/nirak/644337888/

Page 76: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 49

☁☁ ☁

Mayflower DMZ

Eucalyptus Cloud

amazon AWS2 Frontnodes2 Backendnodes

DrupalLive Monitor

http://www.flickr.com/photos/nirak/644337888/

Page 77: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 50

Configuration Management done with

http://www.flickr.com/photos/nirak/644337888/

Page 78: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 51

Configuration changes are on every VM in 5 Minutes.

#WIN

http://www.flickr.com/photos/nirak/644337888/

Page 79: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Application

52

Page 80: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Do you remember?

53

Page 81: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 54

Frontend 1Varnish nginx

PHP 5.3

Frontend 2Varnish nginx

PHP 5.3

Backendnode 3RabbitMQ

Apache SolrPHP 5.3

Backendnode 2MySQL Slave

MogileFSMemcached

PHP 5.3

Backendnode 1MySQL Master

MogileFSMemcached

PHP 5.3

Page 82: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 55

Backendnode 3RabbitMQ

Apache SolrPHP 5.3

Backendnode 2MySQL Slave

MogileFSMemcached

PHP 5.3

Backendnode 1MySQL Master

MogileFSMemcached

PHP 5.3

Page 83: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 55

Backendnode 3RabbitMQ

Apache SolrPHP 5.3Backendnode 2MySQL Slave

MogileFSMemcached

PHP 5.3

Backendnode 1MySQL Master

MogileFSMemcached

PHP 5.3

Page 84: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 56

Page 85: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Various transformations such as lowercasing, removing plurals, or stemming to increase relevancy.

57

Apache Solr XML REST API

ProfilesDE

Lucene Core

ProfilesEN

Lucene Core

Profilesi18n

Lucene Core

Autosuggest

Lucene Core

Page 86: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Search queries tokenized with a LL(1) Parser

implemented in PHP.58

Search string: „mapolis“

LL(1) parser

„q=mapolis&sort=name desc&fl=name,id,country“

Page 87: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Indexing is done with asynchronous jobs with

RabbitMQ.59

MySQL ApacheSolr

Profile informationautosuggestions

user generated content

Page 88: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 60

Page 89: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Why do we need a message broker?

61

Page 90: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Example:Editing your profile

62

Page 91: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 63

PHPApplication QueueExchange PHP CLI

Script

Publish Routes Consumes

MySQL ApacheSolr

sync

async

Page 92: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Why RabbitMQ?

64

Page 93: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 65

Backendnode 3RabbitMQ

Apache SolrPHP 5.3

Backendnode 2MySQL Slave

MogileFSMemcached

PHP 5.3

Backendnode 1MySQL Master

MogileFSMemcached

PHP 5.3

Page 94: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 65

Backendnode 3RabbitMQ

Apache SolrPHP 5.3

Backendnode 2MySQL Slave

MogileFSMemcached

PHP 5.3

Backendnode 1MySQL Master

MogileFSMemcached

PHP 5.3

Page 95: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

MogileFSan open source distributed filesystem

66

Page 96: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Application levelNo single point of failureAutomatic file replicationShared nothing architectureLocal filesystem agnostic

67

Page 97: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Storage Nodes(mogstored)

Storage Nodes(mogstored)

Trackers(mogilefsd)Trackers

(mogilefsd)

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 68

Client(API: Perl)

Trackers(mogilefsd)

Storage Nodes(mogstored)

Tracker‘s database(MySQL)

Page 98: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 69

Page 99: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 70

Application

Host 1 Host 2

MySQLMaster

MySQLSlave

Replication

R/W

Page 100: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 70

Application

Host 1 Host 2

MySQLMaster

MySQLSlave

Keepalive

Replication

R/WW

R

Page 101: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Some notes on our database architecture.

71

Page 102: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

We use MySQL as key/value storage.

72

Page 103: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

We implemented all relations in the application.

73

Page 104: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

We already prepared the database design for sharding

74

Page 105: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Benefits:Very simple, scalable and

flexible architecture

75

Page 106: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Drawbacks:More complexity in the

PHP code. But that‘s okay.

76

Page 107: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 77

Frontend 1Varnish nginx

PHP 5.3

Frontend 2Varnish nginx

PHP 5.3

Backendnode 3RabbitMQ

Apache SolrPHP 5.3

Backendnode 2MySQL Slave

MogileFSMemcached

PHP 5.3

Backendnode 1MySQL Master

MogileFSMemcached

PHP 5.3

Page 108: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 78

Frontend 1Varnish nginx

PHP 5.3

Frontend 2Varnish nginx

PHP 5.3

Page 109: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 78

Frontend 1Varnish nginx

PHP 5.3

Frontend 2Varnish nginx

PHP 5.3

Page 110: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 79

Page 111: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Doctrine 2is a data-mapper,not ActiveRecord.

80

Page 112: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

We use Doctrine 2 as ORM.And we think it‘s great.

81

Page 113: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

ORM with Doctrine 2

82

/** * @Entity * @Table(name="role") * */class Mapolis_Entity_Role{ /** * @Id * @Column(name="id", type="integer") * @generatedValue(strategy="IDENTITY") */ protected $_roleId;

/** * @Column(name="parent_id", type="integer") * @var int */ protected $_parentId;

Page 114: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Working with objects

83

/** * Saves the personal interests of user. * * @param Mapolis_Entity_Person $profile * * @return void */public function savePersonalInterests( Mapolis_Entity_Person $profile){ $this->getManager() ->getRepository(self::ENTITY_PERSON) ->update($profile);}

Page 115: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 84

★ Transactional write-behind (batch writes)★ Very fast for small UnitOfWorks

Working with objects/** * Deletes a building. * * @param Mapolis_Entity_Building $building * * @return boolean */ public function deleteBuilding($building) { $this->getManager()->remove($building); return $this->getManager()->flush(); }

Page 116: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 85

Working with objects/** * Show recent invitations * * @return array of $count recent invitations */public function recent($inviter, $count = 5){ $invitations = $this->getManager() ->getRepository(self::ENTITY_INVITATION) ->findBy( array('_inviterId' => $inviter), array('_modified' => 'DESC'), $count ); return $invitations;}

Page 117: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 86

Page 118: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Why did we choose Zend Framework?

87

Page 119: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

60 colleagues using Zend Framework in other projects.

88

Page 120: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

We use Zend Framework more like a component

library.

89

Page 121: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

We use Doctrine 2 instead of Zend_Db_Table.

90

Page 122: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

We built our own Autoloader.

91

Page 123: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

What did we use fromZend Framework?

92

Page 124: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Zend_ApplicationZend_Controller

Zend_ViewZend_Validate

Zend_TranslationZend_LocaleZend_Cache

93

Page 125: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 94

Frontnode 1Varnish nginx

PHP 5.3

Page 126: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

PHP 5.3 from Ubuntu 11.04

95

Page 127: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 96

Page 128: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 97

Page 129: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

HTTP Request

98

mapolis Core

mapolis Drupal

nginx on port 81 nginx on port 81

Varnish HTTP accelerator

Page 130: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

HTTP Request

98

mapolis Core

mapolis Drupal

nginx on port 81 nginx on port 81

Varnish HTTP accelerator

GET mapolis.com 80

Page 131: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

HTTP Request

98

mapolis Core

mapolis Drupal

nginx on port 81 nginx on port 81

Varnish HTTP accelerator

GET mapolis.com 80

Page 132: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

HTTP Request

98

mapolis Core

mapolis Drupal

nginx on port 81 nginx on port 81

Varnish HTTP accelerator

GET mapolis.com 80

Page 133: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

HTTP Request

99

mapolis Core

mapolis Drupal

nginx on port 81 nginx on port 81

Varnish HTTP accelerator

Page 134: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

HTTP Request

99

mapolis Core

mapolis Drupal

nginx on port 81 nginx on port 81

Varnish HTTP accelerator

GET mapolis.com/de/start 80

Page 135: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

HTTP Request

99

mapolis Core

mapolis Drupal

nginx on port 81 nginx on port 81

Varnish HTTP accelerator

GET mapolis.com/de/start 80

Page 136: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

HTTP Request

99

mapolis Core

mapolis Drupal

nginx on port 81 nginx on port 81

Varnish HTTP accelerator

GET mapolis.com/de/start 80

Page 137: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Frontend

100

Page 138: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

⊕Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 101

Page 139: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 102

JavaScript Framework

Page 140: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 103

Supported browsers

789

(10)

3.67

(latest)

14(latest)

5.05.1

(latest)(iOS)

Page 141: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Development

104

Page 142: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

The Team:1 Scrum Master

2 DevOps4 PHP/JS Developers1 Frontend Developer

105

Page 143: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Development Tools

106

Used IDE:Zend Studio, PhpStorm, vi and Textmate

Database change management:Liquibase

CSS helper:SASS / Compass

Page 144: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Development LaptopUbuntu VM withLocal Git repo

Complete software stack

ant <everything>107

Page 145: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Some ant commands

108

Page 146: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Some ant commands

108

$ ant db-development

Page 147: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Some ant commands

108

$ ant db-development

$ ant sync

Page 148: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Some ant commands

108

$ ant db-development

$ ant sync

$ ant phpunit

Page 149: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Some ant commands

108

$ ant db-development

$ ant sync

$ ant phpunit

$ ant jslint

Page 150: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Some ant commands

108

$ ant db-development

$ ant sync

$ ant phpunit

$ ant jslint

$ ant deb

Page 151: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Some ant commands

108

$ ant db-development

$ ant sync

$ ant phpunit

$ ant jslint

$ ant deb

$ ant build-vm

Page 152: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Typical commit workflow

109

Page 153: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Typical commit workflow

109

$ vi Foo.php$ ant phpunit$ ant jslint$ git add Foo.php$ git commit -m ”Bar”$ git pull$ git push

Page 154: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

<target name="phpunit" depends="db-test" description="Run all tests"> <exec executable="phpunit" failonerror="true"> <arg line="--configuration ${basedir}/tests/phpunit-verbose.xml ${basedir}/tests/AllTests.php" /> </exec></target>

110

ant phpunit

Page 155: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

One click deployment111

Page 156: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

And how does it look now?

112

Page 157: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I 113

Page 158: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Building a Cloud-based social network I Mayflower GmbH I 11th October 2011 I

Questions?

114

Page 159: Building a Cloud-based Social Network with Zend Framework and Doctrine 2

Thank you very much!

© 2011 Mayflower GmbH

Contact Thorsten [email protected]+49 89 242054-31@ThorstenRinne

Mayflower GmbHMannhardtstr. 680538 MünchenGermany

Please rate me @ http://joind.in/talk/view/3884


Recommended