Starling: Trabalhando com Filas em Ruby

October 10th, 2008 por jeveaux

Quem nunca ouviu a grande falácia de que Rails não escala? Isso foi moda durante algumas semanas enquanto o Twitter passava por problemas de escalabilidade, não necessariamente por culpa do Rails ou de Ruby, mas quem quer por lenha na fogueira não está muito preocupado com isso e quer mesmo é semear a discórdia. Muita água já passou por baixo da ponte, o Twitter agora está estável e as coisasfluem bem.

No começo deste ano o pessoal do Twitter anunciou e tornou open source o projeto Starling, criado por Blaine Cook. O Starling é o core do Twitter, ele é o servidor de filas responsável por manter em pé o Twitter. E agora como um projeto open source está disponível como gem e pode ser usado por qualquer outro projeto.

Indo direto ao ponto, o Starling é, basicamente, um servidor de filas implementado sob o protocolo do MemCache. O MemCache é um servidor de cache distribuído de altíssima performance e é largamente usado, principalmente em clusters de aplicações web.

Para usar o Starling é muito simples. Os primeiros passos são

Instalação

1) Instalar o servidor MemCache

CODE:
  1. jeveaux@kamael ~ $ sudo apt-get -y install memcached

2) Instalar a gem do MemCache e

CODE:
  1. jeveaux@kamael ~ $ sudo gem install memcache-client

3) Instalar a gem do Starling.

CODE:
  1. jeveaux@kamael ~ $ sudo gem install starling

E pronto, isso é tudo para começarmos a usar o Starling. Se você achou a instalação simples se prepare, pois a utilização é ainda mais simples.

Usando o Starling

Se você já usou o MemCache vai sentir-se familiarizado com o Starling. A diferença é apenas na implementação do protocolo, ou seja, a utilização em código será igual a do MemCache, só que ao fazer set e get as coisas acontecerão de uma forma um pouco diferente. Por enquanto a diferença maior que percebi foi em relação do método get, que quando usado no MemCache apenas retorna um valor do cache e o mantém lá, já no caso do Starling o get retorna o valor e o remove da memória. Analisando com calma isso faz sentido, afinal não estamos mais falando de cache e sim de filas, mesmo que a implementação da fila seja feita usando cache.

Mas antes de irmos para os exemplos de código, precisamos fazer com o que o servidor de filas - duh, Starling - esteja disponível e rodando. Vamos iniciar o Starling na porta 22122 (-p) e como um daemon (-d):

CODE:
  1. jeveaux@kamael ~ $ sudo starling -p 22122 -d

Isso já basta para iniciar o servidor do Starling e deixá-lo disponível para uso. Agora então vamos alimentar a fila, crie o arquivo: alimentar_fila.rb.

CODE:
  1. #alimentar_fila.rb
  2. require 'rubygems'
  3. require 'memcache'
  4. starling = MemCache.new 'localhost:22122'
  5. starling.set 'fila', 'qualquer objeto'

Ao executar este arquivo (ruby alimenta_fila.rb) não teremos nenhum resultado visual, mas acredite, a fila chamada de'fila' no exemplo está recebendo objetos. Agora o trabalho será para - como dizem - consumir a fila. Vamos ao consumir_fila.rb.


CODE:
  1. #consumir_fila.rb
  2. require 'rubygems'
  3. require 'memcache'
  4. starling = MemCache.new 'localhost:22122'
  5. loop {
  6.   objeto_fila = starling.get 'fila'
  7.   if !objeto_fila.nil?
  8.     puts 'recuperado da fila:' + objeto_fila
  9.   end
  10. }

E agora sim estamos prontos para colocar e remover objetos em uma fila. O exemplo para consumir os objetos ficará em loop, então você pode executá-lo numa janela do bash e em outra janela ir executando o exemplo para alimentar a fila com objetos e acompanhar o comportamento dos procedimentos de alimentar e consumir a fila. A recuperação da fila será imediata, instantânea, afinal, assim como o MemCache, o Starling está preparado para receber milhares de operações por segundo.

E é isso, o seu servidor de filas já está rodando e sendo alimentado/consumido. Agora é aplicar para o que você está precisando :D

Problemas

Há um probleminha chato com a gravação de log em disco que o Starling faz das filas. Todo o set feito gera o objeto na memória e também em disco - geralmente em /var/spool/starling/. O problema é que o get somente remove o objeto da memória e não do disco. Aparentemente isso foi feito pra ser assim mesmo e segundo o próprio Blaine Cook este arquivo de log não ficará sendo incrementado para sempre, pois, depois de um certo tamanho (o engraçado é que ele não fala esse certo tamanho) ele será rotacionado, mas por enquanto ainda não descobri este certo tamanho e o arquivo tem crescido infinitamente.

E apenas uma observação quanto ao consumir_fila.rb: Não deixe-o executando por muito tempo e nem muito menos esqueça de finalizá-lo pois como ele fica em loop infinito poderá ocupar o seu processador a toa.

Customizando o gedit para Rails

October 7th, 2008 por jeveaux

Não há dúvidas que o TextMate é um excelente editor para se trabalhar com Rails, mas como nem todos possuem um Mac para ter o prazer de utilizar este editor, o jeito é se contentar com alternativas menos hype sexy.

Para quem usa Gnome, porém, é muito mais fácil encontrar uma ótima alternativa. O gedit é um editor de texto que vem, geralmente, por default em qualquer distribuição Linux com Gnome. Não vou falar muito do gedit como editor pois este não é o foco do post, a idéia é mostrar apenas o projeto gedit-rails, que é o projeto que contém uma série de utilitários para deixar o gedit ‘turbinado’ para se trabalhar com Rails.

