현재 제가 사용하는 PC에는 i7-3820
4코어, 8하이퍼스레드 프로세서가 탑재되어 있습니다.
apache-spark
몇 가지 계산을 수행하기 위해 매개변수(6 vCPU)를 사용하여 local[6]
독립형 sat를 실행했습니다 . 하지만 결국에는 다음 구성 요소를 디스패치할 수 있기를 원하기 때문에 변경해야 합니다.
계산을 합니다
apache-spark
. 하나master
와 두 개에는workers
실제 클러스터가 있습니다.(
PostGis
Postgresql) 데이터베이스.일반적으로 Open Data에서 제공되는 일반 텍스트 파일 또는 csv 파일을 저장합니다.
Geoserver
지리 지도의 인스턴스를 만듭니다.로그 분석기,
ELK
.Kafka
구성 요소가 수행하는 작업, 발견한 이벤트, 수행해야 하는 작업, 분석 중인 로그에 대한 구성 요소의 이벤트를 전송하는 스트림입니다 .사용자가
Angular
애플리케이션 내에서 지도와 결과를 볼 수 있는 웹 애플리케이션입니다.지금처럼 독립성을 유지
apache-spark
하고 클러스터링 아이디어를 포기했다면 포트와 환경 변수만 사용하면 내 컴퓨터에 모두 가질 수 있었습니다.나는 그 위에서 많은 가상 머신을
Debian 10
사용 하고 생성할 수 있습니다 .Vagrant
Virtualbox
각 구성요소를 도킹화할 수도 있습니다.
어떻게 선택해야 합니까?
Vagrant
/가 포함된 많은 가상 머신Virtualbox
.Docker
Docker-Engine
내 컴퓨터에 직접 설치해 보세요 .- 일부 가상 머신 에서 사용할 수 있나요
Docker
? - 고려할 수 있는 것보다 더 좋은 것이 있습니까?
그러나 나는 다음과 같은 이유로 운명을 정한 것이 아니었습니다.
- 클러스터
apache-spark
에는 3개의 vCPU가 있습니다. - 1은
PostGis
, - 1은
Geoserver
, - 1은
ELK
, - 1 웹 애플리케이션의 경우,
Eclipse
= 사용 가능한 vCPU 8개 중 7개이므로 개발을 위해 컴퓨터를 실행하고 컴퓨터에서 다른 작업을 수행하는 데 vCPU가 하나만 남습니다 .
답변1
이러한 유형의 결정은 일반적으로 개발자의 결정보다는 시스템 관리자의 결정에 가깝습니다. 개발 머신에서는 일반적으로 VM/컨테이너로 분할하기로 한 결정을 생각해서는 안 됩니다. 대부분의 경우 "베어메탈에서" 개발하고 모든 것을 직접 설치할 수 있습니다.
하지만!
시스템 관리자는 장기적으로 도움이 될 몇 가지 고려 사항과 사항을 고려하기를 원합니다.
- 소프트웨어의 프로덕션 버전은 여러 노드에 배포되므로(질문에서 제안한 대로 분해됨) 모범 사례는 다음과 같습니다.시험이 구성에서는 모든 것이 잘 작동합니다.
- 시스템 관리자가 아닌 개발자가 컨테이너 간의 구분선을 결정하는 것이 합리적입니다. 예를 들어 docker를 사용하여 배포하는 경우 개발자가
Dockerfile
개발 시스템에서 이러한 방식으로 실행할지 여부를 작성하는 것이 합리적입니다 .
이를 염두에 두고 컨테이너의 정확한 특성, 즉 컨테이너 사이의 구분선이 어디에 있는지에 대해 너무 많이 걱정할 필요가 없습니다.
VM, Docker 및 VM의 Docker
내가 아는 한, 가상 머신 기술은 호스트가 실제로 보유하고 있는 것보다 더 많은 가상 코어를 모든 가상 머신에 걸쳐 누적적으로 할당할 수 있습니다. 가상 머신은 호스트에 있는 물리적 코어보다 더 많은 코어를 가질 수 없지만 HT가 있는 프로세서는 4개가 아닌 8개의 코어로 계산됩니다. 따라서 원하는 경우 가상 머신에서 실행할 수 있습니다. 그러나 일반적으로 가상 머신은 중량급 컨테이너입니다. 각 컨테이너 내에서 전체 운영 체제(커널 포함)를 실행하며 RAM(CPU는 아닐 경우)을 매우 많이 사용하는 경향이 있습니다.
가상 머신은 또한 상태 저장 기능이 매우 뛰어납니다. 상용 개발의 과제 중 하나는 프로덕션, 테스트 및 개발 환경을 일관되게 유지하는 것입니다. 가상 머신에 많은 쓰레기를 남겨두고 테스트를 통과했지만 프로덕션에서는 실패하기 쉽습니다.
반면에 Docker(Windows 호스트에서 실행되지 않음)는 매우 가벼운 방식으로 프로세스를 격리합니다. 가상 머신처럼 각 컨테이너에 대해 별도의 커널을 실행하지 않습니다. 대신 Linux 커널에 내장된 특수 격리 기술을 사용하여 호스트에서 프로세스를 실행합니다. 이는 매우 효율적입니다.
Docker는 일회용 용기도 강조합니다. 이렇게 하면 컨테이너를 쉽게 해체(파괴)하고 이미지에서 다시 시작하여 프로덕션에서 작동하는지 증명할 수 있습니다.