yeah, tudo assíncrono!

Ultimamente tem sido tudo assim, assíncro. O Nuswit já vai fazer aniversário de 1 ano, e vale lembrar que está em produção contínua, sem dar nenhuma manutenção.

Já estou mais que convencido que o caminho pros próximos anos dessa década não pode ser outro, ainda mais com o WebSocket no w3c.

Para contribuir com a interwebs, tenho mantido os seguintes projetos:

http://github.com/fiorix/cyclone
Um clone do Tornado, webserver assíncrono do FriendFeed, que desde o ano passado é do Facebook. Essa implementação, batizada de Cyclone, tem algumas diferenças:

  • Core I/O baseado no Twisted
  • Suporte nativo a XMLRPC
  • Suporte a localização baseada no gettext – ao invés do CSV, original do Tornado

Com vários aplicativos de exemplos, todos os plug-ins do Tornado para autenticação no Google, Twitter, Facebook, OAuth, OpenID, etc…

O RestMQ (coisas do Gleicon, que ajudei a implementar) é baseado nele. A nova versão do Nuswit também será.

http://github.com/fiorix/twisted-twitter-stream
Uma API bem simples para acessar a Streaming API do Twitter. Provê suporte a todos os métodos publicados pela API.

Não depende do TwistedWeb, a implementação do HTTP 1.1 está inteira no código – na verdade, apenas o lado do client com suporte a Comet.

Permite criar sistemas como este.

http://github.com/fiorix/txredisapi
Um driver assíncrono pro Redis, também baseado no Twisted. O protocolo de comunicação já existia, mas era carente de algumas coisas, que implementei:

Além de estável, é muito rápido! Também foi usado no RestMQ, e aparentemente, está se tornando popular. Hoje achei algumas referências enquanto procurava no Google.

http://github.com/fiorix/mongo-async-python-driver
Outro driver de banco de dados, pro MongoDB. O driver original para Python é síncrono, o que dificulta (embora não impossibilita) de usar em sistemas assíncronos, especialmente baseados no Twisted.

Boa parte da implementação é baseada no pymongo original, inclusive o codec de BSON (em C), formato binário usado pelo Mongo, baseado em JSON.

Provavelmente se tornará o driver assíncrono oficial do Mongo para Python+Twisted, e está em vias de se tornar estável – isso devido às várias mudanças na API, e implementação de vários recursos incluindo Lazy Connections, e Document Reference.

Também, já tem algumas pessoas de olho no GitHub, acompanhando o desenvolvimento.

Entre os vários dbs nosql (couch, redis, etc) o Mongo é um dos mais completos, com uma linguagem de query muito decente, entre os vários outros recursos nativos. O fato de usar mmap para acessar os dados também faz com que ele seja muito rápido.


5 Comentários on “yeah, tudo assíncrono!”

  1. Gleicon disse:

    O nome do repositório mudou para cyclone: http://github.com/fiorix/cyclone .

  2. Rafael Boni disse:

    Fala Fiori,

    Não sei se vc lembra de mim, mas foi seu aluno do curso de Redes de Computadores da Impacta (eu era da classe do Felipe Fag e o Style) ta lembrado ?

    Sempre visito seu blog, tem um conteudo muito bom…..parabens por todos os seus trabalhos…com certeza vc é um cara que admiro no mundo de T.I.

    Abração.

  3. Diego Sana disse:

    Fala Alexandre. Sou o cara do Filtrie, lá da Campus Party. Por acaso eu já havia lido alguns posts do seu blog antes da CP (monitoro posts sobre nosql/mongodb e descobri o blog assim), mas só hj quando fui te procurar no twitter me toquei que vc era vc :D

    Já que o assunto do seu post é assync, duas outras boas ferramentas que tenho usado pra tornar web apps assync são (provavelmente vc já conheça):
    – Gearman.org (job manager)
    – nginx_http_push_module (http://github.com/slact/nginx_http_push_module), módulo pro nginx ideal pra uso em aplicaçoes COMET

    Abs e sucesso.

  4. Samir Mamude disse:

    Muito informativo esse post, porém estou com algumas dúvidas. Atualmente venho desenvolvendo um sistema de gestão para mutiplos usuários e cada acesso é realizado sobre um subdomínio.

    Meu ambiente atual é o Django para tratar apenas as requisições POST ou GET, nada além disso. Passei a usar o MongoDb com o PyMongo+MongoEngine (ainda não sei é a melhor opçao) e para deployment Ngnix para arquivos estaticos (a user interface é baseada na biblioteca ExtJs) e o Apache com WSGI para controlar os processos Python….tudo isso funciona bem, mas realmente não sei a performance disso quando a aplicação começar a crescer vai me trazer problemas.

    Com base no seu post, vc acha q a combinação Cyclone+Twisted+Mongo-Async-Driver eu teria um desempenho melhor no meu projeto? Além da facilidade de implementação+deployment…

    Abraços,
    Samir


Deixe um comentário