Introducción
Requisitos mínimos
Empezando
Contáctenos
Emissary es un motor de flujo de trabajo basado en datos basado en P2P que se ejecuta en una red P2P de recursos informáticos heterogénea, posiblemente ampliamente dispersa y de varios niveles. Los itinerarios del flujo de trabajo no se planifican previamente como en los motores de flujo de trabajo convencionales, sino que se descubren a medida que se descubre más información sobre los datos. Por lo general, no hay interacción del usuario en un flujo de trabajo de Emissary, sino que los datos se procesan de manera orientada a objetivos hasta que alcanzan un estado de finalización.
Emissary es altamente configurable, pero en esta implementación básica no hace casi nada. Se espera que los usuarios de este marco proporcionen clases que extiendan emissary.place.ServiceProviderPlace para realizar trabajos en cargas útiles de emissary.core.IBaseDataObject.
Se puede hacer una variedad de cosas y el flujo de trabajo se gestiona en etapas, por ejemplo, ESTUDIAR, IDENTIFICAR, COORDINAR, TRANSFORMAR, ANALIZAR, IO, REVISAR.
Las clases responsables de dirigir el flujo de trabajo son emissary.core.MobileAgent y las clases derivadas de él, que administran la ruta de un conjunto de objetos de carga relacionados a través del flujo de trabajo y emissary.directory.DirectoryPlace que administra los servicios disponibles, su costo y calidad y mantener conectada la red P2P.
Sistema operativo Linux o MacOSX
JDK 11
ApacheMaven 3.5+
Lea la guía DEVELOPING.md para obtener información sobre cómo instalar los componentes necesarios, extraer el código fuente, compilar y ejecutar Emissary.
Ejecute mvn clean package
para compilar, probar y empaquetar Emissary
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.132 s [INFO] Finished at: 2022-01-10T22:31:05Z [INFO] ------------------------------------------------------------------------
Hay un script bash en Emissary que ejecuta todo. Está en el directorio de Emisarios de nivel superior. El script ejecuta la clase emissary.Emissary que tiene varios comandos Picocli disponibles para manejar diferentes funciones.
Si el script del emisario se ejecuta sin ningún argumento, obtendrá una lista de todos los subcomandos de configuración y una breve descripción.
./emissary
Ejecutar ./emissary help
le dará el mismo resultado que ejecutarlo sin argumentos. Si desea ver información más detallada sobre un comando, agregue el nombre del comando después de la ayuda. Por ejemplo, vea todos los argumentos con descripciones para el comando del servidor , ejecute:
./emissary help server
El resto de los comandos tienen argumentos (-b o --projectBase) que se pueden configurar, pero deben coincidir con PROJECT_BASE.
El directorio de configuración está predeterminado en /config pero también se puede pasar con (-c o --config) . Cuando se ejecuta desde git checkout, debe usar target como base del proyecto. Siéntase libre de modificar los archivos de configuración en target/config antes de comenzar.
El registro se maneja mediante logback. Puede apuntar a un archivo personalizado con el argumento --logbackConfig .
Consulte la ayuda -c de cada comando para obtener más información.
Este comando iniciará un servidor Emissary e inicializará todos los lugares, un lugar de recogida y filtros de entrega que estén configurados. Se iniciará en modo independiente si no se especifica -m o --mode . De forma predeterminada, la cantidad de MobileAgents se calcula en función de las especificaciones de la máquina. En las computadoras modernas, esto puede ser alto. Puede controlar la cantidad de agentes con -a o --agents . A continuación se muestra un ejemplo de ejecución.
./emissary server -a 2
Sin más configuración, comenzará en http://localhost:8001. Si navega hasta esa URL, deberá ingresar el nombre de usuario y la contraseña definidos en target/config/jetty-users.properties, que es emissary y emissary123.
El PickUpPlace predeterminado está configurado para leer archivos de target/data/InputData . Si copia archivos en ese directorio, verá que Emissary los procesa. Tenga en cuenta que solo se configuran toUpper y toLower, por lo que el resultado no será demasiado interesante.
El comando de agentes muestra la cantidad de MobileAgents para el host configurado y qué están haciendo esos agentes. De forma predeterminada, el puerto es 9001, pero puedes usar -p o --port para cambiarlo.
Suponiendo que está ejecutando 8001 desde el comando del servidor anterior, intente:
./emissary agents -p 8001
El grupo es una vista contraída de los agentes de un nodo. También tiene por defecto el puerto 9001. Para ejecutarlo para el servidor independiente iniciado anteriormente, ejecute
./emissary pool -p 8001
Este comando es más útil para un clúster ya que ofrece una vista más digerible de cada nodo.
El comando Env requiere que se esté ejecutando un servidor. Le pedirá al servidor algunos valores de configuración, como PROJECT_BASE y BIN_DIR. Sin argumentos, arrojará una respuesta json sin formato.
./emissary env
Pero también puedes volcar una respuesta adecuada para el abastecimiento en bash.
./emissary env --bashable
Al iniciar el servidor Emissary, en realidad se llama a este punto final y se descarga $PROJECT_BASE}/env.sh con las variables configuradas. Esto se hace para que los scripts de shell puedan source $PROJECT_BASE}/env.sh
y luego tener esas variables disponibles sin tener que preocuparse por configurarlas en otro lugar.
El comando config le permite ver la configuración efectiva para un lugar/servicio/clase específico. Dado que Emissary usa sabores, este comando mostrará la configuración resultante de una clase después de que se hayan aplicado todos los sabores. Este comando se puede utilizar para conectarse a un nodo Emisario en ejecución especificando -h
para el host (el valor predeterminado es localhost) y -p
para el puerto (el valor predeterminado es 8001). Para conectarse a un Emissary que se ejecuta localmente en el puerto 8001, cualquiera de los siguientes comandos funcionará:
./emissary config --place emissary.place.sample.ToLowerPlace ./emissary config --place emissary.place.sample.ToLowerPlace -h localhost -p 8001
Opcionalmente, puede especificar el modo fuera de línea usando --offline
para usar los archivos de configuración especificados en su CONFIG_DIR local:
./emissary config --place emissary.place.sample.ToLowerPlace --offline
En el modo fuera de línea, puede proporcionar variantes para ver las diferencias en las configuraciones:
./emissary config --place emissary.place.sample.ToLowerPlace --offline --flavor STANDALONE,TESTING
Estos son útiles para ver la configuración efectiva, pero también podemos ejecutarlos en modo detallado para ver todos los archivos de configuración junto con el resultado final. Esto se controla con la bandera --detailed
:
./emissary config --place emissary.place.sample.ToLowerPlace --detailed
o en modo fuera de línea:
./emissary config --place emissary.place.sample.ToLowerPlace --offline --detailed
Emissary es divertido de forma independiente, pero ejecutar un clúster es más apropiado para el trabajo real. La forma de ejecutarlo en clúster es similar a la independiente, pero necesita -m cluster para indicarle al nodo que se conecte a otros nodos. En el modo agrupado, Emissary también iniciará PickUpClient en lugar de PickUpPlace, por lo que deberá iniciar un alimentador.
Mire target/config/peers.cfg para ver los pares de encuentro. En este caso, hay 3. Los nodos que se ejecutan en los puertos 8001 y 9001 son solo nodos emisarios. El nodo que se ejecuta en 7001 es el alimentador. Entonces, iniciemos 8001 y 9001 en dos terminales diferentes.
./emissary server -a 2 -m cluster ./emissary server -a 2 -m cluster -p 9001
Debido a que todos estos nodos conocen los puertos 8001, 9001 y 7001, verá errores en los registros a medida que continúen intentando conectarse.
Tenga en cuenta que en implementaciones del mundo real no ejecutamos múltiples procesos de Emissary en el mismo nodo. Puede configurar el nombre de host con -h .
Con los nodos iniciados en los puertos 8001 y 9001, necesitamos iniciar el alimentador. El comando feed usa el puerto 7001 de forma predeterminada, pero necesitamos configurar un directorio desde el que leerá el feeder. Los archivos colocados en ese directorio estarán disponibles para que los tomen los nodos trabajadores y el trabajo debe distribuirse entre el clúster. Inicie el feed con
mkdir ~/Desktop/feed1 ./emissary feed -i ~/Desktop/feed1/
Debería poder presionar http://localhost:8001, http://localhost:9001 y http://localhost:7001 en el navegador y mirar los lugares configurados. Suelte algunos archivos en ~/Desktop/feed1 y observe cómo los 2 nodos los procesan. Es posible que les lleve un minuto comenzar a procesar.
Los agentes en modo agrupado nuevamente muestran detalles sobre los agentes móviles. Comienza con el nodo que configura (localhost:9001 de forma predeterminada), luego llama a todos los nodos que conoce y obtiene la misma información. Ejecútelo con:
./emissary agents --cluster
El grupo en modo agrupado también hace lo mismo que el grupo independiente. Comienza en el nodo (locahost:9001) de forma predeterminada, luego va a todos los nodos que conoce y agrega una vista contraída del clúster. Ejecutarlo con
./emissary pool --cluster
La topología se comunica con el nodo configurado (localhost:8001 de forma predeterminada) y se comunica con todos los nodos que conoce. La respuesta es lo que todos esos nodos conocen, por lo que puede crear una topología de red para su clúster. Ejecutarlo con
./emissary topology
El almacén de claves y la contraseña del almacén de claves se encuentran en el archivo emissary.client.EmissaryClient-SSL.cfg. Se incluye y configura de forma predeterminada un almacén de claves de muestra que puede utilizar para probar esta funcionalidad. No recomendamos utilizar el almacén de claves de muestra en entornos de producción. Para utilizar su propio almacén de claves, cambie los valores de configuración en el archivo emissary.client.EmissaryClient-SSL.cfg.
Autónomo
./emissary server -p 8443 --ssl --disableSniHostCheck
agrupado
./emissary server -p 8443 --ssl --disableSniHostCheck --mode cluster ./emissary server -p 9443 --ssl --disableSniHostCheck --mode cluster mkdir ~/Desktop/feed1 ./emissary feed -p 7443 --ssl --disableSniHostCheck -i ~/Desktop/feed1/
Si tiene alguna pregunta o inquietud sobre este proyecto, puede contactarnos en: [email protected]
Para preguntas de seguridad e informes de vulnerabilidad, consulte SECURITY.md