Download - WomenWhoCodeSydney_PerformanceTipsRoR

Transcript
Page 1: WomenWhoCodeSydney_PerformanceTipsRoR

Performance for RoR Apps(some tips)

Page 2: WomenWhoCodeSydney_PerformanceTipsRoR

About Meclairettran

Page 3: WomenWhoCodeSydney_PerformanceTipsRoR

Performance Is Important

Yay!● AirBnb, Netflix, Twitter*, Facebook, Zynga

* Used to have outages, but fixed their performance issues

● Jetstar ticket salesOops!

● Myer Boxing Day 2013● Click Frenzy 2012

Page 4: WomenWhoCodeSydney_PerformanceTipsRoR

Example Stats for SMH

At Peak: 28K requests per minute14th May: 4,000,000 hits to the site

Page 5: WomenWhoCodeSydney_PerformanceTipsRoR

Some Common Problems● Memory leaks● Long running API call(s)● Slow synchronous processes

(e.g. Emails, PayPal)

● Slow database queries● Network issues

Note: not an exhaustive list

Page 6: WomenWhoCodeSydney_PerformanceTipsRoR

What I’ll Cover● Monitoring● Caching● Scaling● Database

Page 7: WomenWhoCodeSydney_PerformanceTipsRoR

MonitoringHow to know there is a performance problem?

+ Response time, rpm, memory usage, CPU usage, error rates

Page 8: WomenWhoCodeSydney_PerformanceTipsRoR

MonitoringWhat else can I do?● Logs (e.g. file server, splunk, loggly, logstash)

● Memory Usage (e.g. unix top command)

● Performance tests (e.g. Apache bench, JMeter, Neoloader)

● Health Checks (e.g. health_check gem, Nagios, Sitescope)

● More calls to the call centre

Page 9: WomenWhoCodeSydney_PerformanceTipsRoR

CachingHow?● Cache store (key-value store)

● Fragment caching (part of the page)

● SQL caching (cache query results)

Removed in Rails4: Action Caching & Fragment Caching

Page 10: WomenWhoCodeSydney_PerformanceTipsRoR

Caching

Before: No Caching

After: With Caching!

Problem: Page making long running/many external requests

Page 11: WomenWhoCodeSydney_PerformanceTipsRoR

Scaling

Load Balancer

www.mysite.com

Cache Cluster

Cache

Static Files

(css, js, images)

Virtual IP

Replication(Active-Passive)

Page 12: WomenWhoCodeSydney_PerformanceTipsRoR

Database● Add an index● Profiling● Batch queries● Eager fetching● Denormalisation● Sharding

Page 13: WomenWhoCodeSydney_PerformanceTipsRoR

Other Techniques● Queuing/Background Jobs● Caching● Dedicated services● Rails engines● C-extensions (gems)● Sprites● Asset pipeline● Cache control headers● Gzip assets● Less HTTP requests● Dedicated Search Service

● Remove unused assets (are all those bootstrap files needed?)

● Static cluster● AWS Auto-scaling● Akamai (edge caching)● YSlow● Local Storage● Smaller Responses● Async JS● Chrome DevTools● JRuby

Page 14: WomenWhoCodeSydney_PerformanceTipsRoR

Further Readinghttps://github.com/ianheggie/health_checkhttp://guides.rubyonrails.org/caching_with_rails.htmlhttp://railscasts.com/episodes/380-memcached-dallihttps://developers.google.com/events/io/sessions/324511365http://railscasts.com/episodes/366-sidekiqhttp://www.slideshare.net/derekmbrown/netflix-strategic-performance-analysishttp://blog.jphpsf.com/2012/04/28/front-end-performance-case-study-github

Page 15: WomenWhoCodeSydney_PerformanceTipsRoR
Page 16: WomenWhoCodeSydney_PerformanceTipsRoR

Questions