Vagrant, Puppet, Docker für Entwickler und Architekten
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
1. Vorstellung / Use Case fotocommunity
Stand: März 2013
Text
Text
Text
Text
Zeig uns Deine besten Bilder.
2. Agenda
* Vorstellung
* Überblick Team
* Infrastruktur + Server, Arbeitsumgebungen
* Timeline + Überblick Webseite
* Eigenheiten bei der Implementation mit Symfony2
* Performance
* Entwicklung + Q&A, Testing, Deployment
* Tools / Services
* Painpoints, Erkenntnisse, Ausblick
Zeig uns Deine besten Bilder.
3. Wer bin ich ?
* Stephan Tijink
* Head of Web Development
* Beruflich Entwickler seit 1999
* Bei der fotocommunity seit 2005
* Ausbilder Fachinformatiker seit 2012
* Twitter/github: @stijink
Zeig uns Deine besten Bilder.
4. Was ist die fotocommunity
* Größte Community für Fotografie in Europa
* Aktuell in fünf Sprachen verfügbar
* Gegründet 2001 als Hobbyprojekt
* Komerziell seit 2002
* Schwerpunkt auf Kommunikation
Zeig uns Deine besten Bilder.
5. Zahlen
* 1,5 Millionen Mitglieder
* 15 Millionen Fotos
* 100 Millionen Bildkommentare
* 120 Millionen Seitenaufrufe / Monat
* 172 GB Daten in MySQL
Zeig uns Deine besten Bilder.
6. Das Technik Team
* 2 Mitarbeiter Infrastruktur/Server
* 7 Mitarbeiter Entwicklung
* Scrum für Projektmanagement
Zeig uns Deine besten Bilder.
7. Infrastruktur
* 34 physikalische Server, 23 virtuelle Server
* Hosting in Frankfurt
* Ubuntu 12.04 LTS (Planziel 2013)
* Installation via Kickstart
* Provisionierung mit Chef
* KVM für Virtualisierung
* Amazon S3 + Amazon EC2 als Failover Bildauslieferung
Zeig uns Deine besten Bilder.
8. Serversoftware
* Nginx - SSL Terminierung, Rewrites
* Varnish - Caching / ESI
* HA Proxy - Loadbalancing
* Apache / PHP (7 Application-Server)
* MySQL (Master/Slave), SOLR (noch)
* Redis, memcache (Sessions)
Zeig uns Deine besten Bilder.
9. Arbeitsumgebungen
* Jeder Entwickler hat eine eigene VM via Parallels
* VM liegt auf dem Arbeitsgerät (Laptop)
* Provisionierung der VM über Chef
* Mac oder Linux als Entwicklergeräte
* Diverse Testgeräte (Windows, Andriod, iOS)
Zeig uns Deine besten Bilder.
10. Timeline Entwicklung
Beginn Entwicklung Beginn vollständiger
PHP 4, MySQL 3 Rewrite in Symfony 2
2010 heute
Spaghetti-Code, Prozedual, PHP4-OOP, register_globals = on ... das volle Programm ;)
2001 2011
Neu-Komponenten 35 % Zugriffe *
+ API in Symfony 1 über Symfony2
* ca. 120 Millionen Seitenaufrufe Monat insgesamt. Etwa 42 Millionen über Symfony2 (exkl. ESI)
Zeig uns Deine besten Bilder.
11. Überblick Webseite
* Viele Komponenten noch im Legacy-Code
* Wenige Komponenten mit Symfony1 umgesetzt
* API für Dritte mit Symfony1 umgesetzt
* Neue Komponenten werden in Symfony2 erstellt
* 3rd Party: PHPBB 3, MediaWiki, Wordpress
Zeig uns Deine besten Bilder.
12. Routing
1. Anlaufstelle Legacy-Code
2. Dump Symfony1 Routen in .htaccess
3. Symfony2 als CatchAll für übrige Requests
Zeig uns Deine besten Bilder.
13. ESI als Baukasten
* Header und Footer in Symfony2 implementiert
* Legacy-Code, Symfony1 und 3rd Party nutzen
Implementation aus Symfony2 via ESI-Includes
* Invalidierung durch verschiedene Codebasen
Zeig uns Deine besten Bilder.
14. Authentication
* Legacy Code fungiert als „Master“
* Andere Codebasen + 3rd Party implementieren
System aus dem Legacy Code (lesend, schreibend)
Zeig uns Deine besten Bilder.
15. Performance
Legacy Code - 50 ms PHP Symfony2 - 75 ms PHP
Ohne Grafik: Symfony 1 - 230 ms PHP
Zeig uns Deine besten Bilder.
16. Prozess Entwicklung + Q&A
* Pro Feature/Bugfix ein Branch in git
* Pull-Request in github
* Code-Review durch ein Teammitglied
* Funktionstest durch ein Teammitglied
* Merge in master durch ein Teammitglied
Zeig uns Deine besten Bilder.
17. Testing
* Gescheites Testen müssen wir noch lernen ;-)
* PHPUnit als Testwerkzeug
* Aktuell keine Auswertung Code Coverage
* Keine Tests im Legacy Code
* Etwa 50 Assertions in Symfony1
* Aktuell etwa 200 Assertions in Symfony2
Zeig uns Deine besten Bilder.
18. Versionsverwaltung / Deployment
* Legacy Code in Subversion
* Symfony1 + Symfony2 in git (github.com)
* Deployment mit phing
* Build per Knopfdruck als .tar.gz (langsam)
* Staging (Auf Live-Hardware / UserAgent-Weiche)
* Geplant: Atlassian Bamboo für CI / Deployment
Zeig uns Deine besten Bilder.
19. Weitere Tools und Services
* Amazon S3 + Amazon EC2
* Jira - Issue und Sprintplanung
* github.com - Hosting Source (häufiger Ausfälle)
* NewRelic.com - Application Monitoring
* Icinga für Server-Monitoring
* Confluence - Dokumentation, Collaboration
Zeig uns Deine besten Bilder.
20. Pain Points beim Umstieg
* 10 Jahre Spaghetti-Code
* Funktion bestehender Features nicht dokumentiert
* Fehlendes Wissen moderner Programmieransätze
* Einarbeitung in Symfony2-Struktur (Was wohin ?)
* Doctrine2 (Dokumentation ausbaufähig)
* Keine Constraints in Datenbank
* Testen wollen, aber nicht wissen wie
Zeig uns Deine besten Bilder.
21. Was wir gelernt haben
* Einführung QA-Prozess
* Dokumentieren, auch ausserhalb des Code
* Mehr Knowledge-Transfer / Pair Programming
* Programmieren nach Coding-Standards
* Grundlagen Test-Driven-Development
* Einarbeitung neuer Kollegen jetzt deutlich einfacher
Zeig uns Deine besten Bilder.
22. Ausblick
* Migration auf Symfony >= 2.2
* Weiterführung Rewrite
* Refactoring/Cleanup neuer Code, wo sinnvoll
* ElasticSearch anstatt SOLR
* Neues Bilder-Backends in Arbeit (Ceph + S3)
* Ausbau Cloud-Fähigkeit (Tests mit OpenStack)
* Atlassian Bamboo für CI / Deployment
Zeig uns Deine besten Bilder.