SlideShare a Scribd company logo
SOA with PHP and Symfony
SOA with PHP and Symfony
SOA with PHP and Symfony
• Service-oriented architecture
• Communication over protocol (typically
network)
• Reusable components
• Services are a „black box” for a clients
• Each component is independent and self-
contained
• E-learning platform for primary school
• Addition to books
• Teaching by playing
– Gamification
– Team working
– Personalization (dynamic avatars)
– Virtual currency
SOA with PHP and Symfony
• Producer send message to RabbitMQ server
• Consumer can pick up selected messages
• Consumers are run in CLI
• Consumers can be run in different modes
• We are running consumers in endless loop
Problem: We have fixed date when project will
go live but team wants to work in Agile
methodology.
Solution: Spend few days/weeks for analysing
requirements and plan all sprints to the
deadline.
Problem: Data consistency between all
independent and self-contained components
Solution:
- Advanced Message Queuing Protocol. We have used RabbitMQ
- Communication with components using their external interface
- Using cron jobs for clearing data at nights
- Ignore this, it's not always important and critical for your application
Improve/explore : ESB - Enterprise Service Bus
Problem: How to generate reports based on two
or more self-contained components?
Solution: RabbitMQ
Problem: How to test all components? What about
integration tests of our orchestration level?
Solution:
• PHPUnit in components (mock external components)
• Automated tests written by our testers in SOAP UI
Improve:
• More tests 
• Behat
• PHPSpec
Problem: Performance of the whole application
doesn’t satisfy us
Solution:
• Disable unused components like: Session, Security
• Disable Doctrine logging
• Proper configuration of Symfony logger
• Always use Composer class loading optimization
• Too many listeners on HTTP requests
• Use APC, Xcache or any other PHP accelerator
• Use ApcClassLoader or XcacheClassLoader
• HTTP cache (Varnish)
Problem: Processing of messages was very slow
and memory leaks in consumers.
Solution: Clean up after yourself
• Use unset() method
• Doctrine methods: free(), detach(), clear()
Problem: MySQL errors:
• 2013: Lost connection to MySQL server
• 2006: MySQL server has gone away
• 2003: Can't connect to MySQL server
Solution: Catch all those exceptions and try to
reconnect to the database server. We have set
up also some timeout between all retries.
Problem: Can I trust consumer scripts? What with
situation when consumer will have problem with
connection with database etc. Exception is thrown
and message can be lost.
Solution:
• Creat failover files
• Catch all exceptions
• Log message into that file.
• Create mechanism for processing failed messages
Problem: We are using Memcached but QPS
(Query Per Second) of the MySQL server doesn't
satisfy us
Solution: Configure read/write split in your
database and prepare separate connections in
your application
Problem: Performance of the database layer still doesn’t
satisfy us
Solution: Monitor database queries during development
How:
• Use Symfony profiler
• Log all database queries to the temporary file on your
dev environment. Then use „tail –f” command to
monitor all queries during requests
• Use EXPLAIN on more complicated queries
Problem: Doctrine performance is unsatisfactory.
Moreover Doctrine create many unnecessary queries.
Solution:
• Use DQL instead Doctrine findAll() method
• Use native query for more complicated queries
• Avoid entity mapping when it’s not necessary
(hydration mode)
• Use „extra lazy” fetching strategy for associations
• For big collections fetch only necessary fields
Problem: How to monitor application? How detect
problems before they will become a serious?
Solution: Monitoring software
• New Relic
• Nagios
Improve: Logstash + Kibana + Elasticsearch
• Symfony 2.3
• PHPUnit
• SoapUI
• RabbitMQ
• MySQL (Percona)
• Elasticsearch
• Jenkins
• Memcached
• Nagios
• New Relic
• First project on new framework
• First use of Doctrine
• Run all Symfony2 console commands with --env=prod parameter
• Write your own wrappers to all main external libraries
• Use Vagrant or Docker
• Run load tests on filled database
• Automate your processes (ie. Ant + Jenkins)
• Add created_date and modified_date to all tables (use MySQL triggers)
Quetions?

More Related Content

What's hot (20)

PPSX
Javascript variables and datatypes
Varun C M
 
PPTX
Clean architecture
andbed
 
PDF
Ontology development
Stefano Bragaglia
 
PPTX
Introduction to xampp
Jin Castor
 
PDF
Tp5 - WINDEV
Lilia Sfaxi
 
PPTX
Web Designing
BALUJAINSTITUTE
 
