마이크로 4 층 모델 생태 서비스

마이크로 4 층 모델 생태 서비스

계층 1 : 하드웨어 층

하드웨어 계층은 마이크로 생태계의 저부이다. 이 레이어는 실행중인 모든 마이크로 서비스의 기초가있는 서버 시스템의 물리 계층이다. 이러한 서버는 데이터 센터 랙에 배치되어, 전력은 전원 장치, 고가의 냉각 시스템의 사용에 의해 공급된다. 그들 중 일부는 일부 민간 기업, 소위에서 그들 중 일부입니다 "클라우드 서비스 제공 업체,"등등 AWS EC2, GCP, 알리 구름과 같이,이 임대.

자신의 서버를 구입하거나 클라우드 서버를 선택하는 것은 쉽지 않다 선택, 그것은 구입 비용, 가용성, 신뢰성 및 운영 비용을 고려할 필요가있다.

서버 관리는 하드웨어 계층의 책임 중 하나입니다. 각 서버는 표준 운영 체제를 설치해야합니다. 표준 대답을 사용하지 않는 어떤 운영 시스템, 그것은 모두 당신이 구축 빌드 응용 프로그램에서 사용하는 언어를 소프트웨어 패키지와 그들이 필요로하는 도구 마이크로 서비스를 구축 할 응용 프로그램에 따라 다릅니다. 주류 마이크로 생태계 서비스는 일반적으로 분명히 다른 선택이 같은 CentOS는 데비안이나 우분투 리눅스의 아나모픽 버전을 사용하지만, .NET 플랫폼 회사를 사용합니다.

설치 및 운영 체제의 하드웨어 자원의 구성은 서버의 첫 번째 계층입니다. 각 호스트를 구성해야합니다, 그리고 운영 체제를 설치 한 후, 당신은 응용 프로그램을 설치하고 필요한 구성을 위해 (예 : Ansible, 요리사 또는 인형 등) 구성 관리 도구를 제공해야합니다.

(Nagios를 사용하여) 호스트 수준 모니터링을 호스팅하는 필요뿐만 아니라 호스트 레코드 레벨 로깅. 그들은 쉽게 문제를 해결 (디스크 오류, 네트워크 또는 CPU 과부하) 호스트에 나타납니다 이상 도움을 진단 할 수 있습니다.

레이어 2 : 통신 계층

마이크로 서비스 간의 상호 작용은 다수의 층에서 수행되기 때문에, 생태계에 대한 모든 레이어 통신 층은, 명확 층과 다른 층이 정의 된 경계와 통신하는 것이 곤란하다. 그것은 분명 그들 사이의 경계를 정의하기 어렵지만,하지만 관련이 요소 층은 매우 명확하다. 일반적으로 네트워크, DNS, RPC 및 API 엔드 포인트, 서비스 검색, 서비스 등록 및로드 밸런싱을 포함한다.

RPC, 메시징 엔드 포인트와

다른 마이크로 서비스와 원격 프로 시저 호출 (RPC) 또는 메시지를 통해 마이크로 서비스는 이러한 호출은 (메시지 전달을 사용하는 경우, 메시지가 메시지 브로커, 메시지 브로커에 전송되는 네트워크 API 엔드 포인트를 통해 다른 마이크로 서비스로 전송하는 상호 작용하는 이러한 메시지는) 라우팅됩니다. 기본 원리는 이것이다 : 특정 프로토콜을 사용하여 메시지 브로커가, 마이크로 충족 특정 서비스 데이터를 다른 서비스 형식으로 전송 (또는 다른 엔드 포인트 마이크로 API 서비스) 또는 네트워크 (메시지 브로커가 해당 데이터를 확인하는 것입니다 통해입니다 다른 엔드 포인트 마이크로 API 서비스) 노선.

여러 마이크로 서비스 통신 시스템은 첫 번째는 가장 일반적인 HTTP + REST / 드리프트가있다 있습니다. 이 방법을 사용하는 경우, 하이퍼 텍스트 전송 프로토콜 (HTTP) 네트워크 상호 작용을 사용하여 각 서비스에 해당하는 엔드 포인트 REST (HTTP 다양한 등 POST, GET 등의 방법 사용)에서 또는 전송 요청 드리프트 엔드 포인트 또는 엔드 포인트를 응답을 수신. 데이터 전송은 전형적 JSON (또는 버퍼의 ProTool) 형식이다.

제 2 통신 방법은 메시지이다. 메시징 (비 차단) 비동기이지만, 상대적으로 복잡하다. 메시징과 같이 작동합니다 : 네트워크를 통해 마이크로 서비스 데이터 (메시지) (HTTP 또는 다른) 메시지는 프록시, 프록시가 라우팅 할 메시지 메시지에 다른 마이크로 서비스로 전송됩니다.

