작업을 컴퓨터 네트워크로 나누는 방법?


11

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

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

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

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

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

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

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


1
대기열 또는 워크 플로 시스템, 예 : aws.amazon.com/sqs en.wikipedia.org/wiki/Message_queue 등을 찾으십시오 . 큐 시스템은 분배, 점검 및 재 할당을 처리 할 수 ​​있습니다.
Luc Franken

2
당신이 찾고있는 용어는 병렬화 입니다. 이 길로 향하기 전에 문제를 실제로 병렬로 해결할 수 있는지 확인하십시오 (예 : 항목 n 의 결과가 항목 n-1 의 결과에 의존하지 않음 ).
Blrfl


@Blrfl 병렬화는 일반적으로 이와 관련이 없다고 생각합니다. 병렬화는 일반적으로 여러 코어 / 프로세서를 사용하는 단일 머신에서 다중 스레드 또는 다중 프로세스 실행 또는 동일한 머신에서 동시 실행과 연관됩니다. 분산 컴퓨팅은 그가 언급하고 있으며 설명에서 동시성을 보장하지 않으며 단지 비동기 성을 보장합니다 (즉, 동시, 동기 또는 대기열에서 지연 될 수있는 비 결정적 실행)
Jimmy Hoffa

3
아무도 hadoop을 언급하지 않은 것에 놀랐습니다.
Kevin

답변:


12

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

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


3
이것에 대해 가장 좋아하는 새로운 단어, 구름 을 잊지 마십시오 ! 또는 클라우드 컴퓨팅. 당신이 당신의 자신의 컴퓨터와 함께하는 경우 사람들은 그들을 개인 클라우드 또는 미니 클라우드라고 합니다. 말도 안되는 마케팅으로, 수년간 분산 컴퓨팅이라고 말한 것처럼 OP가 정확히 말하고있는 클라우드에 대해 읽은 곳을 OP에게 알려줍니다.
Jimmy Hoffa

3
@JimmyHoffa : "클라우드"라는 단어는 데이터 및 데이터 작업에 사용하는 소프트웨어가 로컬 컴퓨터 대신 인터넷에 있다는 것을 나타내는 데 자주 사용됩니다. 그리고 다른 경우에는 단일 모 놀리 식 VM 호스트가 아닌 클러스터에서 실행되는 가상 컴퓨터를 사용하고 있다는 의미입니다. 명백한 장점은 투명한 제로 다운 타임 장애 조치입니다.
tdammers

2
@tdammers는 사실이지만 OP가 설명하는 시스템 유형은 클라우드의 마케팅 모니 커를 활용하고 실제로 다른 모든 것을 지적한 많은 사람 중 하나입니다. 그것이 바로 유행어입니다. 그것은 정의없이 발명되었으므로 사람들은 그것을 수많은 다른 물건에 적용하여 효과적으로 모든 것을 의미합니다. 유행어를위한 만세.
Jimmy Hoffa

1
@JimmyHoffa : 또한 여기서 "구름"이라는 단어를 완전히 비시 공적으로 언급합니다.
tdammers

3
관리에 반대하여 사용하기에 좋은 단어가 될 수 있습니다. "이 데이터 처리 문제에 대한 해결책은 무엇입니까?" "글쎄, 우리는 그것을 컴퓨터 네트워크에 배포하고 병렬로 계산할 수있었습니다." 공백이 있습니다. "미니 클라우드를 구축 할 수 있습니다." "OKAY CARRY ON"
Morpork

4

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

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

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

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

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

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

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.