Share
Embed
25+ million members in 22 countries, how to scale with Symfony2
Talk given with Olivier Dolbeau (@odolbeau) at PHP Frameworks day 2016 in Kiev, Ukraine.
Benjamin De Bernardi
September 03, 2016
Transcript
88 slides
-
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 2015 2014 2013 2012 2011 2010 2009 25M members worldwide 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 Dispatcher Event Listener 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 Dispatcher New 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 Dispatcher New 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 Dispatcher New 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 Indexation Image 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 Environment Debug? -
PHP Frameworks Day 2016 - 25+ million members in 22
countries; How to scale with Symfony2 @odolbeau & @genes0r Before After Branding Media Environment Debug? -
PHP Frameworks Day 2016 - 25+ million members in 22
countries; How to scale with Symfony2 @odolbeau & @genes0r Put everything in the 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 269 Commits 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 851 NCLOC 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 ~ 30 minutes 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