여러 메시징 모드는 가장 인기있는 두 개의 해제 및 구독 요청과 응답되어,도있다. 당신이 게시 및 구독 모델을 사용하는 경우, 클라이언트가 주제에 가입 것, 그것은 게시자 테마에서 어떤 보도 자료를 받게됩니다. 요청 및 훨씬 더 간단 응답 패턴, 클라이언트가 서비스 (또는 메시지 브로커)에 요청을 보내는 서비스는이 요청에 응답합니다. 일부 메시징 미들웨어는 ApacheKafka과 같은 두 가지 모드를 지원합니다.

메시징주의해야 할 몇 가지 단점이 있습니다. 메시징 HTTP + REST 넘지 않는 것은 시스템이있는 경우 단어의 확장 성 요구 사항이 알고 있어야합니다, 확장 성이다. 메시징, 비우호적 인 변경이 집중되어 있기 때문에,이 메시지 큐으로 이어질 것입니다 및 메시지 브로커가 전체 생태계의 실패 지점으로 향했다. 어떤 계약이없는 경우 동시 환경의 그것의 비동기 특성은 무한 루프가있을 것입니다, 경쟁 조건으로 이어질 수 있습니다. 이러한 문제를 처리 할 수있는 경우, 메시지 전달을 사용하는 경우, 그는 동기화 솔루션도 안정적이고 효율적으로하게합니다.

서비스 검색, 서비스 등록 및로드 밸런싱

단일 애플리케이션 아키텍처에서 모든 트래픽은 응용 프로그램 서버에 배포 한 후 부하 분산 장치로 전송된다. 마이크로 서비스 아키텍처에서 트래픽이 다른 애플리케이션의 숫자로 라우팅 한 다음 서버 별 마이크로 서비스를 배포하는 배포. 서비스 디스커버리, 서비스 등록 및로드 밸런싱을 효율적으로 상기 상황을 달성하기 위해, 마이크로 아키텍처 서비스는 통신 기술의 세 개의 층을 구현해야한다.

서비스가 마이크로 B에 요청을 시작하는 데 필요한 마이크로 서비스 경우 일반적으로 다음 마이크로 서비스는 IP 주소와 포트 마이크로 서비스 B의를 알아야합니다. 통신 층 마이크로 서비스는 요청을 올바르게 라우팅하기 위해 이러한 마이크로 서비스의 IP 주소와 포트를 알아야합니다. 이 문제는이 매우 중요하다 (서비스 요청이 그들이 가야했다 장소로 라우팅되도록 찾을 수 있습니다 (예 : etcd, 영사, Hyperbahn 또는 사육사 등) 서비스에 의해 해결 될 찾을 수 있습니다 만 정상 작동의 인스턴스에 연결됩니다 ). 서비스 검색은 서비스 등록을 사용할 필요가 생태계에 등록 된 서비스 레코드 경우 모든 마이크로 서비스를위한 IP 주소와 포트.

마이크로 서비스 아키텍처에서, 마이크로 스케일에서의 서비스 (예 아파치 메소 하드웨어 추상화 계층의 재사용 등) 재배포는, 포트와 IP 주소를 변경한다. 이 경우, 각각의 마이크로 서비스가 정적 포트를 할당하는 것이 좋습니다.

당신의 마이크로 모든 서비스가 같은 인스턴스 (드문)에 배포하지 않는 한, 통신 계층에서 부하 분산을 사용할 필요 나. 간단하게,로드 밸런싱 할 수있는 넣어 : 당신은 트래픽 (균등) 모든 인스턴스에 배포되도록 10 마이크로 서비스 인스턴스,로드 밸런서 (소프트웨어 또는 하드웨어)가있는 경우. 마이크로 생태계 서비스에서 한 참여 요청을 전달, 당신은 큰 규모의 마이크로 생태계 서비스는 다층 부하 분산을 포함하는 의미 부하 분산 장치를 사용해야합니다. 일반적인로드 밸런서는 아마존 웹 서비스 탄성 부하 분산, 넷플릭스의 유레카와 Nginx에 있습니다.

레이어 3 : 응용 프로그램 플랫폼 층

응용 프로그램 플랫폼 층이 층은 마이크로 도구 및 서비스의 독립 모든 내부 서비스를 포함, 마이크로 생태계 서비스 레이어 3입니다. 이 레이어 때문에 이러한 도구와 서비스의 전체 에코 시스템에 걸쳐 중앙과 서비스를 포함, 마이크로 서비스 개발 팀은 마이크로 서비스 개발에 집중할 수 있습니다.