PDF
Tech talk on Tailwind CSS
Squareboat
 
PDF
Présentation de Django @ Orange Labs (FR)
Martin Latrille
 
PDF
Web Development with HTML5, CSS3 & JavaScript
Edureka!
 
PDF
Les bases de l'HTML / CSS
Samuel Robert
 
PDF
Tailwind CSS - KanpurJS
Naveen Kharwar
 
PDF
API : l'architecture REST
Fadel Chafai
 
PDF
HTML CSS Basics
Mai Moustafa
 
PDF
Développement d'un site web de E-Commerce avec PHP (Première Partie)
ENSET, Université Hassan II Casablanca
 
PDF
PHP Basic & Variables
M.Zalmai Rahmani
 
PPTX
Json
Steve Fort
 
PPTX
Spring HATEOAS
Yoann Buch
 
PPT
CSS
Sunil OS
 
PPTX
JavaScript Basic
Finsa Nurpandi
 
PDF
O Papel do desenvolvedor Front End
Rael Max
 
Javascript variables and datatypes
Varun C M
 
Clean architecture
andbed
 
Ontology development
Stefano Bragaglia
 
Introduction to xampp
Jin Castor
 
Tp5 - WINDEV
Lilia Sfaxi
 
Web Designing
BALUJAINSTITUTE
 
Tech talk on Tailwind CSS
Squareboat
 
Présentation de Django @ Orange Labs (FR)
Martin Latrille
 
Web Development with HTML5, CSS3 & JavaScript
Edureka!
 
Les bases de l'HTML / CSS
Samuel Robert
 
Tailwind CSS - KanpurJS
Naveen Kharwar
 
API : l'architecture REST
Fadel Chafai
 
HTML CSS Basics
Mai Moustafa
 
Développement d'un site web de E-Commerce avec PHP (Première Partie)
ENSET, Université Hassan II Casablanca
 
PHP Basic & Variables
M.Zalmai Rahmani
 
Spring HATEOAS
Yoann Buch
 
CSS
Sunil OS
 
JavaScript Basic
Finsa Nurpandi
 
O Papel do desenvolvedor Front End
Rael Max
 

Viewers also liked (20)

PDF
Symfony in microservice architecture
Daniele D'Angeli
 
PPTX
A SOA approximation on symfony
Joseluis Laso
 
PDF
Services Oriented Architecture with PHP and MySQL
Joe Stump
 
PDF
Microservice architecture
Xavier Fornés Arrabal
 
PDF
Go from PHP engineer's perspective
Sobit Akhmedov
 
PDF
Genesi di una tecnologia, dalla ricerca all'industria...
italianaSoftware
 
PDF
Microservizi, scenari del prossimo e del lontano futuro
italianaSoftware
 
PDF
Industria 4.0 - Come verrà rivoluzionata l'industria italiana
italianaSoftware
 
PPTX
ASP.NET MVC Fundamental
ldcphuc
 
PDF
La rivoluzione dei Microservizi
italianaSoftware
 
PDF
(micro)services avec Symfony et Tolerance
Samuel ROZE
 
PDF
Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...
italianaSoftware
 
PDF
Behavioral driven development with Behat
Promet Source
 
PDF
Microservice Teststrategie mit Symfony2
Per Bernhardt
 
PPTX
A soa approximation on symfony
Carlos Agudo Belloso
 
PDF
PHP is the King, nodejs the prince and python the fool
Alessandro Cinelli (cirpo)
 
KEY
Telephony with OpenShift Twilio and MongoDB
Mark Atwood
 
PDF
Devops, Cloud e Container
italianaSoftware
 
PPTX
Architecture orientée service (SOA)
Klee Group
 
PPTX
What mom never told you about bundle configurations - Symfony Live Paris 2012
D
 
Symfony in microservice architecture
Daniele D'Angeli
 
A SOA approximation on symfony
Joseluis Laso
 
Services Oriented Architecture with PHP and MySQL
Joe Stump
 
Microservice architecture
Xavier Fornés Arrabal
 
Go from PHP engineer's perspective
Sobit Akhmedov
 
Genesi di una tecnologia, dalla ricerca all'industria...
italianaSoftware
 
Microservizi, scenari del prossimo e del lontano futuro
italianaSoftware
 
Industria 4.0 - Come verrà rivoluzionata l'industria italiana
italianaSoftware
 
ASP.NET MVC Fundamental
ldcphuc
 
La rivoluzione dei Microservizi
italianaSoftware
 
