DIE WORDPRESS-HERAUSFORDERUNG · Typo 3 Thunder Wordpress . New CMS. Wordpress Evaluierung...
Transcript of DIE WORDPRESS-HERAUSFORDERUNG · Typo 3 Thunder Wordpress . New CMS. Wordpress Evaluierung...
DIE WORDPRESS-HERAUSFORDERUNG
krone.at - learned lessons
Reichweite
5.174.628Unique ClientsÖWA Basic 02 2018
32.141.875Unique ClientsÖWA Basic 02 2018
99.504.198Page ImpressionsÖWA Basic 02 2018
Technische Fakten
~ 850.000Lines of Code
~ 1.8Deploys / Tag
4-6TB / tag
● CMS aus dem Jahr 2001/2002
● Proprietäre closed source Script-Sprache
● Oracle Datenbank
● gigantischer Monolith
● skaliert schlecht
Ausgangssituation
Legacy!
Legacy!
Goal!
● Neues CMS○ von 0 auf! legacy support
● Offene Standards○ PHP, node, …
● Skalierbar○ 0 single-point-of-failures
● state-of-the art
● Oracle Lizenz einsparen
New CMS
● self-made
● Typo 3
● Thunder
● Wordpress
New CMS
Wordpress Evaluierung
● wp_postmeta
● coding standards and code quality
● MySQL
● Filters/Actions
Der Plan
Der Plan - Docker
Der Plan - Microservices
● Nie wieder Monolith
● Jeder Teil - austauschbar
● Kein kompletter rewrite
● learn and adapt
Der Plan - caching Onion
● CDN - Akamai
● Origin - Varnish
● Redis
● Database
Der Plan - The Split
● BACKEND○ WordPress
■ admin■ json
● API○ Symfony
● FRONTEND○ Symfony
Der Plan - MySQL
● NDB Cluster -> Fail!
● Master -> Slave, Slave, Slave○ DB-dropin○ insert -> Master○ select -> Slave
● BACKUP Node
DB Connections 7 tage
Der Plan - CI/CD
● Build und deployment via GitLab-CI
● Reproduzier/Rebuild-bar
● Revertbar
● Confidence
● Rolling Release
● Slack
Metrics
Metrics - Insights
● Grafana (influxdb, telegraf)
● Sentry
● Blackfire
● netdata
Biggest Issue - WPQuery: your worst enemy!
● postmeta exploded (12.772.835 records)
● WPQuery runtime > 90s
● wp-admin unbenutzbar
Biggest Issue
Lösung - WPQuery vermeiden
● ElastiPress Plugin○ ElasticSearch○ + Anpassungen für Wildcards usw.
● Plugin-flattable○ pro Post-Type eine flache Tabelle
■ mit Datentypen (date, int usw.)■ statt WPQuery - direkt $wpdb verwenden
○ OSS: http://github.com/KroneMultimedia/plugin-flattable
Lösung - flattable
Lösung - flattable
Lösung - flattable
Lösung - flattable
Lösung - flattable
Lösung - flattable
Lösung - Blockify
Ein riesiger html string, im legacy system!
● native-app
● externe partner
● ist ein bild vorhanden?
Lösung - Blockify
Lösung - Blockify
● Strukturierter Inhalt○ JSON○ utf8○ block basiert○ html nur in limitierter form (<b>,<i>)○ jede box kann custom option values haben.
Lösung - Blockify
Lösung - Blockify
Lösung - Blockify
● Beispiel Blöcke○ Iframe○ Tinymce○ Image/Video○ Social (Facebook, Twitter usw)○ Content aus anderen bereichen.
Das Gesamtergebnis
WE ARE HIRING!Entwickler gesucht
[email protected]@hjanuschka