좋은 응용 프로그램 플랫폼은 표준화 된 개발 프로세스를 포함하여 개발자를위한 내부자가 진단 도구, 중앙 집중식 빌드 세트를 제공하고, 자동화 시스템, 자동화 된 테스트, 표준화 및 중앙 집중식 배포 및 중앙 집중식 로그 및 마이크로 서비스를 해제 할 필요가 레벨 모니터링. 이러한 요소의 세부 사항은 논의하기 위해 여기 아니지만, 우리는 간단히 몇 가지 기본 개념을 설명 몇 가지 요소를 소개합니다.

내부 자기 개발 도구

내부 자기 개발 도구의 범위에 포함 할 수있는 많은 일들이 있습니다, 그들은 같은 도구의 개발로 요약 할 수 있는지 여부를 도구의 필요성에뿐만 아니라 따라 다르지만 추상화 인프라와 생태계와 복잡성의 전반적인 정도를 고려한다. 그들의 서비스를 설계, 구축 및 유지, 그것은 다음, 개발자, 평가 작업을 책임 영역의 첫 번째 분할을 완료해야합니다 사용할 도구를 결정합니다.

조심 책임을 할당하는 마이크로 서비스 아키텍처 회사 엔지니어 팀에서 사용되어왔다. 가장 쉬운 방법은 마이크로 생태계 엔지니어링 서브 팀의 각 층의 구성 요소이다. 이 하위 프로젝트 팀은 그들이 계층과 관련된 모든 문제를 처리하기위한 책임이 있습니다 : 운영 및 첫 번째 레이어에 대한 책임 유지 보수 팀, 인프라 팀은 레이어 2, 레이어 3, 마이크로 서비스 팀에 대한 책임 애플리케이션 플랫폼 팀은 4 층에 책임을 담당하고 있습니다.

이 조직 구조에서 작업 뭔가 낮은 구성의 상단에있는 엔지니어를위한자가 진단 도구의 사용을 필요로한다. 예를 들어, 메시징 서비스에 대한 책임이있는 팀은 자조 도구에 다른 개발자, 개발자의 마이크로 서비스 팀이 그들의 서비스에 메시징 시스템을 구성 할 필요가있을 때, 그들은 복잡한의 많은 이해하지 않고이 도구를 사용하여 제공되어야한다 메시징 시스템.

이유는 이러한 중앙자가 진단 도구를 사용합니다. 마이크로 생태계 서비스의 넓은 범위에서, 이해 (또는 거의 약을 알고)하지 않는 다른 팀 시스템과 서비스 팀의 일반적인 엔지니어, 그들은 모든 일에 전문가를 호출 할 수 없습니다. 각 개발자는 모두 알고에서 이러한 개발자 함께, 단지 내가 더 잘 이해하는 부분,하지만 전체 생태계에 대한 책임이 있습니다. 빌드 - 사용하기 사용자 인터페이스를 생태계의 각 부분에 대해 어떻게 오히려 복잡 이러한 도구와 서비스의 내부 세부 사항을 이해하기 위해 각 개발자를 얻으려고 노력보다, 이러한 도구를 사용하는 방법을 가르쳐하기 위해, 개발자를위한 관련 교육을 제공한다. 블랙 박스에 모든 것을 넣고, 다음 자세한 설명서를 제공합니다.

이러한 도구를 두 번째 이유를 사용하면이 사람들이 당신에게 문제를 줄 수 있기 때문에 당신이 팀에게 서비스 및 시스템에 대한 중대한 변경을 할 다른 사람을 필요가 없다는 것입니다. 특히, 바닥층 (레이어 1, 레이어 2 및 레이어 3) 서비스 옵션. 그들이 특정 영역의 전문가가되기 위해 위의 층 또는 요구 사항 (더 나쁜 예상)을 변경할 수 있도록 허용하는 것은 재앙으로 이어질 가능성이 높습니다. 구성 관리의 예를 들어 : 마이크로 서비스 팀은 그들이 있기 때문에 변화뿐만 아니라 자신에 영향을 미칠 수있는 잠재력을 가지고, 대규모 서비스의 마비로 이어질 수있는 몇 가지 변화를 만들 수있는 시스템 구성의 개발자 관련 전문 지식이없는 서비스를 제공합니다.

개발주기

마이크로 수정하거나 개발 프로세스 표준화 및 자동화를 간소화하기 위해, 새로운 마이크로 서비스를 구축 기존의 서비스 개발자는 크게 개발 효율성을 높일 수 있습니다. 어떤 것들은 마이크로 생태계의 3 층에 서비스에 배치해야합니다, 그래서 안정적인 발전이 가능.

첫 번째는 모든 코드를 유지하는 중앙 집중식 버전 관리 시스템입니다, 코드 추적, 버전 관리 및 검색을 할 수 있습니다. 이는 같은 GitHub의 또는 자신의 자식 또는 SVN 코드 저장소와 같은 도구의 수를 통해 달성 될 수있다,이 창고를 사용하여 코드의 유지 보수 및 검토를 단순화하기 위해, 같은 Phabrictor 같은 협업 도구들을 통합 할 수 있습니다.

