Novo cartrige memcached

Como prometemos anteriormente, está disponível a nova versão do cartridge memcached! Graças ao Release 2 do OpenShift Origin, foi possível desenvolver facilmente um cartridge de memcached que pode ser utilizado tanto em aplicações normais quanto escaláveis.
Quando usado em aplicação não escalável, o memcached irá compartilhar os recursos do gear de aplicação.

O código do cartridge está disponível em https://github.com/getupcloud/openshift-origin-cartridge-memcached.

Esta release disponibilizou novas funcionalidades que só podem ser utilizadas com uma versão atualizada do RHC. Então antes de criar aplicação, certifique-se de que seu RHC está devidamente atualizado.

$ sudo gem update rhc

Caos não tenha o RHC instalado, veja aqui como instalá-lo em diversos sistemas.

 

Criando

 

Utilizarei uma aplicação python-2.7 para demonstrar, mas o cartridge funciona com qualquer tipo de aplicação.
$ rhc app-create hello python-2.7 -s --from-code=https://github.com/caruccio/openshift-python-memcached-example.git
$ cd hello

A flag -s cria uma aplicação escalável, separando o gear da aplicação do gear de memcached. Note que utilizamos uma aplicação pronta, conhecida como “quickstart”, realmente simples, que possui duas URLs:

  • /set/<nome>/<valor>: guarda valor com a chave nome no cache
  • /get/<nome>: busca valor da chave nome no cache

Em seguida adicionamos o cartridge de memcached em nossa aplicação.

$ rhc add-cartridge --app hello http://reflector-getupcloud.getup.io/reflect?github=getupcloud/openshift-origin-cartridge-memcached
$ rhc app-restart --app hello

Note que precisamos reiniciar a aplicação pois, no momento de sua criação, as credenciais de acesso ao memcached ainda não existiam.

Na URL do cartridge temos:

http://reflector-getupcloud.getup.io/reflect

Refletor é um tipo especial de aplicação que permite instalar cartridges a partir de qualquer repositório git (desde que este seja acessível publicamente).

github=getupcloud/openshift-origin-cartridge-memcached

O parâmetro “github” define que o código do cartridge está armazenado em um repositório no github, e seu valor especifica qual o repositório em questão.  Neste caso, https://github.com/getupcloud/openshift-origin-cartridge-memcached.

Para saber mais sobre cartridges e refletores, recomendo a leitura de https://www.openshift.com/developers/download-cartridges e 
http://openshift.github.io/documentation/oo_cartridge_developers_guide.html
 (ambos em inglês).

 

 1, 2, 3… Testando

 

Se tudo correu bem, temos uma aplicação escalável com um gear rodando python-2.6 e outro gear rodando memcached. Podemos disparar nosso teste. Crie duas entradas no cache: alo e hello.

$ curl http://hello-[dominio].getup.io/set/alo/mundo
OK (gear-id=5228b98399fc77e3f9000384)

$ curl http://hello-[dominio].getup.io/set/hello/world
OK (gear-id=5228b98399fc77e3f9000384)

Agora vamos recuperar os valores guardados:

$ curl http://hello-[dominio].getup.io/get/alo
mundo (gear-id=5228b98399fc77e3f9000384)

$ curl http://hello-[dominio].getup.io/get/hello
world (gear-id=5228b98399fc77e3f9000384)

Podemos escalar para dois gears de aplicação usando o seguinte comando:

$ rhc cartridge-scale python 2

E listar todos os gears da aplicação com:

$ rhc app-show --app hello --gears

Agora, ao acessar a aplicação, podemos cair em gears diferentes, mas com a mesma visão sobre o cache:

$ curl http://hello-caruccio.getup.io/get/alo
mundo (gear-id=5228badc99fc77e3f90003bf)

$ curl http://hello-[dominio].getup.io/get/hello

world (gear-id=5228b98399fc77e3f9000384) 

 

Finalizando

 

Sugiro que você inspecione o código de exemplo para entender como utilizar as variáveis de ambiente de acesso ao gear do memcached.

Futuramente tornaremos este cartridge escalável, permitindo sharding com múltiplas instâncias de memcached.

Alguma sugestão? Comentare

;)

 

Tem mais dúvidas? Envie uma solicitação

2 Comentários

  • 0
    Avatar
    Vijay

    Hi Mateus, I was executing the steps you listed out and I was stuck with a build error that says :

    .....

    checking for a BSD-compatible install... /usr/bin/install -c

    checking sasl/sasl.h usability... no

    checking sasl/sasl.h presence... no

    checking for sasl/sasl.h... no

    checking for SASL_CB_GETCONF... no

    checking for library containing sasl_server_init... no

    Note: checking out '1.4.20'.

    You are in 'detached HEAD' state. You can look around, make experimental

    changes and commit them, and you can discard any commits you make in this

    state without impacting any branches by performing another checkout.

    If you want to create a new branch to retain commits you create, you may

    do so (now or later) by using -b with the checkout command again. Example:

      git checkout -b new_branch_name

    HEAD is now at e73bc2e... I am the world's biggest moron.

    configure.ac:82: installing ./compile'
    configure.ac:5: installing
    ./config.guess'

    configure.ac:5: installing ./config.sub'
    configure.ac:7: installing
    ./install-sh'

    configure.ac:7: installing ./missing'
    Makefile.am: installing
    ./depcomp'

    configure: error: Failed to locate the library containing sasl_server_init

    Would you happen to know how the issue with sasl_server_init could be fixed ?

    Much thanks!

    Vijay

  • 0
    Avatar
    Mateus Caruccio

    Hello Vijay,

     

    If you are running you own OpenShift, all you need is to install sasl packages. I'm using cyrus-sasl-2.1.23-13.el6_3.1.x86_64 and cyrus-sasl-devel-2.1.23-13.el6_3.1.x86_64. Otherwise, you need to ask your sysadmin to install those for your.

Por favor, entre para comentar.
Powered by Zendesk