답변:
분산 컴퓨팅은 정확히 무엇을 구성합니까?
분산 컴퓨팅은 하나 이상의 문제를 해결하기 위해 서로 통신 하는 기본적으로 병렬 처리 요소 모음입니다. 이러한 처리 요소는 서로 충분히 분리되어있어 신뢰할 수 있고시기 적절한 메시징 구조를 구축하는 것이 실용적이지 않으므로 시스템 상태에 대한 전체적인 지식이있을 수 없습니다. 분산 시스템과 메시징의 특정 기능은 메시지가한다는 것이다 것 , 길을 잃을 것 , 깨진 얻을 것이다 지연 얻을 -이 공간의 솔루션이 고려해야합니다. 따라서 분산 프로그래밍은 네트워크 및 메시지, 병렬 처리 및 글로벌 정보 부족을 다루는 것입니다.
문제를 해결하는 가장 쉬운 방법은 단일 처리 요소를 특수한 정보, 즉 특정 정보에 대해 권한을 부여하는 것입니다. 그런 다음 다른 요소는 매번 정보를 참조하거나 정보를 캐시하고 정보가 오래되지 않기를 바랄 수 있습니다 (변경 사항을 알 수 없기 때문에). 이것은 고전적인 클라이언트 / 서버 아키텍처입니다.
인터넷 컴퓨팅 은 분산 컴퓨팅이지만 대부분의 분산 노드가 실제로하는 일을 제어 할 수있는 능력이 없습니다.
리소스에 대한 액세스를 위해 동기화하려는 여러 병렬 스레드가 분산 컴퓨팅 도메인에서 문제를 구성합니까?
그들은 가능한 구성 솔루션 클라이언트 / 서버 모델을 구축,하지만 자원 경쟁의 가능성이 크게 증가의 비용으로 할 때 유용합니다. 읽기의 경우 하드웨어가 충분하지 않은 경우 큰 문제가 아니지만 쓰기의 경우 실제로 큰 문제입니다.
그러나 피하려고 시도하는 것은 분산 잠금입니다. Paxos 프로토콜 과 같은 것을 사용하지 않으면 신뢰할 수있는 적시 메시징이 부족하여 분산 의사 결정 프로토콜이 절대적으로 사라지 지만 많은 경고가 있습니다. 분산 컴퓨팅의 근본적인 문제는 "메시지에 나쁜 일이 발생"한다는 것입니다. TCP와 같은 상대적으로 낮은 수준의 프로토콜은 문제를 줄이지 만 여전히 심하게 풀릴 수 있습니다.
리소스에 대한 액세스를 위해 동기화하려는 여러 병렬 스레드가 분산 컴퓨팅 도메인에서 문제를 구성합니까?
이러한 스레드가 다른 시스템에서 실행 중이거나 동일한 시스템에서 다른 프로세스에서 실행중인 경우에도 수행됩니다.
분산 컴퓨팅은 다른 컴퓨터 (즉, 분산 시스템)에서 처리되는 컴퓨팅 시스템입니다. 개별 프로그램은 일련의 통신 채널을 통해 서로 통신합니다. 이러한 채널은 일반적으로 네트워크 연결 (예 : TCP 소켓)이지만 다른 통신 프로토콜 및 장치 (예 : DeviceNET, BACNet, SECS-2, Modbus 등) 또는 특정 장치에 맞게 사용자 정의 된 프로토콜을 사용하는 경우가 많습니다.
분산 시스템은 일반적으로 단일 컴퓨터에서 실행되도록 설계된 시스템보다 훨씬 더 복잡합니다. 다중 스레드 응용 프로그램이 해결해야하는 동시성 및 리소스 잠금 문제 외에도 분산 시스템은 통신 오류 및 처리 노드 오류를 처리해야합니다. 여러 프로세서가 필요한 트랜잭션 (및 롤백)도 까다로울 수 있습니다.
분산 시스템은 여러 형태를 취하며 현재 많은 응용 프로그램에서 사용됩니다. 웹 응용 프로그램은 분산 시스템입니다. N 계층 시스템은 일반적으로 응용 프로그램이 다른 N 개의 서로 다른 프로세서를 갖습니다. 분산 시스템은 많은 공장 자동화 시스템에서도 사용됩니다.
쓰기 업 위키 백과에 분산 컴퓨팅에는 가치가 읽기입니다.
다중 스레드 응용 프로그램이 분산 응용 프로그램을 구성하는지 여부에 대한 질문으로 스레드가 단일 컴퓨터에서 실행중인 경우 시스템이 배포되지 않습니다. 분산 시스템에 내재 된 일부 문제를 해결해야하지만 전부는 아닙니다.
분산 컴퓨팅의 구성 요소에 대한 일반적인 질문에 대답하기 위해 Ann Wollrath, Geoff Wyant, Jim Waldo 및 Samuel C. Kendall의 분산 컴퓨팅에 관한 참고 사항을 추천합니다 . 최근 분산 시스템의 역사와 장애를 다루고 있으며 분산 컴퓨팅은 관련된 문제에 대해 다르게 생각할 것을 제안합니다.
본 문서에서는 뮤텍스 나 세마포어를 언급하지 않았지만 분산 소프트웨어 시스템의 적절한 엔지니어링에 대한 귀중한 통찰력을 제공합니다.
면접관이 뮤텍스와 세마포어에 대해 질문 한 이유에 대해서는 @Caleb에 동의합니다.
이러한 스레드가 다른 시스템에서 실행 중이거나 동일한 시스템에서 다른 프로세스에서 실행중인 경우에도 수행됩니다.
내가 추가하는 유일한 것은 뮤텍스와 세마포어가 여러 컴퓨팅 장치에 작업을 분산시킬 수있는 저수준 잠금 프리미티브이며 작동은 응용 프로그램의 성공에 필수적입니다. 분명히, 그것은 사용되는 언어와 기술에 달려 있습니다. Erlang 또는 Scala를 사용하는 경우 기존의 잠금 기반 동시성 대신 Actor 모델 기반 동시성을 사용하게됩니다.
우리는 "분산 시스템 (distributed systems)"에 관한 과정을 밟았으며, 그 정의를 정확히 기억하지는 못했지만 다음과 같은 내용을 담고있었습니다.
(나는 더 있다고 생각하고 마지막 요점에 대해 확신하지 못한다)
이제이 과정에서 분산 트랜잭션 및 분산 잠금을 구현하는 방법을 배웠습니다. 교훈은 분산 잠금은 기본적으로 분산 트랜잭션을 사용하여 구현되며, 이는 로컬에서 수행하는 것과 비교하여 다른 방법이며 본질적으로 내결함성이 아니며 분산 시스템을 처음부터 사용하려는 목적을 상실합니다.
편집 : 이 정의는 운영 체제 또는 데이터베이스 시스템의 좁은 의미에서 "분산 시스템"에 대한 것이며 클라이언트 서버 시스템과는 대조적입니다. 제 1 조건을 만족하는 것은 어떤 상황에서는 분산이라고 할 수있다.
우연히이 정의는 분산 및 기존 버전 제어 시스템의 차이점과 일치합니다.이 시스템은 모두 최소한 클라이언트 서버이며 종종 복제됩니다.
분산 컴퓨팅은 실생활에서 더 많이들을 수있는 엔터프라이즈 컴퓨팅의 "비 마케팅"용어입니다. 그러나 다른 사람들이 지적한 일반적인 아이디어는 "여러 대의 컴퓨터를 사용하여 작업을 수행하는 것"입니다.