88
PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r 25+ million members in 22 countries; How to scale with Symfony2? Benjamin De Bernardi - Olivier Dolbeau

Olivier Dolbeau, Benjamin De Bernardi "25+ millions members in 22 countries, how to scale with Symfony 2?"

  • Upload
    fwdays

  • View
    268

  • Download
    0

Embed Size (px)

Citation preview

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

25+ million members in 22 countries; How to scale with Symfony2?Benjamin De Bernardi - Olivier Dolbeau

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

@genes0r

Lead Engineer

Benjamin De Bernardi

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Olivier Dolbeau

@odolbeau

Web Architect

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

100€ 25€ 25€ 25€

100€ 25€

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

15M

20M

10M

5M

1M

2015201420132012201120102009

25M

mem

bers worldw

ide

Over 25 million members and growing

1.5 million+joining each month

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

1. The past

2. Why symfony?

3. How?

○ How to deal with 22 countries?

○ Why do we love the EventDispatcher?

○ Performance & asynchronous

○ Doctrine

4. Traps

5. Here & now

Talk overview:

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

The past

1

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

v1.0

2005-2006

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

v2.0

2008-2011(2014)

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

2010

New countries

2011 2012

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

3 770 lines of code

69 functions

926 lines for the longest one.

lib.trip.php

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Homemade framework

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

NO TESTS

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

v3.0

2011 - today

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

2012 2013 2014 2015

New countries

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Why Symfony?

2

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Huge community.

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Attract new people

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

How?3

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

22 countries, how can we manage specificities?

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

➔ One codebase for each country?

➔ Conditions everywhere in the code?

➔ Configuration and Context?

22 countries: how can we manage specificities?

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

➔ One codebase for each country?

➔ Conditions everywhere in the code?

➔ Configuration and Context?

22 countries: how can we manage specificities?

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Web request Listener

Symfony parse & build a Request object

Build Context from configuration and Request

Response

22 countries: Configuration & Context

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

1 file for each country

100+ configuration keys

Inheritance

Toggling of features

Metadata

22 countries: Configuration & Context

Configuration:

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

22 countries: Configuration & Context

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

22 countries: Configuration & Context

Get config from a controller:

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

22 countries: Configuration & Context

Get config from a controller:

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

22 countries: Configuration & Context

Get config from the view:

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

22 countries: Configuration & Context

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Lot of code, how to keep events clean?

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

➔ Symfony built-in EventDispatcher

Lot of code, how to keep events clean?

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

EventDispatcher how it works:

Lot of code, how to keep events clean?

Event DispatcherEventListener

Listener

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

User A rates User B:

Lot of code, how to keep events clean?

Event DispatcherNew Rating

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

User A rates User B:

Lot of code, how to keep events clean?

Event DispatcherNew Rating

Grade Listener

Recalculate the grade of both users

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

User A rates User B:

Lot of code, how to keep events clean?

Event DispatcherNew Rating

Grade Listener

Moderation Listener

Ask for content verification

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Lot of code, how to keep events clean?

Sending the event:

● Sent from anywhere

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Lot of code, how to keep events clean?

Registering a listener:

● Update a configuration file

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Lot of code, how to keep events clean?

Listening the event:

● Inside a registered listener

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

+ Perfect to decouple code inside the app.+ Small listeners, easy to understand, to test.+ Easy to dispatch events outside application.

- Sometimes, hard to understand the flow.- Need tools/rules to keep a common logic.

Dispatching events Pros/Cons

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

■ Avoid Entities

■ Keep listener small and dedicated to a single task

■ Limit dependencies

Dispatching events one last thing:

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

High traffic, how to improve performance?

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Problem:The website is a bit slow

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Solution:All side tasks can be done asynchronously

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Solution:All side tasks can be done asynchronously

Tasks:

● Find a tool to transmit messages● Create workers ● Use the event dispatcher

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Asynchronous jobs everywhere.

● Performance● Job splitting

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Dispatch Event with the EventDispatcher.

● Sent from anywhere

● Listened with RabbitMQ or internal Listeners

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Check eventName & event interface

Dispatch the event in the application

Decorated EventDispatcher.

Publish to RabbitMQ

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Send an Email

● Sent from anywhere

● Built using the User context in a dedicated worker

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

+ Perfect to decouple code+ Small workers, easy to understand+ Easy to dispatch events outside application+ Separate projects & deployment+ Scalable!

- Learning curve- Need tools/rules to keep a common logic- Hard to test a complete flow with mock/stubs- Mapping is time consuming

Asynchronous event & process Pros/Cons

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

129 workers

Mail

SMS

Publication

Push

IndexationImage

resizing

Alerts

Profile completion

I love workers!

Payment

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Asynchronous workers:

Infrastructure:

■ PHP

■ Supervisord

Code:

■ Symfony command inside the main app

■ Standalone app + Symfony components

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Asynchronous workers, Symfony:

+ Access to Entities+ Every already defined services

- Entire Symfony- Not dedicated- Deployed along the website- Not the main goal of Symfony- High memory usage

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Asynchronous workers, Standalone:

+ Dedicated to a single task/type+ Maintainable small code+ Deployed independently+ Easily created & tested

- Component splitting from the codebase- More monitoring

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

About Doctrine...

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

It’s not a troll.

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Code fast!

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Code well?

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Queries from the view!

Hard to control cache strategy

No integrity check.

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Doctrine Pros/Cons

+ Quick to bootstrap a new project+ Quick to code a small project

- Hard to respect MVC- Hard to deal with cache- Hard to deal with integrity problems in DB- Not made to decouple code (relations).- Not made to scale.

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

We fell in traps...

4

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Never pimp your kernel!

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Before

EnvironmentDebug?

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Before

After

Branding Media

EnvironmentDebug?

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Put everything inthe same place can be

dangerous!

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

This is our application.

This is our business code.

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Don’t mess with your tools!

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

We fell in traps...

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

We had parachutes!

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Problems solved?

+ Use symfony only as a tool+ Work a lot on onboarding

+ Try to decouple everything with components

- We still have one big application- As everyone, we lack of documentation

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

5

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

40 269Commits

There are “only” 18 952 commits for symfony/symfony

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

561 851NCLOC

There are “only” 278 909 NCLOC for symfony/symfony

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

~ 20 minutes to run all the unit/functional tests

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

~ 30minutes to deploy the application

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

Too big!

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

We’re working on it! ;)

PHP Frameworks Day 2016 - 25+ million members in 22 countries; How to scale with Symfony2 @odolbeau & @genes0r

We’re hiring!In Paris & Warsaw!http://blbl.cr/dreamjobs