Blackfire
Migration vers le protocol Oauth2
Blackfire
Who am I ?
Clément Bertillon
🏆 Certifié Symfony 2, 4, 6
🎉 Certifié Twig
https://twitter.com/BERTILLONClment
https://github.com/skigun
🏆 Certifié AWS
Blackfire
Enjeux
Maîtriser les coûts
Maximiser les revenus
Profiling
Temps
I/O
CPU
Mémoire
Esprit critique
Erreur de mesure
Xdebug
Blackfire
XHProf
tideways
Architecture
Démo time !
Mise en oeuvre
2ème partie
Performance = Feature
Industrialisation ?
Aller plus loin 🎉 KILLER FEATURES 🎉
Profiling CLI scripts
$ blackfire run php my-script.php
$ blackfire run php my-script.php --your-script-options and arguments
$ blackfire --samples 10 run php my-script.php
$ blackfire run php bin/console app:import-products
Share profile
Profiling AJAX request
Reminder: Distributed Profiling
Different languages
PHP
GO
Python
Distributed Profiling...
import-products.py
blackfire-python python import-products.py
PHP app
HTTP
CLI
Go app (CLI)
HTTP
Pyhton app (HTTP)
blackfire run sh -c 'wget --header="X-Blackfire-Query: $BLACKFIRE_QUERY" \
http://example.com/ > /dev/null'
Assertions
# blackfire.yaml
tests:
'All pages are fast':
path: '/.*'
assertions:
- 'main.wall_time < 50ms'
- 'main.peak_memory < 10mb'
- 'main.network_out < 10kb'
'Not too many SQL queries on the homepage':
path: '/(en|fr)/blog/'
assertions:
- 'metrics.sql.queries.count < 5'
- count
- wall_time
- cpu_time
- memory
- peak_memory
- network_in
- network_out
- io
Métriques
Going further
Scénarios
scenarios: |
#!blackfire-player
scenario
name 'Visitor'
visit url('/pricing')
name 'Pricing page'
visit url('/docs/introduction')
name 'Documentation'
scenario
name 'Authentication'
set user_login "my_login"
set user_password "my_password"
visit url('/login')
name 'Login page'
submit button('Log in')
name 'Submit log in form'
param _username user_login
param _password user_password
follow
name 'Login redirection'
expect current_url() == endpoint ~ '/'
expect body() matches '/Welcome ' ~ user_login ~ '/'
Builds et intégrations
Notification
Build comparaison
tests:
"Pages should not become slower":
path: "/.*"
assertions:
# time does not increase by more than 10%
- "percent(main.wall_time) < 10%"
# less than 2 additional SQL statements
- "diff(metrics.sql.queries.count) < 2"
Ce dont je n'ai pas parlé
- Documentation (dynamique 🎉)
- Installation / Docker
- Séries temporelles (timeline)
- SDK Blackfire
- Player
- Configuration SAAS / Pricing
- custom metrics
- Bypass CDN, varnish or loadbalancer
Merci
Blackfire
By skigun
Blackfire
- 350