# micro services - perf ## Overivew glu mobile - microservices - Use docker - HTTP processing - Amazon ECS - NOSQL Redis + couch base - 40M votes a day - 1M active users - 14K req/m ## Microservices - Small - Simole - easy to deploy - upgradable Use Base images Name by version and never change (Freeze them) ## background processing - Execute externally - Shutdown functions - Job server - fastcgi_finish_request ## HTTP Compression - gzip on - gzip_types - gzip_proxied any - gzip_comp_level 5 - gzip_min_length (default 20) - Smaller than 1500B means it will always fit in one TCP packet If content_length is not set then nginx will compress always Laravel/Lume/Others add middleware to add content_length ## Caching - HTTP2 Server push - Repeated server calls HTTP1 - 304s - Last-modified - cache-control ## No SQL - Mongo/Redis - Fight network I/O - save hdd space - compress large messages - serialise better - message templates - add ttl expiry - shorten cache keys ## Fast caching - PHP Redis - Predis - high memory, slower - Persistent connections available ## Deployment EC8 - 0 Downtime - quick rollout - ELB health-check - Auto scaling ## Hardware upgrades - Doubling the hardware, halving the # of machines ## VPC - Closer together - Same location - utilise internal networks - other thoughts - Async I/O - swoole - HTTP/2 - Tars - binary (80% reduction) ## Managing images - Don't use aptitude (apt) - Build from source - fpm and Nginx together - Separate not helpful - No need for TCP/IP overhead - supervisorD - everywhere # Useful terms aerospike couch base php_swoole supervisorD new relic bugsnag amazon cloud watch sonarqube sensolabs security checker fastcgi_finish_request crowdstar https://github.com/Crowdstar/background-processing