무료 슬롯 엔진은 무료 슬롯 모델을 해결하기 위한 고도로 분산된 시스템입니다. 이 시스템의 핵심은 사용자가 무료 슬롯 작업을 제출할 수 있습니다. REST API는 외부 세계에 대한 유일한 인터페이스이므로 모든 의사소통은 그것을 통해 이루어진다.
시스템은 제출된 작업을 대기열에 추가하고 이를 사용 가능한 작업자에게 할당합니다. 이는 무료 슬롯 프로세스입니다. 모델을 해결합니다. 무료 슬롯 Engine One을 사용하면 설치 중에 작업자가 정의되고 초기화됩니다. 이는 사용 가능한 리소스(예: RAM 및 CPU). 에서 모든 작업자가 다른 작업을 해결하느라 바쁜 경우 작업은 비어 있는 작업자가 완료될 때까지 대기열에 보류됩니다. 가능합니다. 무료 슬롯 엔진 SaaS를 사용하면 런타임에 요청 시 작업자가 생성되고 Kubernetes는 자원으로 일정 관리 사용할 수 있게 됩니다.
무료 슬롯 엔진은 주로 마이크로서비스 아키텍처를 따르는 컨테이너화된 애플리케이션입니다. 위의 두 그림은 각각 Engine One과 Engine Saas를 구성하는 모든 컨테이너를 보여줍니다. 그리고 그들이 어떻게 의사소통하다. 숫자가 4개가 부족해요 소프트웨어 업데이트 중에만 사용되는 마이그레이션 컨테이너입니다. 이러한 컨테이너에 대한 설명은 다음과 같습니다. 섹션사전 마이그레이션, MongoDB 마이그레이션, PostgreSQL 마이그레이션 및 RabbitMQ 마이그레이션.
Rest API는 시스템의 핵심입니다. 애플리케이션 로직을 호스팅하는 Python 컨테이너입니다. 모든 사용자에게 접근 가능한 작업. 사용자는 Nginx 컨테이너를 통해 이 컨테이너와 통신하여 다음을 수행합니다. 어떤 작업. 당신은 할 수 있습니다 예상 입력 및 가능한 출력이 포함된 광범위한 작업 목록을 찾습니다.여기.
Nginx는 역방향 프록시로 작동합니다. 외부에서 액세스할 수 있는 유일한 구성 요소입니다. 네트워크. 그것 TLS를 사용하여 연결 보안을 보장할 수 있습니다. 권장되지 않지만 TLS를 사용하지 않을 수도 있습니다. 우리는 모든 것을 격려합니다 TLS를 사용하기 위한 인터넷 연결 애플리케이션입니다. REST API에 대한 역방향 프록시 요청 외에도 컨테이너(말하는 것 uwsgi), 이 컨테이너는 엔진 UI도 호스팅합니다. UI는 루트 URL(/engine//), 도중에 변경되지 않은 경우 설치하고 REST API는 다음 위치에 있습니다./apiurl. 엔진 UI는 오픈 소스이며 소스 코드와 Nginx 구성 파일은 다음에서 찾을 수 있습니다.https://github.com/무료 슬롯-dev/engine-ui.
우리는 메시지 대기열 솔루션으로 RabbitMQ를 선택했습니다. 거의 모든 다른 장치와 통신합니다. 컨테이너. 그 이유는 무료 슬롯에 있습니다. 엔진, 우리는 가능한 한 이벤트 기반 접근 방식을 사용합니다. 예를 들어 작업이 완료되면 메시지가 마무리 대기열. 는 Cleaner는 종료 대기열을 수신하여 삭제해야 하는 중간 파일을 삭제합니다.
우리는 PostgreSQL을 사용하여 제출 정보, 사용자 테이블, 초대장 등등.
Hypercube Unpacker를 이해하기 전에 Hypercube 작업을 이해하는 것이 중요합니다 개념입니다. 우리의 말을 인용하면 Hypercube 작업에 대한 문서:
여러 가지를 실행하는 무료 슬롯 모델을 상상해 보십시오. 다양한 시나리오. 모델은 다음과 같습니다 항상 동일한 대형 GDX 파일로 초기화되지만 이중 대시에 따라 다르게 동작합니다. 매개변수--scenId. 에서 이 상황에서는 각 시나리오에 대해 동일한 대용량 GDX 파일을 업로드하지 않는 것이 좋습니다. 대신에 당신은 업로드하고 싶어 한 번만 실행하면 다양한 명령줄 인수를 사용하여 여러 작업(Hypercube 작업)을 생성할 수 있습니다.
하이퍼큐브 언패커는 Hypercube 작업에서 많은 작업을 생성하는 일을 담당합니다. REST API가 Hypercube 작업을 대기열, Hypercube Unpacker는 이를 가져와 필요한 만큼의 작업을 해결 대기열에 넣습니다.
하이퍼큐브 작업에는 수백 개의 작업이 포함될 수 있습니다. 작업자가 a에 속한 모든 작업을 마친 후 하이퍼큐브 작업을 따로 다운로드 받기는 번거로울 것 같습니다. Hypercube Appender는 모든 항목을 추가합니다. 결과는 단일 zip 파일로 압축됩니다. 또한 Hypercube 작업의 종료 시간을 표시합니다.
작업자 컨테이너는 무료 슬롯 작업 해결을 담당합니다. 해결에서 다음 작업이 필요합니다. 대기열, 바이너리 가져오기 mongoDB의 데이터와 PostgreSQL의 구조화된 데이터입니다. 다음을 시작하여 무료 슬롯 작업 해결을 시작합니다. 무료 슬롯 프로세스. 는 Worker는 사용자가 모델을 통해 임의의 코드를 실행할 수 있는 유일한 장소이므로 제한됩니다. 기본적으로 작업자 인터넷에 접속할 수 없습니다. 이는 설치 중에 변경될 수 있습니다. 작업자 컨테이너가 제공됩니다. 몇 가지 사전 설치 보안 위험을 최소화하는 프로그램입니다. 실행이 성공적으로 완료되면 작업자는 결과를 다음 위치에 업로드합니다. 추가 사용을 위한 mongoDB 그리고 검사.
사용자는 모델 파일이 더 이상 필요하지 않은 임시 모델을 무료 슬롯 엔진으로 보낼 수 있습니다. 작업이 끝났습니다. 또한 사용자는 나중에 필요하지 않은 추가 데이터를 모델에 제공할 수 있습니다. 청소기 작업 완료를 듣습니다 메시지를 확인하고 제출물에 임시 파일이 있는지 확인하고 삭제합니다. 그것도 책임이 있다 대기열 삭제용 더 이상 필요하지 않습니다. 다음 사항에 유의하는 것이 중요합니다.결과삭제되어야 함 수동으로 청소할 수 없기 때문에 필요한지 아닌지 추측해 보세요.
수학적 모델링에서는 한 모델이 다른 모델의 결과에 의존하는 것이 일반적입니다. 에서 그런 경우에는 엔진 종속성 시스템을 사용하여 네트워크 트래픽을 줄입니다. 종속성 검사기가 없으면 사용자는 다음을 보냅니다. 직업 'A', 기다림 완료하려면 결과를 다운로드하고 결과를 작업 'B'에 넣고 작업 'B'를 보냅니다. 이를 통해 사용자는 다음을 수행할 수 있습니다. 작업 'A'를 보내고, 작업 'B'가 작업 'A'에 종속되어 있음을 명시한 후 즉시 작업 'B'를 보냅니다. 따라서 'B'라는 직업은 일할 때만 시작 'A'가 끝났습니다. 그리고 'A' 작업의 결과는 'B' 작업의 디렉터리에 마운트됩니다. 의존성 checker는 모든 종속성이 충족될 때 작업 'B'를 해결 대기열에 넣는 역할을 담당합니다. 끝났습니다.
브로커(REST API)의 요청을 의도한 대상으로 전달하고 무결성을 보장합니다. 유지. 이 컨테이너는 무료 슬롯 엔진의 일부이며 다른 필수 구성요소 없이는 작동하지 않습니다.
무료 슬롯 엔진의 새 버전이 출시되면 변경될 수 있습니다.도커-작성파일, SQL 테이블, 새 MongoDB 인덱스 추가 또는 새로 만들기 RabbitMQ 등에서 교환합니다. 이러한 변경은 해당 마이그레이션 컨테이너를 통해 이루어집니다. 마이그레이션 컨테이너 연결 해당 컨테이너에 추가하고 데이터 정의를 업데이트합니다. 이 네 개의 컨테이너는 표시되지 않습니다. 에서위 그림왜냐하면 무료 슬롯 엔진 업데이트 후 한 번만 실행됩니다.
그작업 감시자"메모리 부족" 또는 "메모리 부족"과 같은 이벤트에 대해 활성 작업자를 모니터링합니다. "디스크 부족" 및 직업을 표시하다 따라서.
작업이 취소되면,작업 취소자작업자를 제거합니다포드생성되었지만 아직 생성될 수 없습니다. (예: 사용 가능한 리소스 부족으로 인해).