Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scaling Rails: Redeparede.com servindo 7,5 milh...

Scaling Rails: Redeparede.com servindo 7,5 milhões por mês - Palestra - Junho 2009

Apresentada no FISL 10, Porto Alegre.

Avatar for Sylvestre Mergulhão

Sylvestre Mergulhão

June 01, 2009
Tweet

More Decks by Sylvestre Mergulhão

Other Decks in Technology

Transcript

  1. Quem sou? • Bacharel em Sistemas pela UNIRIO • Rails

    desde 2006 • Redeparede desde Agosto/2008 • CTO, responsável técnico • Blog http://mergulhao.info • Colunista revista TI Digital • Ativista SL desde 1999
  2. Quem somos? • Classificados grátis • Fundado em 2005 •

    Sede em Santa Barbara, California • 26 domínios • América Latina • PHP até 2007, Rails hoje
  3. Googlebot é responsável por mais de 50% dos hits em

    nossos servidores (não entra na conta dos pageviews)
  4. Crescimento não esperado • Troca de servidores • Banco de

    dados dedicado • Melhoria de redundância • Teorias sobre o Google
  5. Teoria sobre o Google • Fatos: – Acessa freneticamente o

    Redeparede – Passou a indexar mais desde fevereiro de 09 – Aumento dos acessos coincidiu com sitemap em xml – Diminui a indexação quando ficamos fora do ar
  6. Teoria sobre o Google • Teoria: – Ele testa o

    tráfego que conseguimos prover – Envia mais tráfego a partir da busca orgânica se percebe que estamos conseguindo prover mais páginas por segundo
  7. memcached • Hash em memória • Armazena strings (isso inclui

    objetos serializados) • Suporta expiração por tempo
  8. memcached no Rails • Documentação escassa sobre utilização no Rails

    2.1+ • Muito fácil de usar e configurar • Confusão com plugins antigos – acts_as_cached – cache_fu – Outros • Boa referência: http://thewebfellas.com/blog/2008/6/9/rails-2-1- now-with-better-integrated-caching
  9. # memcache em localhost:11211 config.cache_store = :mem_cache_store # memcache nos

    servidores s1 e s2 na porta 11211 config.cache_store = :mem_cache_store, "s1", "s2" # memcache nos servidores s1 e s2 na porta 23000 config.cache_store = :mem_cache_store, "s1:23000", "s2:23000" # usar um namespace no cache para a aplicação config.cache_store = :mem_cache_store, {:namespace => “rede”} # config/environments/production.rb
  10. class Post < ActiveRecord::Base (...) def search_count(options) (...) end def

    cached_search_count(options) Rails.cache.fetch ["search_count", options], :expires_in => 1.day do search_count(options) end end end # app/models/post.rb
  11. Antes Concurrency Level: 100 Time taken for tests: 141.755 seconds

    Complete requests: 1000 Requests per second: 7.05 [#/sec] (mean)
  12. Depois Concurrency Level: 100 Time taken for tests: 68.455 seconds

    Complete requests: 1000 Requests per second: 14.61 [#/sec] (mean)
  13. Sphinx • full-text search engine • alta velocidade de indexação

    (até 10MB/s em CPUs modernas) • alta velocidade de busca (média abaixo de 0.1s por query em coleções entre 2-4GB) • suporte nativo a mysql • suporte a busca por frase • suporte a busca por relevância
  14. Subvertendo o Sphinx • Suporte a filtros (equivalente a cláusula

    WHERE em SQL) • Mais rápido que mysql quando usado com cláusulas complexas • Não foi feito pra substituir o DB, mas faz muito bem o trabalho
  15. Shameless advertisement ;) TI Digital de Julho Full-text search com

    thinking_sphinx http://www.revistatidigital.com.br