Vm 웨어는 갑자기 첫 번째 오픈 소스를 Paas-cloudfoundry이 4 월 발표 했다. 그것의 릴리스 이후 달에 저자 되어 그것의 진화에 대 한 우려와 그것의 건축 디자인에서 혜택과 당신과 함께 그것을 공유 하는 것에 쓸 수 필요를 느꼈다.
이 문서는 두 부분으로 나눌 수 것입니다: 첫 번째 부분은 주로 아키텍처 소개 모듈에서 Cloudfoundry의 디자인에 의해 도입, 메시지 흐름의 여러 부분에 각 모듈 협력을 조정 하는 방법, 두 번째 부분은 첫 번째 부분에 따라 것입니다 첫 번째 섹션에 소개 된 건축 기술을 사용 하 여 대상 Cloudfoundry와 함께 데이터 센터에서 프라이빗 PAAs를 배포 하는 방법.
이야기의 첫 번째 부분은 10 월 월 12 일에 Vmwarecloud 포럼에서 Cloudfoundry 건축에 팻의 연설을 인용 것입니다. 팻 했다 Cloudfoundry 코어, 그리고 그의 음성은 잘 듣고 가치. 현재는 그가 무슨 말을 이해 하는 경우이 부분을 직접 건너 선택할 수 있습니다. 난 않을, 그 보다 더 잘 말할 수 내가 내가 말한 것에 대해 구체적인 것을 제외 하 고.
I. 아키텍처 및 모듈
전반적으로, Cloudfoundry 아키텍처는 다음과 같습니다.
이 아키텍처 다이어그램으로 아래 사용 모듈 아키텍처 다이어그램 패 트의 PPT에서 있습니다. 위에서 우리는 그 cloudfoundry 주로 다음 주요 구성 요소로 구성 되어 볼 수 있습니다.
1, 라우터: 이름에서 알 수 있듯이, 라우터 구성 요소 Cloudfoundry에 모든 들어오는 요청 경로 하는 것입니다. 라우터를 입력을 요청의 두 가지 주요 유형이 있다: 첫째, Vmcclient 또는 Cloudfoundry 사용자, 관리 지침 STS에서.
예를 들면: Vmcapps 모든 응용 프로그램을 나열 하 고, 애플 리 케이 션, 제출 하 고 등등. 이러한 유형의 요청은 Applife 관리 구성 요소, Cloudcontroller 구성 요소 라는 않으며 두 번째 방문 하는 외부 응용 프로그램 배포에 대 한 요청입니다. 이 부분의 요청 appexecution, 또는 구성 요소 라는 Deas가 라우팅됩니다. Cloudfoundry 시스템을 입력 하는 모든 요청 라우터 구성 요소를 통해 전달 됩니다, 그리고 그 라우터를 걱정 하는 친구가 있을 수 있습니다 것을 보고 된다 따라서 전체 구름의 병목 단일 지점.
하지만 클라우드 시스템으로 Cloudfoundry, 그것의 디자인의 핵심 종속성, 구성 요소 병렬 확장의 단일 지점으로 이동 하는 것입니다 그리고 확장성을 보장 하기 위해 대체 될 수 있다,이 cloudfoundry, 그리고 심지어 모든 클라우드 컴퓨팅 시스템 디자인 원칙, 나중 문서, cloudfoundry 어떻게 토론할 것 이다 현재, 당신이 알고, 시스템 요청을 처리 하기 위해 함께 라우터 수를 배포할 수 있습니다 하지만 라우터 상단 loadbalance 하지 cloudfoundry 구현 범위, Cloudfoundry만 모든 요청 상태 인지 확인 는 위 균형된 부하 선택 표면 매우 매우 큰, 예를 들어 DNS 통해 할 수 있습니다, 또한 하드웨어 loadbalancer, 또는 간단한 포인트 로드 분산으로 권해를 배포할 수 있습니다, 가능한.
라우터 구성 요소, 현재 버전 nginx에 대 한 간단한 패키지입니다. Ngnix에 익숙한 친구 소켓 파일 될 수 있는 알고 있어야 합니다 (. 양말 파일) 입력된 출력으로. Cloudfoundry를 설치 하는 모든 라우터 구성 요소 서버는 ngnix.conf 파일에 대 한 다음과 같은 구성으로는 nginx를 설치:
전반적으로, 라우터 구성 요소 다음과 같이 구성:
2, DEA (물방울 실행 기관): 모든 작은 물방울 이라고 해결의 첫 번째. Cloudfoundry의 개념에 물방울 제출, 실행 환경,이 작은 스크립트는 모두 함께 타르 패키지로 압축 됩니다 시작/중지와 같은 일부 관리 스크립트의 cloudfoundry 뿐만 아니라 소스 코드를 참조 합니다. 또한 위에서 설명한 패키지 만들기 고 잘 저장 과정은 Stagingapp 라는 개념 이다. 응용 프로그램을 시작할 때까지 Cloudfoundry는 자동으로이 작은 물방울을 저장 합니다, 그리고 DEA 모듈을 배포 하는 서버와 서 방울 복사본과 실행. 그래서 10 인스턴스를 응용 프로그램을 확장 하는 경우는 물방울 복사 10 부 되며 10 DEA 서버 실행.
다음 그림은 DEA 모듈의 건축 다이어그램:
클라우드 컨트롤러 모듈 (아래 설명 참조) 이러한 요청을 수신 하 고 다음 NFS에서 오른쪽 작은 물방울을 찾을 DEA,DEA.RB를 기본 애플 리 케이 션 시작/중지, 등 관리 요청을 보냅니다. 고 말했다 물방울은 실제로 실행 중인 스크립트, TAR 패키지의 실행 환경, DEA만 풀고, 그것 필요와 내부 시작 스크립트,이 애플 리 케이이 션을 실행 하도록 할 수 있습니다. 그래서, 애플 리 케이 션은 시작, 즉,이 서버에 있는 포트 중 대기, 그리고 응용 프로그램을 요청 포트에서 제공으로 올바른 정보를 반환 받을 수.
다음 정리 작업을 할 dea.rb: 1, 라우터 모듈에 게 정보. 우리가 말했듯이, 모든 요청은 cloudfoundry로 처리 되 고 라우터 말해, LoadBalance 원칙에 따라 필요 후 응용 프로그램, 응용 프로그램 요청에 대 한 사용자 액세스를 포함 하 여 라우터 모듈에 의해 전달 응용 프로그램의 인스턴스 작업을 할 수 있도록, 적절 한 요청을 설정; 2, 일부 통계 작업, 예를 들어 사용자에 게 할당량 제어, 등 3, Cloudcontroller에 게 응용 프로그램의 새 배포 작업 정보 Healthmanager 모듈을 얘기 하 고 응용 프로그램의 인스턴스 작업은 실시간으로 보고. 또한, DEA는 물방울 쿼리 작업, 예를 들어 일부 애플 리 케이 션, DEA의 로그 정보를 쿼리 하는 Cloudcontroller 통해 사용자는 작은 물방울에서 다시 로그에 걸릴 필요한 경우 합니다.
3, Cloudcontroller:cloudcontroller는 Cloudfoundry 관리 모듈. 주요 작업은 다음과 같습니다.
(a) 추가와 애플 리 케이 션;의 삭제
(b) 시작 및 중지 응용 프로그램;
c) 준비 애플 리 케이 션 (팩 애플 리 케이 션 물방울에);
D 수정 운영 환경 등 인스턴스, MEM, 포함 하는 응용 프로그램의.
전자 관리 서비스, 서비스 및 애플 리 케이 션; 바인딩을 포함 하 여
(f) 클라우드 환경 관리;
(g) 클라우드 사용자 정보 수정
h) 보기 클라우드 파운드리, 및 각 응용 프로그램에 대 한 정보를 로그 합니다.
이 조금 복잡해 보일 수도 있지만 간단 하 게, 그것은 간단 수: VMC 및 Sts와 상호 작용 하는 서버 쪽. VMC 및 STS 사용 Cloudfoundry 통신에 대 한 RESTful 인터페이스, 반면에 cloudcontroller는 전형적인 Rubyon 프로젝트, VMC 또는 JSON 형식 프로토콜을 STS에서 레일 그런 다음 Cloudcontroller 데이터베이스, 전체 구름을 제어 하려면 각 모듈에 동시 메시지를 작성 합니다. 다른 ROR 프로젝트와 마찬가지로 Cloudcontroller에 대 한 모든 Api는 conf/routes.rb에서 볼 수 있습니다. 오픈 RESTful 인터페이스의 혜택은 제 3-파티 응용 프로그램 개발 및 통합, 어디 조직 Cloudfoundry와 사설 클라우드 배포 하 여 전체 클라우드 환경 관리를 자동화할 수 있습니다. 이 부분은 두 번째 부분에서 논의 될 것입니다.
다음 그림은 클라우드 컨트롤러 아키텍처 다이어그램:
건강 관리자 및 DEA는 외부 모듈, Ccdatabase는 Cloudcontroller 데이터베이스, 이것이 전체 cloudfoundry hp 하지 수 있습니다. Cloudcontroller 데이터베이스 동시성을 많이 없습니다, 응용 프로그램 수준 액세스 아래의 서비스 모듈에 의해 처리 됩니다, 그리고 데이터베이스가 클라우드 구성 정보. 읽기 작업은 마약, 초기화 하기 위한 기준으로 주로 마약 시작에서 Healthmanager 모듈에서에서 예상된 상태 정보를 읽을 것 이다 그리고 실제 상태 정보를 마약에서 얻은 데이터의이 부분을 비교 것입니다.
NFS는 여러 Cloudcontroller의 공유 스토리지, 중요 한 작업 중 하나는 Cloudcontroller Stagingapps. 방울 저장소는 클러스터 된 환경에서 고유 합니다. Cloudcontroller 클러스터 실행 하는 동안, 즉, 모든 제어 요청 처리 되며 간단한 사용자 시나리오를 가정 하는 다른 cloudcontroller: 우리는 Cloudfoundry를 응용 프로그램을 배포 해야. 우리가 간단한 푸시 명령 한 후 VMC 일 후 사용자 인증을 배포 하는 애플 리 케이 션의 수를 미리 정해진된 금액 초과 여부의 질문 관련된 애플 리 케이 션 질문 들을 시작 해야 4 지침을 보낼:
1입니다. 응용 프로그램을 만들려면 "응용 프로그램"에 게시물을 보내기
2입니다. 넣어 보내 "애플 리 케이 션 /: 이름/응용 프로그램", 업로드 애플 리 케이 션;
3입니다. Get을 보내 "애플 리 케이 션 /: 이름 /", 응용 프로그램 상태 고 볼 경우 시작;
4입니다. 시작 되지 않은 경우에 넣어 보내 "애플 리 케이 션 /: 이름 /" 시작 있도록.
경우 단계 2 및 4 다른 클라우드 컨트롤러에 의해 처리 되 고 보장은 없습니다 그들이 같은 물방울을 찾을 것입니다, 4 단계 해당 물방울을 찾을 수 없으므로 실패 합니다. 지시의이 순서 같은 작은 물방울에 관해서 어떻게 보장 합니까? NFS, Cloudcontroller 공유 스토리지를 만들기는 쉬운 방법입니다. 하지만이 방식은 보안 완벽 한. 10 월 12 Vmwarecloud 포럼, 팻 우리 큰 조작 Cloudfoundry의 다음 버전에 있을 것 이라고 말했지만 그 부분의 코드 오픈 하기 전에, 그것은 너무 많이 의견을 나를 위해 편리한.
4, Healthmanager: 일 복잡 한, 단순히 실행 정보 및 다음 통계 분석 보고서 등을 다양 한 마약에서 말했다. 통계 지표 cloudcontroller 세트와 비교 하 고 경고를 제공 합니다. Healthmanager 모듈은 아주 완벽 하 게, 하지만 cloudmanage 스택 자동화 건강 관리, 분석은 매우 중요 한 지역, 그리고이 많은 장소에서와 함께 확장 될 수 있다 orchestrationengine 관리, 클라우드를 만들 수 있습니다 조기 경보, 이후 하지만 BI 기술, 통계 작업, 자원의 합리적인 할당 될 수 있습니다. Cloudfoundry는이 점에서 개발 여전히.
5, 서비스: 클라우드 파운드리 서비스 모듈은 소스 코드 제어에서 볼 수 cloudfoundry 생태계에 그들의 서비스를 통합 하기 위해 타사를 촉진 하기 위하여 독립, 플러그인 모듈입니다. 서비스는 GitHub에 Cloudfoundry 코어 프로젝트 Vcap, Vcap-서비스 독립적인 저장소로 보였다. 서비스 모듈 디자인 원리는 제 3 자 서비스 제공 업체를 촉진 것입니다. In this regard Cloudfoundry 않았다 GitHub 보기에서 아주 성공적, 다음과 같은 서비스 제공: 한) MongoDB; b) MySQL; c) neo4j; d) PostgreSql; e) rabbitmq; f) redis; g) Vblob입니다. 기본 클래스는 기본 폴더에 배치 됩니다.
내 두 개의 기본 클래스를 상속 해야 제 3 자 자체 cloudfoundry 서비스를 개발 하는 경우: 노드 및 게이트웨이, 일부 작업 하면서 같이: 규정, Provisioner.rb, Service_error 및 Service_message를 기초로 자신의 논리를 추가할 수 있습니다. ELC 블로그 소개 될 것 이다이 글의 범위 안에 자세하게 이해 하 고, 프레임 워크에서 서비스 사이의 관계를 알고 그들의 자신의 서비스를 작성 하는 방법에 대 한 서비스 및 수평 확장의 상속 관계를 통해 자료 Cloudfoundry 및 앱 호출 서비스 완료이 간단한 건축 접근을 이루어집니다.
6, NAT (메시지 버스): 일반 건축의 cloudfoundry에서 다이어그램, 각 모듈의 중앙에 위치한 NAT 라는 구성 요소입니다. Nat은 경량, cloudfoundry 메시징 데 릭, 건축 부문의 건축가 의해 개발 된 자료 및 구독 메커니즘을 지 원하는 시스템 이다. GitHub 오픈 소스 주소는: Https://github.com/derekcollison/nats. Eventmachine 개발, 코드에 따라 그것의 핵심은 별로, 다운로드 하 고 천천히 공부 수 있습니다.
Cloudfoundry는 멀티 모듈 배포 시스템, 모듈, 자체 테스트, 오류 및 모듈 간의 낮은 결합의 발견을 지 원하는. 핵심 원리는 메시지 기반 구독 메커니즘을 게시할 것입니다. 각 서버에서 각 모듈 또한 상호 작용에 필요한 모듈을 원하는 정보 콘텐츠 메시지 제목에 가입 하면서 그 자신의 메시지 범주에 따라 Messagebus를 여러 메시지 항목을 게시 합니다. 예:는 DEA Cloudfoundry 클러스터에 추가 됩니다, 그것은 모두 봉사, 준비 및 "Dea.start"를 테마로 메시지 게시에서 소리 지 필요:
@ Hello_message_json 마약 Uuid, ip, 포트, 버전 정보 및에 포함 되어 있습니다.
예를 들어 Cloudcontroller 물방울 인스턴스를 시작 해야 합니다.
A는 DEA 시작, 처음으로 그것은 구독할 것 이다 먼저 그것의 UUID의 메시지 제목.
다른 모듈을 시작, 그것은 수 있도록 'Dea. #{uuid}.start' 항목을 통해 메시지를 보낼 필요가 하 고 DEA가 메시지 수신, 그것은 시작 하는 데 필요한 작업을 처리 하는 Process_dea_start (msg) 메서드를 트리거합니다.
b 구름 컨트롤러 또는 다른 모듈, 메시지를 보낼 수 있도록 마약을 시작 하는 XXX에 대 한 UUID.
C DEA 모듈 메시지를 받으면, 그것은 Process_dea_start (msg) 방법을 트리거합니다. 메시지는 메시지 콘텐츠를 포함 하 여 다른 모듈에 의해 전송: Droplet_id, instance_index, 서비스, 런타임와 Process_dea_start는 마약을 시작 하 고 다음 일련의 작업을 위해 필요한 정보를 얻을 것 이다 예를 들어 NFS에서 물방울을 얻을, 압축, 수정 필요한 환경 구성, 시작 스크립트를 실행 하 고 등등. 모든 준비, 경우 다음 라우터는 메시지를 보내기는 물방울은, 나라에 봉사 하도록 준비 하 고 나중에 그것을 말할 필요가 있다 해당 요청을 처리 하도록 기억.
d 라우터 모듈 시작 시 "Router.register" 메시지 주제에 가입 했다.
이전 마약에서 정보를 받은 후 Register_droplet 메서드는 물방울을 바인딩할 트리거됩니다. 시작 하려면 물방울 인스턴스 작업을 수행.
우리 볼 수 있습니다 전체 cloudfoundry 코어 집합 메시지 시스템의 경우 Cloudfoundry의 상세한 이해를, 그것의 복잡 한 메시지를 추적 메커니즘은 아주 좋은 방법. 다른 한편으로, Cloudfoundry 메시지에 기반한 분산된 시스템 이며 메시지-지향 아키텍처의 노드 확장, 구성 요소 자기 발견 및 다른 클라우드 특성의 기초 이다.
클라우드 파운드리가이 시점에 대 한 간략 한 소개의 프레임 워크, 사실 첫 번째 오픈 소스 Paas, cloudfoundry 아키텍처는 장소에서 배울 수 많은, 처리의 세부 정보를 많이 매우 미묘한, 이러한 경우는 후속 계속 콘텐츠 문서 토론, 결국, 전체 프레임 워크를 소개 하 고, 맛을이 주제는 깊은 cloudfoundry, 뿐만 아니라 Cloudfoundry를 사용 하 여 기업 내에서 개인 PAAs를 구축에 충분 한 배경을 수 있도록 목표가입니다. 정리해 보면, Cloudfoundry의 구조에서 배운:
1, 메시지 기반 다중 구성 요소 아키텍처 클러스터를 구현 하는 간단 하 고 효과적인 방법입니다. 메시지 수 클러스터 노드를 분리, 등록 될 수 있도록 고 대규모 데이터 센터에서 매우 중요 한 이러한 기능을 발견.
2, 적절 한 추상화 계층, 제 3 자를 용이 하 게 템플릿 모드를 사용 하 여 Cloudfoundry 확장 기능 개발을 촉진할 수 있다. DEA에서 Cloudfoundry는 서비스 레이어 추상화 레이어 처리 완료, 상대적으로 만드는 개발자 수 있습니다 쉽게 개발 해야 런타임 및 Cloudfoundry에 대 한 서비스. 예를 들어 Cloudfoundry 그냥 시작 했다, Node.js,java 지원, 루비, 하지만 제 3 자 공급자를 신속 하 게, Cloudfoundry에 대 한 오픈 소스 커뮤니티 추가 Php, python 지원. Cloudfoundry의 독창적인 DEA 아키텍처, 새로운 런타임 지원을 개발 하는 방법 다음 게시물에서 논의 됩니다.
두 번째, 소스 가이드
저자는 항상 느낀 기술을 이해 하는 가장 좋은 방법은 그것의 소스 코드는 및 Cloudfoundry는 PAAs 플랫폼의 완전히 오픈 소스 코드의 주요 저자는 매우 좋은 아니기 때문에 새로 개발, 코드 별로, 그것은 매우, 매우 읽기에 적합을 읽을. 다시 그것을 칭찬 하 고. 그것은 전적으로 건축 디자인의 메시지 메커니즘에 따라, 구성 요소 확장성, 제 3 자 액세스와 그렇게 좋은 일을 할 독자는 관념적인 것 들을 많이 배울 수 있습니다. 나는 그것의 소스 코드를 읽는 것이 좋습니다. GitHub에서 모든 Cloudfoundry 코드를 찾을 수 있습니다: Https://github.com/cloudfoundry, 당신은 각각 여러 다른 저장소, 볼 것 이다:
1, Vcap:cloud 주조 코어, 또는 라는 커널;
2, Vcap-서비스: 클라우드 파운드리 서비스 구성 요소. 제 3 자 개발 서비스; 그것의 편의 위해 설계 된 플러그인,으로 클라우드 파운드리 서비스 제공 됩니다.
3. Vmc:vmware 구름의 CLI 클라우드 파운드리의 CLI와 상호 작용 하는 루비 응용 프로그램이입니다. 주로 사용자를 분석 하 여 CLI를 입력, cloudfoundry; 평안한 요청 보내기
4. Vcap-자바: 자바와 현재 Serviceserver IP 주소 같은 클라우드 파운드리와 상호 작용 하는 요구에 당신의 애플 리 케이 션 개발 우리의 일반적인 자바 개발 프레임 워크를 지 원하는,이 항아리를 할 수 있습니다 그것은 또한 평안한 요청 포장;의 cloudfoundry의 하단
5, Vcap-자바-클라이언트: 클라우드 파운드리 RESTful API 자바 캡슐화, 위의 프로젝트와는 달리 그것은 단지 간단한 cloudfoundry 정보, 그리고 자바빈즈; 같은
6, Vcap-테스트: 클라우드 파운드리 테스트 사례;
7, Vcap-테스트-자산: 클라우드 파운드리 일부 애플 리 케이 션 예제.