Saltar a contenido

riak: Controlador cliente de protocolo buffer riak para nginx-module-lua basado en la API cosocket

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-riak

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-riak

Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.

Este documento describe lua-resty-riak v2.0.0 lanzado el 05 de diciembre de 2013.


lua-resty-riak - Controlador cliente de protocolo buffer riak para ngx_lua basado en la API cosocket.

Originalmente basado en la biblioteca lua-resty-memcached.

Influenciado por riak-client-ruby

Descripción

Esta biblioteca Lua es un controlador cliente de protocolo buffer riak para el módulo ngx_lua de nginx.

Esta biblioteca Lua aprovecha la API cosocket de ngx_lua, que garantiza un comportamiento 100% no bloqueante.

Ten en cuenta que se requiere al menos ngx_lua 0.5.0rc29 o ngx_openresty 1.0.15.7.

Depende de los siguientes módulos Lua:

Sinopsis

location /t {
    content_by_lua '
        require "luarocks.loader"
        local riak = require "resty.riak"
        local client = riak.new()
        local ok, err = client:connect("127.0.0.1", 8087)
        if not ok then
            ngx.log(ngx.ERR, "connect failed: " .. err)
        end
        local bucket = client:bucket("test")
        local object = bucket:new("1")
        object.value = "test"
        object.content_type = "text/plain"
        local rc, err = object:store()
        ngx.say(rc)
        local object, err = bucket:get("1")
        if not object then
            ngx.say(err)
        else
            ngx.say(object.value)
        end
        client:close()
    ';
}

Uso

Consulta la documentación generada para el uso y ejemplos.

Nota La API de alto nivel debe considerarse estable - es decir, no se romperá entre versiones menores. La API de bajo nivel o cruda no debe considerarse estable.

Cambio Potencialmente Rompedor en 2.0

2.0.0 ahora utiliza vectores de relojes para obtener, establecer y eliminar objetos. Si estás utilizando un bucket que permite múltiples valores (hermanos), esto puede romper tu aplicación.

Limitaciones

  • Esta biblioteca no puede ser utilizada en contextos de código como set_by_lua, log_by_lua, y header_filter_by_lua donde la API cosocket de ngx_lua no está disponible.
  • Las instancias del objeto resty.riak no pueden ser almacenadas en una variable Lua a nivel de módulo Lua, porque luego serán compartidas por todas las solicitudes concurrentes manejadas por el mismo proceso de trabajo de nginx (ver Compartición de Datos dentro de un Trabajador de Nginx) y resultará en malas condiciones de carrera cuando las solicitudes concurrentes intenten usar las mismas instancias. Siempre debes iniciar estos objetos en variables locales de función o en la tabla ngx.ctx. Estos lugares tienen sus propias copias de datos para cada solicitud.

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-riak.