2016-12-07 11 views
0

저는 기존의 Selenium 기반 웹 응용 프로그램 테스트 시스템의 기능을 확장하려고합니다. 시스템은 현재 한 번에 하나씩 만 테스트를 실행할 수 있습니다. 테스트 실행에 일부 병렬 처리를 추가하여 시스템의 처리량을 늘리고 싶습니다.Silo 당 최대 인스턴스 수를 특정 Grain으로 설정

나는 다른 기술을 연구하고 있으며 Microsoft의 Orleans에 관심이 있습니다. 그러나 Orlean의 문서로 하루를 보내고 난 후 기술이 특정 컴퓨터에서 최대 n 배의 특정 확장 가능한 액터를 실행해야하는 시나리오를 지원하는지 확인할 수 없었습니다.

제 경우에는 테스트를 실행하는 배우가 될 것입니다. 일반적으로 Selenium을 사용하여 테스트를 실행하려면 웹 브라우저 인스턴스를 열고 제어하는 ​​WebDriver 객체를 만들어야합니다. 이러한 웹 브라우저는 모두 동일한 프로세스의 새 창뿐만 아니라 별도의 프로세스로 열려 있어야합니다. 상한이 없으며 3 노드의 클러스터와 60 테스트의 테스트 계획을 말하면 각 시스템에서 동시에 20 개의 웹 브라우저가 열리므로 성능이 크게 저하되거나 완전한 충돌이 발생할 수 있습니다. 필자는 시스템 당 최대 3 개의 테스트 실행 액터가 있고 나머지 테스트를 대기열에 저장하고 다른 작업자가 테스트를 마친 후에 만 ​​실행할 것을 기대합니다.

올리언즈 기술로 구현하려면 어떻게해야합니까?

+0

질문에 잘못된 것이 무엇인지 설명하는 의견을 남길 수 있습니까? 고맙습니다. – Johnny

답변

1

이 적합한 솔루션이 MaxActiveThreads 주변에 깨끗이하지 않는 것입니다. 거의 변함이 없어야합니다. 대신 총 9 개의 일반 곡물을 사용할 수 있으며, 9 개의 서로 다른 곡물 ID (0 ... 8)를 사용하여 시스템을 사용할 수 있으며 시스템이 3 개의 서버에 무작위로 퍼트 리며 새로운 테스트 요청을 보낼 때 (StatelessWorker 그레인은 한 곡물이지만 서버 당 최대 활성화 수를 3로 설정하여 서버 당 정확히 3 회의 활성화가 이루어집니다 (9 페이지 참조). 합계) 시스템은 자동로드 밸런스를 수행합니다.

http://dotnet.github.io/orleans/Documentation/Advanced-Concepts/StatelessWorker.html

은 올리언스 지속적인 대기열에는 빌드가 없습니다. 클라이언트/발신자 쪽에서 대기열에 넣거나 한 번에 60 개의 모든 요청을 보내야하며, 각 그레인은 내부 메모리 대기열에 요청을 저장하고 이전 곡에 대한 작업이 완료되면 다음 곡을 시작할 수 있습니다.

+0

일반 곡물 (not-a-StatelessWorker 곡물을 의미하는 일반)에 대해 읽은 것부터 클러스터 내 유형별로 활성화 할 수 있습니다. 정규 곡물 솔루션에서 이름이 다른 9 개의 클래스가 있어야하지만 동일한 구현이 필요합니다. 나는 그 말이 맞습니까? 또한 StatelessWorkers는 로컬에서만 생성되므로 노드 A에서 노드 B의 StatelessWorker 그레인 생성을 요청할 수 없습니다. – Johnny

+1

전역 적으로 특정 ID에 대해 하나의 활성화가 있습니다. 사일로 주변에 배포 된 ID로 식별되는 동일한 그레인 유형/클래스의 개별 인스턴스가 있습니다. – lmagyar

+0

그건 의미가 있지만 어떻게 작동합니까? 내가 알기로는 곡물을 만드는시기와 방법에 대해 아무런 통제력이 없다. 실제로 그것이 필요한 것은 정확히 필요한 것이다. 특정 곡물이 특정 물리적 기계에서 정해진 횟수만큼 인스턴스화되도록하는 능력. – Johnny

0

문제점 : 테스트 실행을 병렬 처리하려고합니다.

해결 방법은 Selenium-hub 및 노드를 사용하는 것입니다. 당신은 그것을 위해 오를레앙이 필요하지 않습니다.

+0

필자는 내 질문에 약간의 맥락을주고 싶었고, 왜 내가이 특별한 문제를 가지고 있는지 설명했다. 그러나 내 질문은 올리언즈에 관한 것이었다. 셀레늄 그리드는 실제로 셀렌 (Selenium) 셀 위에 랩핑 (wrapping) 메소드를 사용하고 테스트에서 비 웹 컴포넌트와 상호 작용하기 때문에 실제로 옵션이 아닙니다. – Johnny

0

올리언즈는 대부분의 요구 사항을 즉시 처리합니다. Silo에서 구성한 것과 같이 많은 입자가 평행하게 생성됩니다 (기본값은 cpu 코어는 MaxActiveThreads 참조). 다른 모든 요청은 Orleans에 대기합니다.

당신은 올리언스의 설정 파일에서 구성 할 수 있습니다 : 올리언스를 들어

<Scheduler MaxActiveThreads="3"/> 
+0

답변에 자세한 내용을 제공해 주시겠습니까? 예를 들어 당신이 참조하는 설정은 어떻게 생겼을까요? 코드 스 니펫을 매우 환영합니다. – Johnny