spoa-server

Example implementation of a native wrapper to use Python/Lua with HAProxy's SPOE filtering

10
2
10
3
C
public

Multi script langyage Stream Processing Offload Agent

This agent receive SPOP message and process it with script languages. The
language register callback with a message. Each callback receive the list
of arguments with types according with the language capabilities. The
callback write variables which are sent as response when the processing
is done.

Prerequirement

You have to install the development packages, either from the
distribution repositories or from the source.

CentOS/RHEL: sudo yum install python3-devel

The current minimal python version compatible with this library is 2.7.
It’s recommended to use python version 3 where possible due to python 2 deprecation.

Compilation

The server currently supports Lua and Python. Type “make” with the options:
USE_LUA=1 and/or USE_PYTHON=1.

You can add LUA_INC=… LUA_LIB=… to the make command to set the paths to
the lua header files and lua libraries.

Similarly, you can add PYTHON_INC=… PYTHON_LIB=… to the make command to set the paths to
the python header files and python libraries.
By default, it will try to compile by detecting the default python 3 parameters.
It will fall back to python 2 if python 3 is not available.

Start the service

After you have compiled it, to start the service, you just need to use “spoa”
binary:

$> ./spoa  -h
Usage: ./spoa [-h] [-d] [-p <port>] [-n <num-workers>]
    -h                  Print this message
    -d                  Enable the debug mode
    -p <port>           Specify the port to listen on (default: 12345)
    -n <num-workers>    Specify the number of workers (default: 5)
    -f <file>           Load script according with the supported languages

The file processor is recognized using the extension. .lua or .luac for lua and
.py for python. Start example:

$> ./spoa -d -f ps_lua.lua

 $> ./spoa -d -f ps_python.py

Configure

Sample configuration are join to this server:

spoa-server.conf : The HAProxy configuration file using SPOE server
spoa-server.spoe.conf : The SPOP description file used by HAProxy
ps_lua.lua : Processing Lua example
ps_python.py : Processing Python example

Considerations

This server is a beta version. It works fine, but some improvement will be
welcome:

Main process:

  • Improve log management: Today the log are sent on stdout.
  • Improve process management: The dead process are ignored.
  • Implement systemd integration.
  • Implement threads: It would be fine to implement thread working. Shared
    memory is welcome for managing database connection pool and something like
    that.
  • Add PHP support and some other languages.

Python:

  • Improve reporting: Catch python error message and report it in the right
    place. Today the error are dumped on stdout. How using syslog for logging
    stack traces ?

Maybe some other things…

v0.3.3[beta]