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.

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