(micro)services avec Symfony et Tolerance
Samuel ROZE
 
Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...
italianaSoftware
 
Behavioral driven development with Behat
Promet Source
 
Microservice Teststrategie mit Symfony2
Per Bernhardt
 
A soa approximation on symfony
Carlos Agudo Belloso
 
PHP is the King, nodejs the prince and python the fool
Alessandro Cinelli (cirpo)
 
Telephony with OpenShift Twilio and MongoDB
Mark Atwood
 
Devops, Cloud e Container
italianaSoftware
 
Architecture orientée service (SOA)
Klee Group
 
What mom never told you about bundle configurations - Symfony Live Paris 2012
D
 
Ad

Similar to SOA with PHP and Symfony (20)

PDF
PHP At 5000 Requests Per Second: Hootsuite’s Scaling Story
vanphp
 
PDF
2019 PHP Serbia - Boosting your performance with Blackfire
Marko Mitranić
 
PDF
Scaling with Symfony - PHP UK
Ricard Clau
 
PDF
Symfony War Stories
Jakub Zalas
 
PDF
DDD with Behat
Anton Serdyuk
 
PDF
2019 StartIT - Boosting your performance with Blackfire
Marko Mitranić
 
PDF
Tool up your lamp stack
AgileOnTheBeach
 
PDF
Tool Up Your LAMP Stack
Lorna Mitchell
 
ODP
Php Site Optimization
Amit Kejriwal
 
PPT
Opac labs overview-pr1.0
opaclabs
 
PDF
Full stack development
Pavlo Iuriichuk
 
PPT
Software Engineering in PHP
M A Hossain Tonu
 
PDF
Fixing twitter
Roger Xia
 
PDF
Fixing_Twitter
liujianrong
 
PDF
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
smallerror
 
PDF
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
xlight
 
PPT
scale_perf_best_practices
webuploader
 
PPTX
Best Practices in PHP Application Delivery
Ana Maria Valarezo
 
PPT
How to run an Enterprise PHP Shop
Jim Plush
 
PPTX
Agile Tools for PHP
philipjting
 
PHP At 5000 Requests Per Second: Hootsuite’s Scaling Story
vanphp
 
2019 PHP Serbia - Boosting your performance with Blackfire
Marko Mitranić
 
Scaling with Symfony - PHP UK
Ricard Clau
 
Symfony War Stories
Jakub Zalas
 
DDD with Behat
Anton Serdyuk
 
2019 StartIT - Boosting your performance with Blackfire
Marko Mitranić
 
Tool up your lamp stack
AgileOnTheBeach
 
Tool Up Your LAMP Stack
Lorna Mitchell
 
Php Site Optimization
Amit Kejriwal
 
Opac labs overview-pr1.0
opaclabs
 
Full stack development
Pavlo Iuriichuk
 
Software Engineering in PHP
M A Hossain Tonu
 
Fixing twitter
Roger Xia
 
Fixing_Twitter
liujianrong
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
smallerror
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
xlight
 
scale_perf_best_practices
webuploader
 
Best Practices in PHP Application Delivery
Ana Maria Valarezo
 
How to run an Enterprise PHP Shop
Jim Plush
 
Agile Tools for PHP
philipjting
 
Ad

Recently uploaded (20)

PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PPTX
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 