Para instalar o gedit-rails é super simples, basta fazer o download do projeto (zip, tar.gz ou via clone do repositório do github) e fazer a instalação executando o script install.sh. A instalação é simples e não há nenhum estágio além da execução da execução propriamente dita do script e depois disso o trabalho será apenas de configuração.

A instalação adicionará no gedit o tema de fontes e cores: Darkmate, os plugins: Class Browser, HTML Tidy, Rails Hot Keys, Rails Hot Commands e Snap Open e o mais importante, os snippets. A configuração pode ser feita basicamente em duas etapas:

- Tema de fontes e cores: Edit > Preferences > Fonts & Colors> Darkmate. E o resultado será:

- Plugins: Edit > Preferences > Plugins. Lembre-se, os plugins que foram instalados e que podem ser ativados são: Class Browser, HTML Tidy, Rails Hot Keys, Rails Hot Commands e Snap Open. Os snippets já estarão funcionando sem nenhuma modificação. Basicamente alguns dos recursos adicionados serão:

   

Recomendo também a leitura dos posts sobre gedit-rails do Urubatan, um dos autores do projeto.

Para quem curte o VI também existe uma ótima opção, o vim-rails. Qualquer dia escrevo sobre este addon.

Palestras e Atividades confirmadas

May 12th, 2008 por jeveaux

A 'temporada' de eventos de 2008 já começou e está a todo vapor. Este ano eu novamente eu não pude participar do FISL, mas não vou perder (pelo menos não quero perder) os outros eventos do ano. Algumas palestras já estão confirmadas:

  • Testes de Software e Ferramentas de Testes
    Semana passada apresentei uma nova versão (ainda não disponibilizei no slideshare) desta palestra sobre Testes na faculdade São Camilo, aqui no Espírito Santo mesmo, bem pertinho de Vitória. Fiz uma série de adaptações, a maioria delas em reordenação de slides e organização de conteúdo que ajudaram bastante para o bom andamento da apresentação, ficou mais legal :D
  • Introdução ao Desenvolvimento Web com Java
    Em 27 de maio farei uma apresentação de introdução do desenvolvimento web com Java onde serão abordados temas e ferramentas desde JSP/Servlets passando por JSF até uma pontinha de JBoss Seam. A apresentação será no InfoWork 2008 realizado pela UVV.
  • Ruby on Rails para iniciantes
    E pra fechar o mês, uma nova visita à São Camilo, desta vez para participar e colaborar com a expansão da comunidade Linux e de Software Livre do estado, vou participar do EESL (Encontro de Estudantes sobre Software Livre) e fazer uma apresentação (na verdade uma seção de exemplos e how-to) bem introdutória sobre Ruby on Rails, estou bastante ansioso pois esta será a minha apresentação sobre Rails.

Além destas apresentações já confirmadas, estarei entre os dias 16 e 19 de maio em São Paulo para participar do Falando em Java.

Atualizando a casa

September 14th, 2007 por jeveaux

Semanas sem postar nada, estamos aí de novo. Vou tentar me lembrar dos últimos ou pelo menos de alguns dos últimos acontecimentos desse tempo longe do blog e fazer um resumo, ou pelo menos algo semelhante a um.

  • EJES: Bom, a última coisa que postei no blog foi sobre o início do II EJES, que foi realizado nos dias 30 e 31 de agosto. O evento correu bem e teve tudo que todos eventos "normais" sempre tem, desde alguns imprevistos com palestras/palestrantes até brindes legais, sorteios e tudo mais, e graças ao forte apoio e empenho do Victor Pinto (coordenador do ESJUG) tudo foi contornado e conseguimos realizar o evento sem maiores problemas. E por fim, mas não menos importante, tivemos a presença do Shoes no último dia, encerrando as apresentações com uma palestra muito, muito boa: "Introduzindo Agilidade Eficiência". Agora só no ano que vem :D
  • Palestra: Entre as chatas ótimas viagens, consegui arrumar tempo para atender um convite para fazer uma palestra de apresentação e introdução ao Java na Doctum, faculdade de Guarapari (cidade das praias boas) que fica bem pertinho de Vitória. Achei que foi bem legal lá e espero que o pessoal tenha gostado também.
  • WTF: Dar manutenção em qualquer sistema é sempre uma aventura, e às vezes encontramos algumas coisas, humm, hamm, digamos, horripilantes. Algo como isso por exemplo:
CODE:
  1. System.gc();
  2. System.gc();
  3. System.gc();

Será que com um "toc toc toc" desses o GC se anima a rodar? hehehe

  • WTF2: Desde muito tempo que sempre recebo alguns pedidos um tanto quanto "folgados" por e-mail, mas esses dias recebi um que acho que superou muitos dos outros que já recebi algum dia... O pior é que tive que responder.

Encontrei os teus dois trabalhos, do jantar dos filosofos e do barbeiro dorminhoco com a implementação em java, como ainda estamos aprendendo C++ ficaria muito grato se pudesse disponibilizar o codigo em C++ para linux, para meu email.

email: [email]

Desde ja agradeco pela atenção.

  • Sem muito a fazer: Pois é, apesar de sempre ter coisas na lista de pendência, de sempre ter um draft a se terminar, um e-mail a enviar, sempre temos um momento vago (não sei como isso é possível, mas acontece), Achei em algum lugar (algum blog ou fórum que infelizmente esqueci) o link de um site e fiz um teste para saber que linguagem de programação eu sou, não foi muita novidade, mas deu no deu:

  • Curso de RoR: Aproveitando o espaço, vou divulgar (se é que posso chamar isso de divulgação) o curso de Ruby On Rails que será realizado em Porto Alegre, pela Tech Office IT, empresa do Urubatan.
  • JustJava: E por fim estou preparando o material para a minha apresentação no JustJava deste ano, vou tentar fazer alguns resuminhos e postar aqui no blog.