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

90
Crescimento e performance em uma aplicação em Rails

Upload: andrehjr

Post on 15-Apr-2017

179 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Crescimentoe performance

em uma aplicação em Rails

Page 2: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Full stack engineer@andrehjr

[email protected]

ANDRÉ JUNIOR

Page 3: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 4: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 5: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 6: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

500+ clientes

Page 7: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 8: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

5000+ clientes

Page 9: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

100M+ de emails/mês

Page 10: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

2 Billion Docs on mongodb

Page 11: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

4M+ jobs every day

Page 12: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

6 times de dev

~10 deploys diariamente

Page 13: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 14: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 15: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 16: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 17: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 18: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 19: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 20: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 21: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 22: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 23: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

< Response Time

Page 24: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

> Workers

Page 25: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Completed 200 OK in 245ms(Views: 33.7ms | ActiveRecord: 70.4ms)

Page 26: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

gem 'rack-mini-profiler'gem 'flamegraph'

Page 27: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 28: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Heavy Operations

Page 29: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Background Jobs

Page 30: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 31: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

100.000 jobs

~1 segundos

Page 32: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

10 workers

>2 horas

Page 33: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 34: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

100.000 jobs

~100 ms

Page 35: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

10 workers

16 minutos

Page 36: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Time equals Money

Page 37: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 38: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Caching

Page 39: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

<% cache(object) do %> <%# Do something expensive %><% end %>

Page/Fragment Caching

Page 40: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Rails.cache.fetch(cache_key) do DailyStatistics.reportend

Low Level Caching

Page 41: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 42: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

"There are only two hardthings in Computer Science:

Cache Invalidation andnaming things"

- Phil Karlton

Page 43: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 44: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Databases

Page 45: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

gem 'bullet'# N+1 Queries

# Unused Eager Loading

Page 46: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Person.all.pluck(:name) # (1.1ms) SELECT "users"."name" FROM "users"

Page 47: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Slow Queries

Page 48: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

> 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)

Page 49: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Know your data

Page 50: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Know your Indexes

Page 51: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Slow Queries

Page 52: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Slow Queries

Page 53: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Data keeps growing

Page 54: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 55: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Cold Data

Page 56: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Index Size

Page 57: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Sharding Collections

Page 58: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

sh.shardCollection("people.addresses", { "state": "SC"} )

Page 59: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

require 'benchmark'

Page 60: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 61: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 62: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 63: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

gem 'benchmark-ips'

Page 64: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Know your Gems

Page 65: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Migrações

Page 66: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 67: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Reversíveis

Page 68: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Confiáveis

Page 69: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Fast.

Page 70: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 71: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Monitoramento

Page 72: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 73: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Know what's happening

Page 74: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 75: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

+

Page 76: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 77: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Microservices

Page 78: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Split Responsibilities

Page 79: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

UPGRADE RAILS!!

Page 80: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

New Features

Page 81: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Avoid Monkeypatching

Page 82: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Refactor

Page 83: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Dead Gems

Page 84: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 85: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 86: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

Decision Making

Page 87: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 88: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 89: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails
Page 90: TDC São Paulo 2015 Ruby - Crescimento e performance em uma aplicação em Rails

@[email protected]

shipit.resultadosdigitais.com.br

We're hiring! ;)

QUESTIONS?