tutorial programacion imagenes erlang

programacion - erlang vs elixir



¿Distribuyó la seguridad de Erlang cómo? (1)

En este caso, distribuir Erlang no es lo que quieres. La conexión del nodo A al nodo B crea un solo clúster: un entorno informático enorme y confiable. No desea confiar en parte de esto, por lo que no quiere un solo clúster.

En su lugar, escriba un servicio de red específico. Use la red como su capa de abstracción. La forma más sencilla de hacerlo es establecer una conexión de transmisión (simplemente aburrir gen_tcp antiguo, gen_sctp o usar ssl o lo que sea) de A a B.

El proceso de manejo de socket en A recibe mensajes de cualquier parte del nodo A que necesite llamar B; usted escribe esto exactamente como lo haría si estuvieran conectados directamente. Use un estilo de mensajería Erlang normal: Message = {name_of_request, Data} o similar. El proceso de conexión en A simplemente lo hace gen_tcp:send(Socket, term_to_binary(Message)) .

El proceso de manejo de socket en B shuttles recibió mensajes de red entre el socket y sus procesos de servicio simplemente recibiendo {tcp, Socket, Bin} -> Servicer ! binary_to_term(Bin) {tcp, Socket, Bin} -> Servicer ! binary_to_term(Bin) .

Los resultados de la computación regresan en la otra dirección a través del mismo proceso usando la traducción de term_to_binary / binary_to_term nuevamente.

Sus procesos de servicio deberían estar recibiendo mensajes bien definidos y haciendo caso omiso de lo que no tiene sentido (por lo general, simplemente registrando las tonterías). Entonces, de esta manera, no está haciendo una RPC directa (que no es segura en un entorno que no es de confianza), solo está respondiendo a la semántica válida definida en su (pequeño) protocolo de mensajería. La forma en que se escriben los procesos de manejo de socket es qué puede resumir esto para usted y hacer que parezca que se trata de un entorno confiable dentro de Erlang distribuido, pero en realidad tiene dos clusters independientes que están limitados en lo que pueden solicitar de cada uno otro por la definición de su protocolo.

Quiero tener 2 nodos erlang independientes que puedan comunicarse entre ellos:

para que el nodo a@myhost pueda enviar mensajes a b@myhost .

¿Hay alguna forma de restringir el nodo a@myhost , por lo que solo se podría invocar una función de un módulo_seguro en b@myhost ?

Debería ser algo así como:

a@myhost> rpc:call(b@myhost,secure_module,do,[A,B,C]) returns {ok,Result}

y todas las demás llamadas

a@myhost> rpc:call(b@myhost,Modue,Func,Args) return {error, Reason}

Una de las opciones sería usar la biblioteca ZeroMQ para establecer una comunicación entre nodos, pero ¿sería mejor si se pudiera hacer usando algunas funciones / módulos estándar de Erlang?