2011-04-22 10 views
5

Estoy escribiendo una aplicación Erlang distribuida donde varios nodos están conectados a través de una red con ancho de banda limitado. Por lo tanto, me gustaría poder minimizar el tamaño de los paquetes enviados a través de la red cuando los procesos en diferentes nodos se envían mensajes entre sí.Comprimir mensajes enviados entre los nodos de Erlang

De http://www.erlang.org/doc/apps/erts/erl_ext_dist.html, entiendo que el mecanismo de distribución de Erlang utiliza erlang: term_to_binary/1,2 internamente para convertir los mensajes Erlang al formato binario externo que se envía a través de la red. Ahora, term_to_binary/2 admite varias opciones que son útiles para reducir el tamaño de los binarios (http://www.erlang.org/doc/man/erlang.html#term_to_binary-1), incluida una opción de compresión, así como la posibilidad de elegir una versión menor con una codificación más eficiente de flotantes.

Me gustaría poder decirle al mecanismo de distribución que use estas dos opciones cada vez que envía un mensaje por la red. En otras palabras, me gustaría poder especificar la lista de Opciones con la que el mecanismo de distribución llama term_to_binary. Sin embargo, no he podido encontrar ninguna documentación sobre este tema. ¿Es posible hacer esto?

Gracias por su ayuda! :)

+0

qué quiere hacer que las opciones de compresión configurable? En caso afirmativo, entonces debe tener algún tipo de archivo de configuración que contenga los términos de erlang y use el módulo "file: consultar". – Arunmu

+0

Sí, me gustaría que esto sea configurable, y almacenar esta información en un archivo que se procesa con el archivo: consulte, como sugiere, sin duda funcionaría. Sin embargo, mi pregunta principal es cómo lograr que el mecanismo de distribución acepte las opciones que especifico para activar la compresión: esto es sobre lo que no he podido encontrar ninguna documentación. –

+0

¿Cómo coincidiría el patrón con sus datos si está comprimido? – Arunmu

Respuesta

0

¿Está utilizando rpc de un nodo a otro? O comportamientos OTP? si es así, intente comprimir con zlib el binario antes de enviarlo

3

Si entiendo el código correctamente, la codificación del mensaje está codificada alrededor de the line 1565 of dist.c/dsig_send() por lo que no puede cambiar la forma en que se codifican los mensajes sin parchear y volver a compilar el emulador.

Sin embargo, puede cambiar el operador para la distribución de mensajes como se describe here. Hay an example of use SSL for Erlang distribution. De modo que puede crear una conexión que comprima todos los mensajes de transmisión (tal vez incluso sea posible con un ejemplo de SSL ajustado).

hay pocos ejemplos de módulos de distribución estándar:

+0

OK, gracias! Eso sin duda responde a mi pregunta, y su idea de implementar un proveedor alternativo de distribución es interesante ... Lo investigaré. Gracias de nuevo. :) –

Cuestiones relacionadas