tdc são paulo 2015 ruby - crescimento e performance em uma aplicação em rails

Post on 15-Apr-2017

179 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Crescimentoe performance

em uma aplicação em Rails

Full stack engineer@andrehjr

andre.junior@resultadosdigitais.com.br

ANDRÉ JUNIOR

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

@andrehjrandre.junior@resultadosdigitais.com.br

shipit.resultadosdigitais.com.br

We're hiring! ;)

QUESTIONS?

top related