Upgrade to Pro — share decks privately, control downloads, hide ads and more …

High Concurrency Web Architecutre and Laravel P...

Albert Chen
January 07, 2023

High Concurrency Web Architecutre and Laravel Performance Tuning

LaravelConf Taiwan 2019

Albert Chen

January 07, 2023
Tweet

More Decks by Albert Chen

Other Decks in Technology

Transcript

  1. About Me • Albert Chen • Software Engineer • M17

    HandsUp • Open Source Maintainer
  2. What Is High Concurrency? PV = 2,000,000 (200w) QPS =

    (200w x 0.8) / (24 x 3600 x 0.2) 93 QPS 😀
  3. What Is High Concurrency? Read in High Concurrency • Vertical

    Scaling • Horizontal Scaling • Content Delivery Network • Data Caching • Single Point Optimization Write in High Concurrency • Message Queue • Rate Limit • Maximum Serving Limit • Wait in Line • Rules Optimization
  4. Performance Tuning in Laravel • Route and Config Files Cache

    • Cache (Not Limited to Database) • Async Event (Delayed Processing) • Database Read/Write Separation • OPCache • Preloading in PHP 7.4
  5. Route and Config Files Cache Register Route Route Register Route

    Route Register Route Route Route Collection • Lifecycle for Registering Routes
  6. Route and Config Files Cache Unserialize Cached Serialized Route Collection

    Route Collection • Lifecycle for Routes Caching
  7. Route and Config Files Cache Route Numbers No cache (ms)

    Cache (ms) Speed-up 1 2.5 1.9 1.3x 10 5.2 2.6 2.0x 100 22.5 4.3 5.3x 1,000 166 32 5.1x 10,000 1,513 334 4.5x https://voltagead.com/laravel-route-caching-for-improved-performance/
  8. Benchmark Comparison • Provider: Google Cloud Platform • Instance Type:

    n1-standard-8 • CPUs: 8 vCPU Cores (Skylake) • Memory: 30 G • Disk: 20 G SSD • OS: Ubuntu 18.04 LTS • PHP Version: 7.3
  9. Cache (Not Limited to Database) • Discover Hotspot Data (Hit

    Rate) • Proper TTL for Cached Data • Avoid Expiring Cache at The Same Time • Revoke Cache when Data Changes • Avoid Cache Missing • Hierarchical Cache Design • High Available Cache System • Warm Up the Cache
  10. Cache (Not Limited to Database) • Hierarchical Cache Design Database

    Local Memory Local Memory Local Memory Cache Layer Cache Revoke
  11. Cache (Not Limited to Database) • High Available Cache System

    https://rancher.com/blog/2019/deploying-redis-cluster/
  12. Cache (Not Limited to Database) • Warm Up the Cache

    Request Request Request Request Cache Layer Database Time Consuming Query (Warm Up)
  13. Async Event (Delayed Processing) Producer Kafka Rabbit MQ Queue Driver

    Consumer Producer Producer Producer Consumer Consumer Consumer (Laravel Event) (Laravel Queue Worker)
  14. OPCache PHP
 Files Tokenizing Semantic Parsing AST Generate Bytecode Execute

    Bytecode Output • Lifecycle in PHP with OPCache Load Bytecode From Memory Check Bytecode Cache
  15. Preloading in PHP 7.4 PHP
 Files Tokenizing Semantic Parsing AST

    Generate Bytecode Execute Bytecode Output Load Bytecode From Memory Check Bytecode Cache Preload in Memory • Lifecycle in PHP with Preloading
  16. Benchmark Comparison • Benchmark with Preloading Benchmark Preloaded files Server

    startup time Opcache memory used Per request memory used QPS No preloading 0 0.06 s 16 MB after warmup 1,825 KB 596 rq/s Preload hot classes 878 0.26 s 21 MB 869 KB 695 rq/s Preload everything 14541 1.56 s 105 MB 881 KB 675 rq/s https://github.com/composer/composer/issues/7777
  17. Banana News • PV is around 200w • Large amount

    of content resource • Fuzzy search support • Changeable news rank by topics • 99% read, 1% write
  18. Banana News Images Server (CDN) Load Balancer Master Slave Slave

    Slave Read Redis Cache Server Server Server
  19. Banana News Images Server Load Balancer Master Slave Slave Slave

    Read Redis Cache CDN Elastic Search Server Server Server eg. Cloudflare
  20. AATIX Images Server Load Balancer Master Slave Slave Slave Read

    Redis Cache CDN Server Server Server 😱
  21. AATIX Images Server Load Balancer Master Slave Slave Slave Read

    Redis Cache CDN Server Server Server Queue
  22. AATIX Master Slave Slave Slave Read Redis Cache Server Server

    Server Queue Local Cache Atomic Counter Rate Limit Circuit Breaking
  23. AATIX • Avoid large amount of write requests at the

    same time • Queue • Rate Limit • Reduce repeated requests from clients • Service isolation for hotspot data • Circuit breaking for high availability
  24. • Large amount of webhook calls • High availability for

    webhooks • Instant response time • Chat service for live streaming
  25. HandsUp Facebook Webhooks Message Load Balancer Server Server Server Queue

    PubNub
 Service Analysis Service Swoole Service PubSub Many to Many Queue Workers
  26. Q&A