CCR & DSS 툴킷 모델은 다른 확장 성 및 동시성 접근 방식과 어떻게 비교됩니까?

StackOverflow https://stackoverflow.com/questions/815959

  •  03-07-2019
  •  | 
  •  

문제

CCR & DSS 프레임 워크 모델을 포함한 확장 성 및 동시성에 대한 다양한 접근 방식을 비교하는 데 관심이 있습니다. 나는 특히 Hadoop 및 Erlang 스타일의 동시에 비교하는 데 관심이있을 것입니다.

도움이 되었습니까?

해결책

CCR, DSS 및 Erlang을 살펴 보았지만 CCR 만 중요한 생산 코드로 배송했습니다. 나는 Hadoop을 본 적이 없다.

Erlang의 동시성은 배우 모델의 구현에서 비롯됩니다. 각 '프로세스'에는 사서함이 있으며 한 번에 하나씩 메시지를 검색합니다. 블록을 처리 할 메시지가없는 프로세스는 스레드가 없습니다. 반대로, 작업을 수행하는 프로세스는 기본 기계가 노출되지 않은 상태에서 사용 가능한 CPU를 통해 예정되어 있습니다. 또한 프로세스는 클로닝/불변성으로 메시지 통과를 통해 통신하여 P1과 P2가 전달되는 메시지를 논리적으로 공유하지 않도록합니다.

내 느낌은 Erlang에게 단일 (아마도 멀티 코어) 기계에서 확장 성으로 명성을 부여하는 메시지 보내기 및받는 것이 불량의 특성이라는 것입니다. 본질적으로, 작업을 수행하는 프로세스는 사용 가능한 리소스에 걸쳐 효율적으로 예약되며 정지 프로세스는 메모리 외에는 아무것도 소비하지 않습니다. 한 번에 하나의 메시지를 처리하면 각각의 메시지 안정성을 보장하면 개발자는 더 이상 '경주 조건'과 같은 것에 대해 걱정할 필요가 없습니다.

CCR은 프리미티브를 전달하는 저수준 비동기 메시지 세트입니다. 더 간단한 것 중 하나는 La erlang을받는 것을받는 것입니다. 그러나 Join (모든 채널의 메시지 받기) 및 선택 (일부 채널에서 메시지 받기)과 같은 더 정교한 프리미티브가 있습니다. 이러한 프리미티브는 또한 차단이 없습니다. 수신기는 소수의 스레드에 의해 서비스되는 1..N 작업 대기열로 작업을 생성합니다 (메시지 처리).

내 생각에, (중요한!) 플랫폼 차이를 무시하고, 각각의 기본 작업 예약 루틴은 기본적으로 동일한 볼 파크에 있습니다. 그러나 Erlang은 고정 된 (액터) 모델이 구워진 언어와 플랫폼입니다. CCR은 이러한 것들 중 어느 것도 아니며, 도서관 일 뿐이며 더 자유롭게 사용할 수 있습니다.

DSS ~이다 CCR을 기반으로하는 프로그래밍 모델. 서비스 (erlang = processes)가 있고, 비동기 메시지 전달 (기본적으로 전체 클로닝 포함)을 유일한 서비스 간 커뮤니케이션으로 전달하고 외부 세계가 서비스를 제공하는 유일한 핸들은 URI (erlang = pid)입니다. . Erlang과 마찬가지로, (DE) 직렬화는 후자의 경우에 발생하지만 로컬 서비스를 호출하는 것 사이에는 본질적으로 차이가 없습니다.

DSS에는 또한 편안한 모델이 있습니다. 즉, 서비스는 일반적으로 고정되고 일반적인 운영 세트를 노출 시키며 서비스 상태는 이러한 운영에 의해 조작 된 리소스로 간주되어야합니다. 임의의 메시지를 프로세스로 보낼 수있는 Erlang과 대조하십시오. DSS 서비스는 다른 서비스와 대화 할 때 전체 CCR 프리미티브 세트를 사용할 수 있으며, 이는 분산 된 산란 수집 작전과 같은 것에 매우 유용 할 수 있습니다.

궁극적으로 DSS는 언어 나 VM이 아닌 지원 라이브러리의 프레임 워크 일 뿐이므로 Erlang 프로세스 작성과 달리 단일 DSS 서비스를 작성하는 데 관여하는 '의식'이 상당히 많습니다.

동시성 측면에서, 모두 실행 스레드에 대해 걱정하지 않고 여러 실행 스레드에서 안전하고 효율적인 코드를 작성하는 데 필요한 프리미티브를 제공합니다. 나는 그것이 대부분의 개발자들이 향하고 싶어하는 곳이라고 생각합니다.

확장 성 측면에서, 그것은 시스템 설계가 사용 된 도구만큼이나 많은 것만 큼 대답하기가 더 어렵습니다. 단일 노드의 확장 성 (즉, 코어를 추가 할 때 또는 노드를 추가 할 때 확장 성을 의미합니까? CCR은 후자에 대해 할 말이 없습니다. DSS와 Erlang은 와이어 전송을위한 상당히 효율적인 이진 형식을 지원합니다. DSS는 HTTP에서 직접 세계에 대한 자원 지향적 견해를 상속받습니다. 잠재적인 확장 성이지만 프로그래밍 모델의 일부 제한에서이를 수행합니다.

몇 가지 기술적 요점. 단일 DSS 서비스는 단일 Erlang 프로세스 (300-400 바이트)보다 더 많은 메모리 (~ 2K)를 소비합니다. 또한 각 DSS 서비스는 자체 작업 대기열을 가져오고 CCR에 의해 효율적으로 처리 될 수있는 작업 큐의 수에 상한 (~ 100000)이 있습니다. 나는 Erlang의 그런 상한에 숫자가 없지만 그것이 이것보다 더 높을 것이라고 의심합니다.

이 모든 것을 말하면, .NET 플랫폼에 있다면 CCR을 진지하게 살펴보면서 호의를 베풀 것입니다. 특히 반응성 이벤트 중심 프로그램에서는 매우 강력하다는 것을 알았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top