SOA with PHP and Symfony

  • 4. • Service-oriented architecture • Communication over protocol (typically network) • Reusable components • Services are a „black box” for a clients • Each component is independent and self- contained
  • 5. • E-learning platform for primary school • Addition to books • Teaching by playing – Gamification – Team working – Personalization (dynamic avatars) – Virtual currency
  • 7. • Producer send message to RabbitMQ server • Consumer can pick up selected messages • Consumers are run in CLI • Consumers can be run in different modes • We are running consumers in endless loop
  • 8. Problem: We have fixed date when project will go live but team wants to work in Agile methodology. Solution: Spend few days/weeks for analysing requirements and plan all sprints to the deadline.
  • 9. Problem: Data consistency between all independent and self-contained components Solution: - Advanced Message Queuing Protocol. We have used RabbitMQ - Communication with components using their external interface - Using cron jobs for clearing data at nights - Ignore this, it's not always important and critical for your application Improve/explore : ESB - Enterprise Service Bus
  • 10. Problem: How to generate reports based on two or more self-contained components? Solution: RabbitMQ
  • 11. Problem: How to test all components? What about integration tests of our orchestration level? Solution: • PHPUnit in components (mock external components) • Automated tests written by our testers in SOAP UI Improve: • More tests  • Behat • PHPSpec
  • 12. Problem: Performance of the whole application doesn’t satisfy us Solution: • Disable unused components like: Session, Security • Disable Doctrine logging • Proper configuration of Symfony logger • Always use Composer class loading optimization • Too many listeners on HTTP requests • Use APC, Xcache or any other PHP accelerator • Use ApcClassLoader or XcacheClassLoader • HTTP cache (Varnish)
  • 13. Problem: Processing of messages was very slow and memory leaks in consumers. Solution: Clean up after yourself • Use unset() method • Doctrine methods: free(), detach(), clear()
  • 14. Problem: MySQL errors: • 2013: Lost connection to MySQL server • 2006: MySQL server has gone away • 2003: Can't connect to MySQL server Solution: Catch all those exceptions and try to reconnect to the database server. We have set up also some timeout between all retries.
  • 15. Problem: Can I trust consumer scripts? What with situation when consumer will have problem with connection with database etc. Exception is thrown and message can be lost. Solution: • Creat failover files • Catch all exceptions • Log message into that file. • Create mechanism for processing failed messages
  • 16. Problem: We are using Memcached but QPS (Query Per Second) of the MySQL server doesn't satisfy us Solution: Configure read/write split in your database and prepare separate connections in your application
  • 17. Problem: Performance of the database layer still doesn’t satisfy us Solution: Monitor database queries during development How: • Use Symfony profiler • Log all database queries to the temporary file on your dev environment. Then use „tail –f” command to monitor all queries during requests • Use EXPLAIN on more complicated queries
  • 18. Problem: Doctrine performance is unsatisfactory. Moreover Doctrine create many unnecessary queries. Solution: • Use DQL instead Doctrine findAll() method • Use native query for more complicated queries • Avoid entity mapping when it’s not necessary (hydration mode) • Use „extra lazy” fetching strategy for associations • For big collections fetch only necessary fields
  • 19. Problem: How to monitor application? How detect problems before they will become a serious? Solution: Monitoring software • New Relic • Nagios Improve: Logstash + Kibana + Elasticsearch
  • 20. • Symfony 2.3 • PHPUnit • SoapUI • RabbitMQ • MySQL (Percona) • Elasticsearch • Jenkins • Memcached • Nagios • New Relic
  • 21. • First project on new framework • First use of Doctrine
  • 22. • Run all Symfony2 console commands with --env=prod parameter • Write your own wrappers to all main external libraries • Use Vagrant or Docker • Run load tests on filled database • Automate your processes (ie. Ant + Jenkins) • Add created_date and modified_date to all tables (use MySQL triggers)