안정적이고 효율적인 개발 환경 하였다. 우리가 알다시피, 마이크로 생태 시스템 서비스를 달성하기 위해 이러한 개발 환경으로 인해 마이크로 서비스 간의 종속성 너무 복잡하고 어렵다. 그러나이 필수적인 요소, 우리는 피할 수 없습니다. 일부 조직 (당신의 PC 개발자에) 로컬로 수행 개발 작업을 투사하는 경향이 있지만 개발자가 프로덕션 환경에 배포 할 그들이 코드를 수정하는 방법을 모르기 때문에이 가난한 구축으로 이어질 것입니다. 개발 환경을 구축 할 수있는 가장 확실한 방법은, 현재 이미지의 모든 복잡한 의존성 체인을 포함 (그러나 생산이 아닌 미리 제조 않으며, 피드백을 수집) 생산 환경에 미러를 생성하는 것이다.

테스트, 빌드, 패키지 및 배포

테스트, 건물, 포장 및 유통의 개발 과정은 가능하고 중앙 집중화만큼 표준화되어야한다. 코드 변경이 제출되었을 때 개발의 종료 후, 당신은 관련 테스트 케이스를 실행해야하고 자동으로 구축하고 새로운 버전의 곧 출시 패키지. 이 시간, 지속적인 통합 도구를 유용하게 사용할 수 있습니다 (예 : 젠킨스와 같은) 일부 기성품 솔루션은 기능과 사용하기 쉬운뿐만 아니라. 이러한 도구는 전체 프로세스, 인간의 실수 왼쪽 거의 기회를 자동화 할 수 있습니다.

배포 파이프 라인

개발 후, 테스트, 구축, 패키지 및 그 단계를 배포, 배포 파이프 라인의 흐름은 생산 환경에 또 다른 새로운 코드입니다. 마이크로 생태계 서비스에 배포가 매우 짧은 시간에 매우 복잡한 될 것입니다, 배포 매일 수백 매우 일반적인 일이다. 개발자가 구축하고, 개발 과정을 표준화하기 위해 개발 팀은 도구가 필요합니다.

로그 및 모니터링

모든 마이크로 서비스는 중요한 정보를 기록하고 로그와 관련된 자신의 요청에 응답 할 넣어해야합니다. 마이크로 서비스가 너무 빨리 변화하기 때문에 시스템 에러가 발생하는 경우, 시스템 상태의 재구성을 재현하기 어려운 결함 코드 결과적 어려워진다. 마이크로 레벨의 로그 서비스의 사용은 개발자가 더 나은 과거 또는 현재의 순간에 어떤 시점에서 그들의 서비스의 상태를 이해하는 데 도움이 될 수 있습니다. 같은 목적을 위해 마이크로 서비스에 대한 미시적 수준 주요 지표에 서비스를 모니터링 : 정확한 실시간 모니터링을 수행 할 수 있습니다 도움이 개발자는 상태 및 보건 서비스를 이해합니다.

레이어 4 : 마이크로 서비스 층

최고 수준의 마이크로 서비스 에코 시스템은 마이크로 서비스 계층이다. 이 층은 모든 사물에 관한 마이크로 마이크로 서비스 또는 서비스이고 하드웨어, 배포 서비스 디스커버리,로드 밸런싱과 같은 통신 완전히 기본 인프라 층으로부터 분리 층 등이다. 마이크로 서비스 계층 분리는 셀프 서비스 도구로 만들어진 유일한 사용하지 않습니다.

소프트웨어 공학에서 구성 응용 프로그램은 일반적으로 특정 도구 또는 도구 (구성 관리, 자원의 분리 또는 배포 도구) 구성은 이러한 도구를 저장할 수있는 중앙 집중화됩니다. 예를 들어, 일반적으로 함께 저장 사용자 지정 응용 프로그램 구성 및 코드 배포 도구를 배포하는 대신 및 응용 프로그램 코드를 함께 저장합니다. 이런 식으로 하나의 작은 마이크로 생태계 서비스에 대한 응용 프로그램 아키텍처는 문제가되지 않습니다,하지만 훌륭한 서비스 에코 시스템에 대한 마이크로 서비스 및 내부 도구의 큰 숫자를 (각 도구는 사용자 정의 구성이) 포함 이 혼란의 원인이됩니다 이런 식으로 : 마이크로 서비스 팀의 상위 계층에서 그들은 종종 영역 구성 정보를 포함하는 (또는 포함하지 않는) 잊지, 기본 도구의 코드를 수정해야합니다. 이 문제를 해결하려면 기본 도구와 시스템 액세스를 연 다음 마이크로 서비스 구성과 관련된 서비스 코드 라이브러리에서 마이크로를 넣을 수 있습니다.

추천

출처blog.51cto.com/11317783/2412373