TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
-
Upload
andrehjr -
Category
Technology
-
view
179 -
download
1
Transcript of TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Crescimentoe performance
em uma aplicação em Rails
500+ clientes
5000+ clientes
100M+ de emails/mês
2 Billion Docs on mongodb
4M+ jobs every day
6 times de dev
~10 deploys diariamente
< Response Time
> Workers
Completed 200 OK in 245ms(Views: 33.7ms | ActiveRecord: 70.4ms)
gem 'rack-mini-profiler'gem 'flamegraph'
Heavy Operations
Background Jobs
100.000 jobs
~1 segundos
10 workers
>2 horas
100.000 jobs
~100 ms
10 workers
16 minutos
Time equals Money
Caching
<% cache(object) do %> <%# Do something expensive %><% end %>
Page/Fragment Caching
Rails.cache.fetch(cache_key) do DailyStatistics.reportend
Low Level Caching
"There are only two hardthings in Computer Science:
Cache Invalidation andnaming things"
- Phil Karlton
Databases
gem 'bullet'# N+1 Queries
# Unused Eager Loading
Person.all.pluck(:name) # (1.1ms) SELECT "users"."name" FROM "users"
Slow Queries
> EXPLAIN SELECT * FROM PEOPLE WHERE company_id = $1;
Limit (cost=102.06..102.06 rows=1 width=115) -> Sort (cost=102.06..102.06 rows=1 width=115) Sort Key: id -> Seq Scan on people (cost=0.00..102.06 rows=1 width=115) Filter: (company_id = 1)
Know your data
Know your Indexes
Slow Queries
Slow Queries
Data keeps growing
Cold Data
Index Size
Sharding Collections
sh.shardCollection("people.addresses", { "state": "SC"} )
require 'benchmark'
gem 'benchmark-ips'
Know your Gems
Migrações
Reversíveis
Confiáveis
Fast.
Monitoramento
Know what's happening
+
Microservices
Split Responsibilities
UPGRADE RAILS!!
New Features
Avoid Monkeypatching
Refactor
Dead Gems
Decision Making