Editor's Notes

  • #3: Nazywam się Michał Schroeder, dla zainteresowanych podaję też mój adres e-mail. Jakby ktoś się wstydził zagadać do mnie dzisiaj w przerwie, bądź też po prezentacjach, to może śmiało skontaktować się ze mną mailowo.
  • #4: Opowiem Wam dzisiaj trochę o moim projekcie w którym uczestniczyłem przez ostatnie 12 miesięcy. W prezentacji poruszę kilka różnych tematów i zagadnień. Będzie o bazach danych, wydajności, Symfony2, architekturze i asynchronicznej komunikacji między niezależnymi komponentami. Część rzeczy będzie uniwersalna, które będzie można wykorzystać w projektach nie tylko opartych na architekturze SOA. Wiele rzeczy może się niektórym wydać oczywista, ale mam nadzieję że każdy wyniesie z tej prezentacji coś nowego i pożytecznego. Z drugiej strony nie będę się też wdawał w niskopoziomowe szczegóły i tłumaczył np. co to jest Vagrant, REST czy jak się powinno korzystać z tych narzędzi. W większości były już prezentacje na te tematy na poprzednich edycjach PHPers. Polecam notować sobie ewentualne hasła, które Was zainteresują i wtedy w przerwie bądź po prezentacjach dopytać o szczegóły jakie Was interesują. Aby nie tracić czasu, zaczynamy!
  • #5: Zacznę od odpowiedzi na pytanie, co to jest SOA dla tych osób które nie miały styczności z tym pojęciem. Jest to service oriented architecture czyli architektura oparta o serwisy czyli małe klocuszki z których budujemy większa aplikację Komponenty komunikują się pomiędzy sobą przez ustalony protokół, przeważnie jest to protokół sieciowy w przypadku naszej aplikacji był to REST Głównym założeniem tej architektury jest to aby każdy komponent był reużywalny (np. komponent użytkownika, szkoły, klasy) Każdy serwis jest „czarną skrzynką” dla klientów, klient nie wie jak jakaś funkcjonalność jest zaimplementowana, w jakiej technologii itd. Dla niego ważne jest to że spełnia on swoją rolę. Każdy serwis jest też samodzielny i niezależny co oznacza np. bark powiązań na poziomie bazy danych. Brak JOIN-ów co powoduje zwiększoną ilość zapytań do bazy.
  • #7: - Omówienie diagramu. - SOA była dla nas nowa, pierwsze nasze podejście do takiej architektury. - Frontend robiła firma zewnętrzna w Javie
  • #11: Jest to tylko w draft więc nie można się na to zapinać bo nie wiadomo czy nie zostanie to np. docelowo usunięte lub nie pojawi się w ostatecznej specyfikacji pod inną nazwą Problem z narzędziami które to wspierają
  • #12: Jak już wspomniałem wcześniej, na wcześniejszym jednym z pierwszych slajdów, architektura SOA opiera się na niezależnych komponentach. Jak zatem zapewnić spójność danych pomiędzy wszystkimi komponentami? Łatwo sobie wyobrazić sytuacje w której np. usuwamy użytkownika z naszego systemu ale cały czas zostają powiązania użytkownik-klasa czy użytkownik-szkoła. Myśmy w naszym projekcie wykorzystali do tego oprogramowanie RabbitMQ. Jak to działa? W skrócie jest to tak że mamy główny serwer RabbitMQ zainstalowany na serwerze który nasłuchuje na wiadomości. Przykładowo w komponencie USER po usunięciu użytkownika wysyłamy do tego serwera wiadomość „użytkownik został usunięty” wraz z jego ID. Serwer przekazuje dalej w świat taką wiadomość. Dodatkowo w systemie jest 5 innych komponentów, które nasłuchują takiej wiadomości. Po odebraniu jej mogą wykonać jakieś kroki, w naszym przypadku np. pousuwać powiązania użytkownika z szkołą, klasą itd. Czasem używaliśmy interfejsów które wystawiają poszczególne komponenty aby wykonać dodatkowo jakieś zadanie np. przy usuwaniu użytkownika. Minusem tego jest to że w ten sposób wiążemy komponenty, tzn komponent USER musi wiedzieć że jest tam gdzieś komponent szkoła czy klasa gdzie trzeba też tego użytkownika usunąć. Dodatkowo jest to też czas potrzebny na wszystkie żądania. Kolejnym rozwiązaniem jest możliwość stworzenia zadań CRON które w nocy będą usuwać wszystkie zbędne „śmieci” Czasem bywa też tak że takie powiązania i „śmieci” nam nie przeszkadzają w żaden sposób. Wtedy po prostu się tym nie przejmujemy.
  • #13: Problem jaki się pojawił to jak wygenerować raport, który bazuje na dwóch lub więcej komponentach? Załóżmy że mamy wyświetlić raport wyników ucznia z danej szkoły w którym będzie imię, nazwisko, klasa do której należy oraz wyniki ucznia wg przedmiotów. W normalnej jednoklockowej aplikacji wykorzystalibyśmy JOIN-y na bazie danych. Jednak tutaj nie możemy tego zrobić, więc jak w takim razie podejść do tematu? Po raz kolejny rozwiązaniem tego problemu okazał się w naszym wypadku RabbitMQ. Załóżmy że mamy ucznia który sobie zapisuje wyniki swojego zadania. Wyniki te wysyłamy na kolejkę RabbitMQ i komponent RESULT zapomina o tym. Z tej kolejki dane o wyniku pobiera 5 raportów, są to osobne consumery, które zapisują lub aktualizują swoje dane.
  • #15: Wyłączamy niepotrzebne i nieużywane w naszej aplikacji komponenty Wyłączamy logowanie w Doctrine Okroić logowanie Symfony2 Zbyt duża ilość listnerów na requesty HTTP Używać cache przy autoloaderze
  • #16: Kolejny problem jaki się pojawił był związany z RabbitMQ. W sumie to nie był problem z Rabbitem a naszym podejściem do pisania consumerów. Potraktowaliśmy konsumery jak typową aplikację webową gdzie mamy request do serwera, coś tam przetwarzamy, pobieramy z bazy czy coś do niej zapisujemy wysyłamy odpowiedź i to koniec życia requestu. Przyczyn było kilka jednak najważniejsza