소개
최소 요구 사항
시작하기
문의하기
Emissary는 광범위하게 분산되어 있을 수 있는 이기종의 다중 계층 컴퓨팅 리소스 P2P 네트워크에서 실행되는 P2P 기반 데이터 기반 워크플로우 엔진입니다. 워크플로 일정은 기존 워크플로 엔진처럼 사전에 계획되지 않지만 데이터에 대한 더 많은 정보가 검색됨에 따라 검색됩니다. 일반적으로 Emissary 워크플로에는 사용자 상호 작용이 없으며, 오히려 데이터는 완료 상태에 도달할 때까지 목표 지향 방식으로 처리됩니다.
Emissary는 고도로 구성 가능하지만 이 기본 구현에서는 거의 아무것도 수행하지 않습니다. 이 프레임워크의 사용자는 emissary.core.IBaseDataObject 페이로드에 대한 작업을 수행하기 위해 emissary.place.ServiceProviderPlace를 확장하는 클래스를 제공해야 합니다.
다양한 작업이 가능하며 워크플로우는 STUDY, ID, COORDINATE, TRANSFORM, ANALYZE, IO, REVIEW 등 단계별로 관리됩니다.
워크플로 지시를 담당하는 클래스는 워크플로를 통해 관련 페이로드 개체 집합의 경로를 관리하는 emissary.core.MobileAgent 및 파생 클래스와 사용 가능한 서비스, 비용 및 서비스를 관리하는 emissary.directory.DirectoryPlace입니다. 품질을 유지하고 P2P 네트워크를 연결 상태로 유지하세요.
Linux 또는 MacOSX 운영 체제
JDK 11
아파치 메이븐 3.5+
필수 구성요소 설치, 소스 코드 가져오기, Emissary 구축 및 실행에 대한 정보는 DEVELOPING.md 가이드를 읽어보세요.
mvn clean package
실행하여 Emissary를 컴파일, 테스트 및 패키징합니다.
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.132 s [INFO] Finished at: 2022-01-10T22:31:05Z [INFO] ------------------------------------------------------------------------
Emissary에는 모든 것을 실행하는 하나의 bash 스크립트가 있습니다. 최상위 Emissary 디렉토리에 있습니다. 스크립트는 다양한 기능을 처리하는 데 사용할 수 있는 여러 Picocli 명령이 있는 emissary.Emissary 클래스를 실행합니다.
인수 없이 emissary 스크립트를 실행하면 모든 구성 하위 명령 목록과 간단한 설명이 표시됩니다.
./emissary
./emissary help
실행하면 인수 없이 실행할 때와 동일한 출력이 제공됩니다. 명령어에 대한 자세한 정보를 보려면 도움말 뒤에 명령어 이름을 추가하세요. 예를 들어 다음을 실행하는 서버 명령에 대한 설명과 함께 모든 인수를 확인하세요.
./emissary help server
나머지 명령에는 모두 설정할 수 있는 (-b 또는 --projectBase) 인수가 있지만 PROJECT_BASE와 일치해야 합니다.
config 디렉터리의 기본값은 /config이지만 (-c 또는 --config)를 사용하여 전달할 수도 있습니다. git checkout에서 실행하는 경우 target을 projectBase로 사용해야 합니다. 시작하기 전에 target/config의 구성 파일을 자유롭게 수정하세요.
로깅은 로그백에 의해 처리됩니다. --logbackConfig 인수를 사용하여 사용자 정의 파일을 가리킬 수 있습니다.
자세한 내용은 각 명령에 대한 도움말 -c를 참조하세요.
이 명령은 Emissary 서버를 시작하고 구성된 모든 장소, 픽업 장소 및 하차 필터를 초기화합니다. -m 또는 --mode가 지정되지 않으면 독립형 모드로 시작됩니다. 기본적으로 MobileAgent 수는 시스템 사양에 따라 계산됩니다. 최신 컴퓨터에서는 이 수치가 높을 수 있습니다. -a 또는 --agents를 사용하여 에이전트 수를 제어할 수 있습니다. 다음은 실행 예시입니다.
./emissary server -a 2
추가 구성이 없으면 http://localhost:8001에서 시작됩니다. 해당 URL로 이동하는 경우 target/config/jetty-users.properties에 정의된 사용자 이름과 비밀번호(emissary 및 emissary123)를 입력해야 합니다.
기본 PickUpPlace는 target/data/InputData 에서 파일을 읽도록 구성됩니다. 해당 디렉터리에 파일을 복사하면 Emissary가 해당 파일을 처리하는 것을 볼 수 있습니다. toUpper 및 toLower만 구성되므로 출력이 그다지 흥미롭지 않습니다.
Agents 명령은 구성된 호스트에 대한 MobileAgent 수와 해당 에이전트가 수행하는 작업을 표시합니다. 기본적으로 포트는 9001이지만 -p 또는 --port를 사용하여 변경할 수 있습니다.
위의 서버 명령에서 8001에서 실행 중이라고 가정하고 다음을 시도해 보십시오.
./emissary agents -p 8001
풀은 노드에 대한 에이전트의 축소된 보기입니다. 또한 기본값은 포트 9001입니다. 위에서 시작된 독립 실행형 서버에 대해 실행하려면 다음을 실행하세요.
./emissary pool -p 8001
이 명령은 모든 노드에 대한 더 이해하기 쉬운 보기이므로 클러스터에 더 유용합니다.
Env 명령을 사용하려면 서버가 실행 중이어야 합니다. PROJECT_BASE 및 BIN_DIR과 같은 일부 구성 값을 서버에 요청합니다. 인수가 없으면 형식이 지정되지 않은 json 응답을 덤프합니다.
./emissary env
그러나 bash에서 소싱하기에 적합한 응답을 덤프할 수도 있습니다.
./emissary env --bashable
Emissary 서버를 시작하면 실제로 이 엔드포인트가 호출되고 구성된 변수와 함께 $PROJECT_BASE}/env.sh가 덤프됩니다. 이는 쉘 스크립트가 source $PROJECT_BASE}/env.sh
한 다음 다른 곳에서 구성할 필요 없이 해당 변수를 사용할 수 있도록 하기 위한 것입니다.
config 명령을 사용하면 지정된 장소/서비스/클래스에 대한 효과적인 구성을 볼 수 있습니다. Emissary는 플레이버를 사용하므로 이 명령은 모든 플레이버가 적용된 후 클래스의 결과 구성을 표시합니다. 이 명령은 호스트에 -h
(기본값은 localhost)를 지정하고 포트에 -p
(기본값은 8001)를 지정하여 실행 중인 Emissary 노드에 연결하는 데 사용할 수 있습니다. 포트 8001에서 로컬로 실행 중인 Emissary에 연결하려면 다음 명령 중 하나를 사용하면 됩니다.
./emissary config --place emissary.place.sample.ToLowerPlace ./emissary config --place emissary.place.sample.ToLowerPlace -h localhost -p 8001
선택적으로 --offline
을 사용하여 오프라인 모드를 지정하여 로컬 CONFIG_DIR에 지정된 구성 파일을 사용할 수 있습니다.
./emissary config --place emissary.place.sample.ToLowerPlace --offline
오프라인 모드에서는 특징을 제공하여 구성의 차이점을 확인할 수 있습니다.
./emissary config --place emissary.place.sample.ToLowerPlace --offline --flavor STANDALONE,TESTING
이는 효과적인 구성을 보는 데 유용하지만 최종 출력과 함께 모든 구성 파일을 보기 위해 상세 모드에서 실행할 수도 있습니다. 이는 --detailed
플래그로 제어됩니다.
./emissary config --place emissary.place.sample.ToLowerPlace --detailed
또는 오프라인 모드에서:
./emissary config --place emissary.place.sample.ToLowerPlace --offline --detailed
Emissary는 독립 실행형에서도 재미있지만 실제 작업에는 클러스터를 실행하는 것이 더 적합합니다. 클러스터링을 실행하는 방법은 독립 실행형과 유사하지만 노드에 다른 노드에 연결하도록 지시하려면 -m 클러스터가 필요합니다. 클러스터 모드에서는 Emissary가 PickUpPlace 대신 PickUpClient도 시작하므로 피더를 시작해야 합니다.
랑데뷰 피어를 보려면 target/config/peers.cfg를 살펴보세요. 이 경우에는 3개가 있습니다. 포트 8001과 9001에서 실행되는 노드는 단지 Emissary 노드입니다. 7001에서 실행되는 노드는 피더입니다. 그럼 두 개의 서로 다른 터미널에서 8001과 9001을 시작해 보겠습니다.
./emissary server -a 2 -m cluster ./emissary server -a 2 -m cluster -p 9001
이러한 노드는 모두 포트 8001, 9001 및 7001에 대해 알고 있으므로 계속 연결을 시도하면 로그에 오류가 표시됩니다.
실제 배포에서는 동일한 노드에서 여러 Emissary 프로세스를 실행하지 않습니다. -h 를 사용하여 호스트 이름을 구성할 수 있습니다.
포트 8001 및 9001에서 노드가 시작된 경우 피더를 시작해야 합니다. Feed 명령은 기본적으로 포트 7001을 사용하지만 피더가 읽을 디렉터리를 설정해야 합니다. 해당 디렉터리에 삭제된 파일은 작업자 노드에서 사용할 수 있으며 작업은 클러스터 간에 분산되어야 합니다. 다음으로 피드를 시작하세요.
mkdir ~/Desktop/feed1 ./emissary feed -i ~/Desktop/feed1/
브라우저에서 http://localhost:8001, http://localhost:9001 및 http://localhost:7001을 입력하고 구성된 위치를 볼 수 있어야 합니다. ~/Desktop/feed1에 일부 파일을 삭제하고 2개의 노드가 해당 파일을 처리하는지 확인하세요. 처리를 시작하는 데 1분 정도 걸릴 수 있습니다.
클러스터 모드의 에이전트는 다시 mobileAgent에 대한 세부정보를 표시합니다. 구성한 노드(기본적으로 localhost:9001)에서 시작한 다음 알고 있는 모든 노드를 호출하고 동일한 정보를 얻습니다. 다음을 사용하여 실행하세요.
./emissary agents --cluster
클러스터 모드의 풀도 독립 실행형의 풀과 동일합니다. 기본적으로 노드(locahost:9001)에서 시작한 다음 알고 있는 모든 노드로 이동하여 클러스터의 축소된 보기를 집계합니다. 다음으로 실행하세요.
./emissary pool --cluster
토폴로지는 구성된 노드(기본적으로 localhost:8001)와 통신하고 알고 있는 모든 노드와 통신합니다. 응답은 모든 노드가 알고 있는 것이므로 클러스터의 네트워크 토폴로지를 구축할 수 있습니다. 다음으로 실행하세요.
./emissary topology
키 저장소 및 키 저장소 비밀번호는 emissary.client.EmissaryClient-SSL.cfg 파일에 있습니다. 이 기능을 테스트하는 데 사용할 수 있는 샘플 키 저장소가 기본적으로 포함 및 구성되어 있습니다. 프로덕션 환경에서는 샘플 키 저장소를 사용하지 않는 것이 좋습니다. 자체 키 저장소를 사용하려면 emissary.client.EmissaryClient-SSL.cfg 파일에서 구성 값을 변경하십시오.
독립형
./emissary server -p 8443 --ssl --disableSniHostCheck
클러스터링됨
./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/
이 프로젝트에 대해 질문이나 우려 사항이 있는 경우 [email protected]로 문의하실 수 있습니다.
보안 질문 및 취약점 보고에 대해서는 SECURITY.md를 참조하세요.