작업을 컴퓨터 네트워크로 나누는 방법? 일부 처리 과정을 거쳐야하지만 불행히도 생성 시간보다

다음과 같은 시나리오를 상상해보십시오. 많은 데이터를 생성하는 중앙 컴퓨터가 있다고 가정하겠습니다. 이 데이터는 일부 처리 과정을 거쳐야하지만 불행히도 생성 시간보다 오래 걸립니다. 실시간 처리를 위해 더 많은 슬레이브 컴퓨터를 연결합니다.

또한 슬레이브가 추가 될뿐만 아니라 작업 중 네트워크에서 슬레이브가 탈락 할 가능성도 고려해야합니다. 중앙 컴퓨터는 모든 작업이 만족스럽게 완료되고 슬레이브에 의해 삭제 된 작업이 다른 작업으로 재 작업되는지 확인해야합니다.

주요 질문은 : 이것을 달성하기 위해 어떤 접근법을 사용해야합니까?

그러나 아마도 다음과 같은 답변을 얻을 수 있습니다. 제가하려는 일에 이름이나 디자인 패턴이 있습니까?

이 컴퓨터들이 서로 대화하도록하는 목표를 달성하려면 어떤 지식 영역이 필요합니까? (예 : 내가 알고있는 데이터베이스가 충분할까요, 아니면 아직 알지 못한 소켓이 필요할까요?)

그러한 시스템의 예가 있습니까? 주요 질문은 약간 일반적이므로 시작 지점 / 참조 지점을 갖는 것이 좋습니다.

참고 저는 C ++ 및 Windows의 제약 조건을 가정하고 있으므로 해당 방향을 가리키는 솔루션을 이해할 수 있습니다.



답변

그러한 시스템의 예가 있습니까?

예. 이 패턴을 분산 컴퓨팅 (또는 분산 프로그래밍 또는 분산 후 원하는 멋진 단어)이라고합니다. 다른 해결책을 찾기 전에이 사내를 구축하지 않는 것이 좋습니다. 다양한 옵션에 대한 이 스택 오버플로 질문 을 볼 수 있습니다. 그리고 계산 된 결정을 내립니다.


답변

다른 답변에서 언급했듯이이 분야는 분산 컴퓨팅 , 그리드 컴퓨팅 , 클러스터 컴퓨팅 및 고성능 컴퓨팅 으로 알려져 있습니다.

워크로드에 맞게 시작한 후 시스템 크기를 조정할 수있는 경우 ” 탄력적 “이라고하며 기존 그리드 컴퓨팅과는 다르다는 차이점을 추가하겠습니다. 이것이 ” 클라우드 컴퓨팅 ” 이라는 용어에 대한 (비 마케팅) 이유 중 하나입니다 . 사용자는 용량을 계획 할 필요가 없으며, 계산을 수행하는 머신의 수와 위치는 클라우드로서 그에게 특징이 없습니다.

또한 마스터가 실패한 작업을 다시 예약해야한다는 요구 사항을 해당 시스템의 ” 내결함성 “속성이라고합니다. ( 이 만화에 대한 필수 링크 )

개인 클라우드를 구축하려면 어떤 접근 방식을 사용해야합니까? 내 순서 나 선호에 따라 :

  1. 고유 한 클라우드를 구축하지 말고 다른 사람이 제공 한 인프라를 사용하십시오. 아마존은이 호출 가상 사설 클라우드 , 랙 스페이스 바로 프라이빗 클라우드를 ; 다른 제안을 찾아 비교할 수 있다고 확신합니다.

  2. 자체 분산 컴퓨팅 엔진을 구축하지 말고 다른 사람이 제공 한 엔진 을 사용하십시오. 컴퓨터 사용을 고집하는 경우 최소한 다른 사람이 제공하고 테스트 한 소프트웨어를 최대한 많이 사용하십시오. Pipes 인터페이스 를 통해 또는 Streaming API 를 통해 실행 파일 에서 C ++의 Hadoop을 사용할 수 있습니다 . 이 불꽃에 유사 스트리밍 인터페이스 .

  3. 모든 구성 요소를 처음부터 코딩하지 말고 커뮤니티의 구성 요소를 사용하십시오. 어떤 이유로 든 지금까지 읽고 자신의 클라우드 구성 요소를 배포하려는 경우 C ++의 표준 라이브러리에서 시작하지 마십시오. 필요한 주요 구성 요소는 다음과 같습니다.

    • 주석에서 언급 한 바와 같이 , 마스터로부터 프로세싱 노드로 태스크를 전송하고, 프로세싱 노드로부터 마스터로 결과 확인을 전송 하는 큐잉 시스템
    • 처리 노드가 데이터를 액세스하여 작업 할 수 있도록 분산 파일 시스템.

    둘 다에 대한 많은 대안이 있습니다. 큐잉을 위해 RabbitMQ 에는 ZeroMQ 와 마찬가지로 Windows 설치 프로그램이 있습니다. 분산 파일 시스템의 경우 Windows에 대한 경험이 충분하지 않습니다. SMB 공유를 DFS로 구성 할 수있는 것처럼 보이지만 여기에 힌트를 줄 수는 없습니다. 다른 답변에서 언급했듯이 MongoDB와 같은 분산 데이터베이스를 데이터에 사용한다고 생각할 수 있습니다. 그것은 Windows에서 실행됩니다 .

MPI (일반적으로 Boost 래퍼를 통한 OpenMPI 구현) 사용에 대해 생각할 수도 있지만 MPI 프로그램은 탄력적이거나 내결함성이 없습니다. 당신은 그것을 스스로 돌봐야합니다 (적어도 이것을 달성하기위한 몇 가지 메커니즘을 제공합니다 ). 그렇기 때문에 먼저 그러한 속성을 가진 배포 프레임 워크를 평가하는 것이 좋습니다.


답변