Manual do Hacker Especial - Volume 2 (2019-07)

(Antfer) #1
76 | Manual do Hacker Especial

Esta é a principal razão para obter o
código fonte Riak e compilá-lo por si mesmo.
Antes de continuar a leitura deste capítulo,
precisamos apresentá-lo a alguns termos.
Primeiro, um nó Riak é análogo a um servidor
físico. Um cluster Riak é um inteiro de 160-bit
de espaço, que é dividido em partições de
igual tamanho, chamadas vnodes.
Partições são, por sua vez, os espaços nos
quais um cluster Riak é dividido. Cada vnode
no Riak é responsável por uma partição. Os
vnodes coordenam as solicitações para as
partições que eles controlam.
Um cluster Riak pode ter muitos nós que
residem nas mesmas ou em diferentes
máquinas físicas. Um anel é um inteiro de
160-bit de espaço, dividido equivalentemente
em partições, e o bucket é o nome do espaço
para o dado armazenado no Riak.
Internamente, o Riak calcula um hash
binário de 160-bit para cada par de bucket/
key e mapeia esse valor para uma posição
em um anel ordenado de todos esses valores.
Como você verá mais adiante neste
capítulo, qualquer interface do cliente para
Riak interage com objetos em termos de
bucket e key em que um valor é armazenado,
bem como o tipo de bucket que é usado para
definir as propriedades do bucket.
O modo de operação padrão para o Riak é
funcionar como um cluster composto por
múltiplos nós. Além disso, por padrão, nós
Riak não são clones uns dos outros.
Você pode iniciar três exemplos de
servidores de banco de dados Riak – não é
necessário iniciar todos os oito servidores
Riak – por meio dos seguintes comandos:


$ ./dev/dev1/bin/riak start
$ ./dev/dev2/bin/riak start
$ ./dev/dev3/bin/riak start
$ ./dev/dev1/bin/riak start
Node is already running!
Cada servidor Riak oferece uma interface
web (veja tópico na página anterior, para
visualizar um exemplo do que você verá
depois de se conectar a um servido Riak). O
número da porta e o endereço IP do servidor
são definidos dentro do arquivo riak.conf.
Este é um arquivo de texto simples que você
pode editar. O comando a seguir revela o IP
e o número da porta que cada servidor Riak
corresponde:
$ grep listener.http.internal `find ./dev -name
riak.conf`
./dev/dev2/etc/riak.conf:listener.http.internal =
127.0.0.1:10028
./dev/dev1/etc/riak.conf:listener.http.internal =
127.0.0.1:10018
./dev/dev3/etc/riak.conf:listener.http.internal =
127.0.0.1:10038
E assim por diante... Todo nó no Riak possui
um nome associado a ele. Você pode alterá-lo
ao alterar a variável nodemame do arquivo
riak.conf. O primeiro servidor (dev1) usa a
porta número 10018, o segundo (dev2) usa a
porta número 10028 e o terceiro (dev3) usa a
porta número 10038.
As versões do Riak anteriores à 2.0
usaram um arquivo de configuração chamado
app.config que foi substituído por riak.conf.
A maneira mais fácil de descobrir se um nó do
Riak está acima ou abaixo é por meio do comando
curl e da interface web do nó para pingá-lo:
$ curl http://localhost:10018/ping
OK
$ curl http://localhost:10038/ping
curl: (7) Failed to connect to localhost port
10038: Connection refused
Alternativamente, você pode usar o
seguinte:
$ ./dev/dev1/bin/riak ping
pong
$ ./dev/dev6/bin/riak ping
Node ‘[email protected]’ not responding
to pings.

A vantagem do “curl way” é que você pode
executá-lo a partir de uma máquina remota –
desde que o servidor Riak também atenda a um
endereço IP externo – sem ter que fazer login na
máquina que está executando o nó Riak. Você
pode parar o servidor Riak dev1 executando o
comando ./dev/dev1/bin/riak stop.
O Riak usa epmd – o servidor Erlang Port
Mapper – que desempenha um papel
crucial em toda a operação Riak. O
processo epmd é iniciado automaticamente
pelo comando erl se o nó deve ser
distribuído e não há instância em execução.
O processo epmd permite que os nós Riak
se encontrem uns aos outros. É um
processo extremamente leve e discreto que
pode continuar funcionando mesmo depois
que todos os nós Riak pararem. Você pode
encerrá-lo manualmente depois de parar
todos os nós Riak, mas isso não é
obrigatório. O comando a seguir lista todos
os nomes registrados com o processo epmd
atualmente em uso:
$ epmd -names
epmd: up and running on port 4369 with
data:
name dev3 at port 49136
name dev1 at port 55224
name dev2 at port 48829

Armazenando e
recuperando dados
Você pode se conectar ao servidor Riak dev1
e armazenar um documento usando a
interface web:
$ curl -v -X PUT http://127.0.0.1:10018/riak/
LXF/test -H “Content-Type: text/html” -d
“<html><body><h1>This is a test.</h1></
body></html>”
O que é realmente armazenado no local
teste /riak/LXF é o que, no código acima,
está depois de -d. Quando você insere um
novo valor, o Riak retornará um código HTTP


  1. Como você sabe, Riak é um key-value
    armazenado. Portanto, para recuperar um
    valor, você precisa fornecer uma chave para
    o Riak. Você pode se conectar ao servidor
    Riak dev1 e solicitar o documento


Gerar um cluster Riak com cinco nós
é muito fácil!

Benchmarking do Riak


Escrita em Erlang, Basho (http://basho.
com) oferece uma ferramenta de
benchmarking para o Riak. Instale-a
digitando o seguinte:
$ git clone git://github.com/basho/basho_
bench.git
$ cd basho_bench
$ make
Você deve então executar ./basho_
bench myconfig.config para obter a
ferramenta de coleta de dados, e criar
você mesmo um myconfig.config ou
modificar uma configuração existente. Os

arquivos existentes ficam no diretório
examples. Nós usamos o arquivo
examples/basho_bench_ets.config
como um ponto de partida e adicionamos
a linha {riakclient_nodes,
[‘[email protected], ‘[email protected]’]}.”.
O Basho Bench cria o processo Stats e
os operadores com base no que é definido
na configuração concorrente ajustada no
arquivo myconfig.config.
Assim que esses processos são
criados e inicializados, o Basho Bench
envia um comando run para todos os

operadores e, então, inicia o teste. O
processo Stats é notificado sempre que
uma operação é concluída. Também
recebe o tempo que levou para
completar a operação e o armazena em
um histograma.
Todos os resultados estão dentro do
diretório tests. Os últimos resultados
podem ser encontrados usando ./tests/
current/. Para gerar um gráfico em
relação aos resultados atuais, execute
make results (veja box na próxima
página ao lado).

Programação | NoSQL


Grupo Unico PDF Passe@diante

Free download pdf