SymfonyCon Lisbon summary
Find the original version of this article here.
As every year, is beginning the SymfonyCon! Let’s review the highlights of this huge conference.
We started this huge conference with Fabien Potencier’s keynote.
So first question asked, what are your dev server environment? The state is that every one of these are difficult to maintain and you want a fast and convenient way to develop and deploy. When you are using your PHP built-in server there is only one connection at a time, no HTTP2, no SSL, etc. Well a new Symfony binary is now available. It’s coming along with the
SymfonyCloud platform offer and has no dependency (even PHP). It comes with a lot of new shortcuts to test in a local environment. It now uses
php-fpm when available otherwise
http/2 Push HTTP Preload and works with any PHP project. It manages multiple versions of PHP, because usually you have multiple versions on your computer. It is fully integrated with Symfony Cloud. The expectation is, if you can manage to make your project work in your local environment, you should be able to make it running in your hosted environment without any other ops configuration.
Here are some console commands:
symfony local:php:listallows you to find which versions of PHP you can use. If you want to change, just set a
.php-versionfile in your project root directory containing the version you want to use. You can create a php.ini file on your project root directory if you want to specify some configuration only for your current project.
symfony server:logto tail your logs. They are parsed and converted into json. This way you can have something way cleaner on your console. If your project is using TLS (and if not it should) you should have it in your development environment.
symfony ca:installcreates for you a certificate for
127.0.0.1/ …, registers it in Firefox for you. You’ll be able to find them in
~/.symfony/certs. So from now on you’ve got HTTPS in no time.
symfony proxy:startis meant to help you if you are running with specific domain names, subdomains names. It works with the next command.
symfony proxy:domain:attach example.com --dir=/some/dirby default it’s supporting .wip tld. You can run with symfony run different commands in the server. Add -d and you have it in background.
symfony env:create some-bugopens a branch in local.
symfony open:remotecopies your production env in a new url.
symfony logallows you to check your logs and Symfony debug allows you to switch in dev mode.
symfony tunnel:openallows you to work locally with your debug environment database freshly created.
Tobias Nyholm is replacing Michelle Sanver to talk about graphs
Unfortunately we could not attend to Michelle’s talk about workflow in e-commerce websites. Anyhow, Tobias has showed us once again the almighty power of graphs and that you can always think of a workflow for your actions. We can assist at an already seen but always nice to hear talk of how the workflow component works and how you can leverage its power in the best ways. Definitely a component you should take a look at if you did not already.
Next speaker I’ve seen is Samuel Rozé with the Messenger Component
Samuel already did some talks about Messenger in the past. The first one was 6 months ago. What happened in 6 months? Well, the real troubles start when your Open Source project is released and used in real projects, and mostly when it is used on any other project than yours. In 6 months new needs emerged and a lot of new possibilities were added in the meantime. Ok, now, what is the Messenger component about? If you want to add some structure separation in your code. Let’s say cqs pattern or hexagonal pattern, you definitely need a way to let your different domains to be able to speak to each other. But you don’t want to have any strong bounds between them. Messenger is the kind of component you would use. Whether you use a monolithic application or a micro-services based application does not matter. It has been designed to be used with different services and even with some message queues (rabbitmq, kaf, etc). I strongly recommend you to give it a try !
The first speaker in the afternoon is Nicole Cordes and will present static php analyses tools.
If you want to improve drastically your code base, its quality, its maintainability and avoid some basics mistakes, there are some tools for you. Nicole is giving us a full tour. The first one is
PHPSTAN. This tool is able to analyse your code and detect according to different levels of configuration the flaws in your code, starting from bad methods or variable usages and declarations to bad architectural designs. Second one is
PHPMD. This one allows you to analyse your code structure and extract some measurements. Third one is
Code Climate, to grab for you the number of lines of codes and it’s complexity. Although I would recommend using
PHP Metrics, which is in my opinion more complete. One cool thing of code climate is that it has some integration with most of CI systems. Next one is
SonarCloud. If it happens that you already know
Sonar Cube this one is the saas version. It allows you to find flaws in your code complexity. I would add myself some names to this, as for example
symfony security checker.
Jordy Borgiano is bringing to us his experience about servers availability.
Developers and technical teams usually don’t feel any side effect concerning latency or availability. Indeed you often work on a private environment which is not reached by thousand of persons, because sometimes (usually?) they use servers in the same geographical region. Their customers in the other hand can be disappointed when it comes to crossing an ocean. The solution can be to scale up you architecture but you should do it with some minimal intelligence, for instance you can start using a CDN which can serve your data from different regions.
The use of
Redis sessions. The architecture is simply one primary region which is used for write, and read were handled by replicas. But it was quite slow.
Came with the idea of proxying the write requests from the local replica to primary region session forwarded in HTTP headers. Client IP forwarding using proxy headers in HTTPS and VPC peering for security. Of course with signed request/response. Finally a failover to replica processing if proxying fails. Problem is the proxies had to create a new connection every time. Which were slowing down the process, but creating connection pooling is a workaround. Downsides are that network sometime fails random requests, as well with
AWS ELB which somehow times out on random requests. Session size is limited in headers, and if the primary is down, it only leaves you read-only capabilities. With this solution you could achieve 99,5% availability with a TTFB of 120ms. To achieve a 100% (is it possible?) you could think of having a multi master postgres/mysql network.
Nice to see some real use cases of multi-region architecture.
Next topic is API Platform with Antoine Bluchet
This time it’s not Kévin Dunglas who is talking about api-platform but Antoine. You might already know api-platform, maybe you even used it on a project. But here Antoine is demonstrating that you can leverage a lot of Symfony component into api-platform. For instance the Workflow component or the Messenger component. With the help of Symfony 4 and recipes, you have almost nothing to do. Everything is pre-configured, you only need to tweak the configuration to fit your needs. After seeing a demonstration of a pizza delivery system with these two components, the thing to have in mind is: do not get stuck only with a solution when you can combine them.
It’s now time to talk about Webpack Encore
Ryan Weaver is the creator of
Last talk I’ve seen is one from Kévin Dunglas about Mercure
Mercure is a protocol allowing to push data updates to web browsers and other HTTP clients leveraging the strength of HTTP2, (which websocket can’t and won’t do), bringing to you a secure and fast multiplexed pub/sub system. Kévin did a demonstration through a application available at symfonycon.les-tilleuls.coop which is a joined-in clone where you can comment and rate talks during a conference and interact by pushing smiley buttons. These buttons would trigger an animation that you can see on every screen subscribed to the mercure hub. A tool to keep an eye on!
See you on next conference!
Originally published at gregoirehebert.github.io on December 12, 2018.