컴퓨터 클러스터를 사용하여 임의 바이너리 실행

컴퓨터 클러스터를 사용하여 임의 바이너리 실행

VPS가 3개 있습니다. 마스터, 슬레이브1, 슬레이브2를 가정합니다.

그들의 사양은 동일합니다.

  • 프로세서: 1CPU
  • 메모리: 1GB
  • 디스크: 10GB
  • 네트워크: LAN 내에서 서로 실행

메인 VPS에서 실행되는 임의의 바이너리(프로세스)를 VPS로 간주하고 싶습니다. 이는 마스터 VPS의 작업량이 네트워크를 통해 슬레이브 VPS로 공유된다는 것을 의미합니다.

따라서 프로그램은 다음 사양을 갖춘 컴퓨터에서 실행되고 있음을 보게 됩니다.

  • 프로세서: 3CPU
  • 메모리: 3GB
  • 디스크: 30GB

문제는 이렇게 컴퓨팅 파워를 결합할 수 있는 프로토콜이나 서비스가 있느냐는 것이다.

결합된 메모리(RAM) 또는 스토리지(SSD). 각 슬레이브의 마운트 지점에 ramf를 마운트하려고 합니다. 그런 다음 각 슬레이브에 대해 NFS 서버를 사용하고 마스터의 NFS 클라이언트가 이를 로컬로 마운트할 수 있도록 사용 가능하게 만듭니다. 마스터에서 마운트 지점을 단일 마운트 지점 /mnt/shm_from_slave1/mnt/shm_from_slave2단일 마운트 지점 으로 결합합니다 /mnt/shm_combined. 그런 다음 마스터의 결합 공유 메모리에 스왑 파일을 생성합니다 /mnt/shm_combined/swapfile. 그런 다음 스왑 파일이 자주 사용되도록 기본 운영 체제를 구성하십시오. 이것이 메모리 병합에 대한 나의 계획입니다. 프로세서 성능을 결합하려면 모르겠습니다.

답변1

여러 Linux 인스턴스에 걸쳐 시스템 리소스를 통합하려는 것 같습니다. 특히 RAM과 CPU에서는 이것이 완전히 가능하지는 않습니다. 디스크 공간의 경우 NFS 및 기타 네트워크 공유가 도움이 될 수 있습니다.

다른 Linux 시스템에서 프로세스를 생성하여 다른 시스템의 리소스를 소비하고 파이프와 같은 다른 항목을 네트워크를 통해 시뮬레이션할 수 있다고 가정해 보겠습니다. 그러나 공유 메모리로 인해 모델이 충돌합니다. Linux에서 공유 메모리는 다른 프로세스에도 매핑된 물리적 RAM 페이지에 직접 액세스하는 프로세스에 의해 구현됩니다. 이 상황을 시뮬레이션하려면 일종의 잠금 메커니즘이 필요하며, 이로 인해 심각한 성능 저하가 발생하여 솔루션을 실행 불가능하게 만들 가능성이 높습니다.

보다 일반적으로 귀하가 묻는 질문은 매우 다양한 능력과 능력으로 표현될 수 있는 슈퍼컴퓨터의 관점에서 논의됩니다.

"용량"은 전체 시스템에서 달성할 수 있는 총 처리량을 측정한 것입니다. 이는 시스템이 각각 단일 노드에 전달될 수 있는 매우 많은 유사한 작업을 처리하는 데 사용되는 경우 유용한 측정항목입니다. 시스템 용량 확장은 단순히 더 많은 노드를 추가하여 수행할 수 있으며, 이를 통해 시스템은 동일한 시간에 더 많은 작업을 처리할 수 있습니다. VPS 서비스의 대용량 시스템은 Kubernetes와 같은 도구를 사용하여 다수의 노드에서 다수의 작업과 서비스를 조정하는 경우가 많습니다.

"용량"은 시스템이 완료할 수 있는 단일 작업의 크기를 측정한 것입니다. 이는 단순히 새 노드를 추가하는 것만으로는 확장할 수 없습니다. 동일한 작업을 처리하기 위해 새 노드를 추가하면 네트워크 통신 오버헤드도 증가하므로 작업을 점점 더 많은 노드로 분산하려고 하면 실제로 처리 속도가 빨라지기보다는 느려질 수 있습니다.

따라서 단일 노드의 기능 한계에 도달하면 할 수 있는 유일한 일은 작업이 더 작은 조각으로 분할되도록 소프트웨어를 변경하는 것입니다. 이를 더 작은 부분으로 나누어 해당 부분을 여러 노드에 분산시켜 용량 문제를 용량 문제로 전환할 수 있습니다.

간단히 설명하자면 이렇습니다.황혼Python 프로그래밍 언어의 경우. 데이터 세트에 대해 명령을 실행한 다음 자동으로 데이터 세트와 명령을 분할하여 여러 노드에 분할할 수 있도록 해야 합니다.

그러나 필요에 따라 일부 계산 문제는 이러한 방식으로 분할할 수 없습니다. 분할은 소프트웨어를 직접 작성하는 경우에만 가능합니다.

관련 정보