SLAC17: PHP On Scale

SLAC17: PHP On Scale

License: CC BY-SA

Slides of my talk at the Secure Linux Administration Conference in Berlin at May 23rd, 2017.

2b68bc93708466a655a4c60458dc7955?s=128

Martin Helmich

May 23, 2017
Tweet

Transcript

  1. PHP on Scale Martin Helmich Mittwald CM Service GmbH &

    Co. KG 10. Secure Linux Administration Conference, Berlin 23. Mai 2017 CC-0, coffy https://pixabay.com/de/thailand-elefanten-sonnenuntergang-142982
  2. Dieses Werk ist lizensiert unter einer Creative Commons (Namensnennung &

    Weitergabe unter gleichen Bedingungen) 4.0 International Lizenz. http://creativecommons.org/licenses/by-sa/4.0/
  3. Martin Helmich Software- & Systemarchitekt bei Mittwald CM Service Dozent

    (Private Hochschule für Wirtschaft & Technik, Hochschule Hamm-Lippstadt) http://stackoverflow.com/story/martinhelmich https://github.com/martin-helmich https://www.martin-helmich.de
  4. None
  5. None
  6. Parse Error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM פעמיים נקודתיים = "Doppelter

    Doppelpunkt"
  7. CC-0, Michael Gaida https://pixabay.com/de/hafen-binnenhafen-rhein-kran-1569694

  8. None
  9. None
  10. 82,6 % https://w3techs.com/technologies/overview/programming_language/all

  11. None
  12. +100ms Seitenaufbau -1% Umsatz https://blog.gigaspaces.com/amazon-found-every-100ms-of-latency-cost-them-1-in-sales/

  13. +500ms Seitenaufbau -20% Traffic https://blog.gigaspaces.com/amazon-found-every-100ms-of-latency-cost-them-1-in-sales/

  14. None
  15. < Erste Regel für PHP-Performance: „Neuer ist besser!“ CC BY-SA,

    Grm https://commons.wikimedia.org/wiki/File:Macintosh_128k_transparency.png CC BY-SA, Sonicscrewdriver https://commons.wikimedia.org/wiki/File:Late_2016_MacBook_Pro.jpg
  16. 68,69 TPS 167,87 TPS 163,48 TPS 0 50 100 150

    200 PHP 5.6 PHP 7.0 PHP 7.1 Transactions per Second Quelle: https://github.com/martin-helmich/php7-benchmark Mehr = Besser Zutaten • Wordpress 4.7.4 • MariaDB 10.1 • Siege mit 100 parallelen Nutzern
  17. 68,69 TPS 167,87 TPS 163,48 TPS 0 50 100 150

    200 PHP 5.6 PHP 7.0 PHP 7.1 Transactions per Second Quelle: https://github.com/martin-helmich/php7-benchmark Mehr = Besser 1,44 s 0,59 s 0,60 s 0 0,5 1 1,5 2 PHP 5.6 PHP 7.0 PHP 7.1 Average Response Time Weniger = Besser
  18. http://php.net/manual/en/migration70.php

  19. Zweite Regel für PHP-Performance: Engpässe identifizieren

  20. xdebug.profiler_enable=1 xdebug.profiler_output_dir=/var/lib/xdebug https://xdebug.org/docs/profiler

  21. None
  22. None
  23. CC-0 hpgruesen https://pixabay.com/de/schienenwege-streckengleise-1377329/

  24. PHP-Applikation Datenbank

  25. PHP-Applikation Datenbank Cache PHP-Applikation Datenbank Cache CC-BY, Lauris Rubenis https://www.flickr.com/photos/beardforgood/9186992422

    CC-0, PublicDomainPictures https://pixabay.com/de/schnecke-weichtier-schale-1959/
  26. Redis memcached APC XCache

  27. function getExpensiveValue() { $cacheValue = apc_fetch("my_expensive_value", $success); if ($success) {

    return $success; } $value = computeExpensiveValue(); apc_store("my_expensive_value", $value, 3600); return $value; }
  28. PSR-6: Caching Interface http://www.php-fig.org/psr/psr-6/

  29. class Foo { private $cache; public __construct(CacheItemPoolInterface $cache) { $this->cache

    = $cache; } public getExpensiveValue() { $item = $this->cache->getItem("my_expensive_value"); if (!$item->isHit()) { $item->set($this->computeExpensiveValue()); $this->cache->save($item); } return $item->get(); } }
  30. PSR 6-Implementierungen: • cache/array-adapter • cache/memcached-adapter • cache/filesystem-adapter • cache/redis-adapter

    • cache/apcu-adapter https://packagist.org/providers/psr/cache-implementation
  31. PHP-Applikation Datenbank

  32. CC-BY, Lauris Rubenis https://www.flickr.com/photos/beardforgood/9186992422 CC-0, PublicDomainPictures https://pixabay.com/de/schnecke-weichtier-schale-1959/ PHP-Applikation Datenbank Cache

    PHP-Applikation Datenbank Cache NGINX Varnish Cloudfront Cloudflare
  33. CC-0 hpgruesen https://pixabay.com/de/schienenwege-streckengleise-1377329/

  34. Dritte Regel für PHP-Performance: „Viel hilft viel!“ CC BY-SA Victorgrigas

    https://commons.wikimedia.org/wiki/File:Wikimedia_Foundation_Servers-8055_35.jpg
  35. None
  36. Server Server Server Server LB Datenbank HAProxy NGINX Traefik Server

  37. CC-0, julielines https://pixabay.com/de/elefant-s%C3%BCdafrika-kruger-erhaltung-765735/

  38. None
  39. Server Server Datenbank LB

  40. Server Server „Login!“ Datenbank LB Cookie Session-Daten

  41. Server Server Request Datenbank LB

  42. [Session] session.save_handler = files session.save_path = "/var/lib/php7/sessions"

  43. backend my_application balance source hash-type consistent server backend01 10.0.0.9:80 check

    server backend02 10.0.0.10:80 check server backend03 10.0.0.11:80 check Source Address Affinity
  44. CC-0, maxmann https://pixabay.com/de/waage-apfel-gewichtskontrolle-1155878/

  45. Server Server „Login!“ Datenbank LB Cookie Session-Daten Session Store

  46. Server Server Request Datenbank LB Session-Daten Session Store

  47. None
  48. [Session] -session.save_handler = files -session.save_path = "/var/lib/php7/sessions" +session.save_handler = redis

    +session.save_path = "tcp://<redis-url>:6379"
  49. [Session] -session.save_path = "tcp://<redis-url>:6379" +session.save_path = "tls://<redis-url>:6379?auth=<passwd>" Security-Tipp: Verbindung über

    reines TCP nur in vertrauenswürdigen Netzen! Ansonsten TLS-Proxy (HAProxy, Hitch, …) und Passwort-Authentifizierung verwenden!
  50. Server Server LB Datenbank Filesystem?

  51. LB Datenbank Server Server NFS

  52. LB Datenbank Server Server Object Storage S3, Ceph, Swift, Minio,

  53. Server Server Server Server Server LB Datenbank DFS DFS DFS

    DFS DFS GlusterFS, CephFS, XtreemFS, …
  54. LB Datenbank Server Server NGINX Varnish Cloudfront Cloudflare Edge Cache

  55. PHP-Applikation Datenbank APCu

  56. PHP-Applikation Datenbank APCu PHP-Applikation APCu PHP-Applikation APCu Scale-Out Achtung! Inkonsistente

    Caches!
  57. PHP-Applikation Datenbank Redis PHP-Applikation PHP-Applikation Scale-Out

  58. None
  59. Cache Chaining CC BY-SA, Paul Maenz https://commons.wikimedia.org/wiki/File:Lima_Eimerkette_141207_Pressefoto.jpg

  60. PHP-Applikation Datenbank APCu PHP-Applikation APCu PHP-Applikation APCu Scale-Out Redis

  61. App App DB A Cache APC APC APC App

  62. App App DB A Cache APC APC APC A A

    App
  63. App App DB Cache A APC A APC A APC

    A A B App B B Achtung! Inkonsistente Caches!
  64. App App DB Cache B APC A APC A APC

    B B App ttl=60 ttl=60 ttl=60 ttl=86400 ttl=∞
  65. Cache Chaining Zum Zuhause nachmachen: composer require \ cache/apcu-adapter \

    cache/redis-adapter \ cache/chain-adapter $redis = new Redis(); $redis->connect( '<redis-addr>', 6379 ); $pool = new CachePoolChain([ new ApcuCachePool(), new RedisCachePool($redis) ]);
  66. „Was ist eigentlich mit HHVM?“ CC-0, Yummymoon https://pixabay.com/de/meerkat-blick-beobachter-natur-s%C3%BC%C3%9F-968862/

  67. Lexing Parsing Compilation Opcode Cache PHP-Opcodes Opcodes werden vom PHP-Interpreter

    ausgeführt Ausführung von PHP-Code ~ Traditionell ~ Compilation
  68. None
  69. None
  70. Lexing Parsing Compilation Compilation JIT- Compiler HipHop- Bytecode Ausführung als

    nativer Maschinencode Ausführung von PHP-Code ~ HipHop VM ~ Code- Repository AST HipHop intermediate representation x86-64/ARM- Maschinencode
  71. None
  72. https://speakerdeck.com/martinhelmich/inspiringcon14-elephpants-on-speed-running-typo3-flow-on-hiphop-vm

  73. 68,69 TPS 167,87 TPS 163,48 TPS 171,95 TPS 0 50

    100 150 200 PHP 5.6 PHP 7.0 PHP 7.1 HHVM 3.19 PHP 5.6 PHP 7.0 PHP 7.1 HHVM 3.19 Quelle: https://github.com/martin-helmich/php7-benchmark 1,44 s 0,59 s 0,60 s 0,58 s 0 0,5 1 1,5 2 PHP 5.6 PHP 7.0 PHP 7.1 HHVM 3.19 PHP 5.6 PHP 7.0 PHP 7.1 HHVM 3.19
  74. https://speakerdeck.com/martinhelmich/inspiringcon14-elephpants-on-speed-running-typo3-flow-on-hiphop-vm

  75. 287,92 TPS 335,13 TPS 794,20 TPS 917,10 TPS 1739,28 TPS

    1363,24 TPS 1123,41 TPS 0 200 400 600 800 1000 1200 1400 1600 1800 2000 PHP 5.6 PHP 7.0 HHVM 3.10 Laravel Drupal 8 Wordpress 4.4 Quelle: https://kinsta.com/blog/the-definitive-php-7-final-version-hhvm-benchmark
  76. CC-0, Three-Shots https://pixabay.com/de/elefant-staub-road-afrika-savannah-2066383/

  77. Martins PHP-Performance- Checkliste • Neueste Software-Versionen im Einsatz? • OP-Cache

    aktiv? • Profiling durchgeführt? • Datenbank-Struktur optimiert? • Software- und Systemarchitektur optimiert (z.B: Caching, CQRS, …)?
  78. https://karriere.mittwald.de