WomenWhoCodeSydney_PerformanceTipsRoR

16
Performance for RoR Apps (some tips)

description

This was a lightning talk presented at Women Who Code Sydney May 2014. A look into some techniques that can be applied to RoR apps (and most apps in general) on how to improve performance. We'll be looking into scaling, caching and other methods to grow from a single server database app to bigger apps :)

Transcript of WomenWhoCodeSydney_PerformanceTipsRoR

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