기금넷 공식사이트 - 복권 조회 - 마이크로서비스 아키텍처: 마이크로서비스 및 Docker 컨테이너 기술을 기반으로 한 PaaS 클라우드 플랫폼 아키텍처 설계

마이크로서비스 아키텍처: 마이크로서비스 및 Docker 컨테이너 기술을 기반으로 한 PaaS 클라우드 플랫폼 아키텍처 설계

마이크로서비스 아키텍처와 Docker 컨테이너 기술을 기반으로 하는 PaaS 클라우드 플랫폼의 구축 목표는 개발자에게 신속한 서비스 개발, 배포, 운영 유지 관리, 지속적인 개발, 지속적인 통합 프로세스를 제공하는 것입니다. 이 플랫폼은 인프라, 미들웨어, 데이터 서비스, 클라우드 서버 및 기타 리소스를 제공합니다. 개발자는 비즈니스 코드를 개발하고 플랫폼 코드 라이브러리에 제출하여 필요한 구성을 수행하기만 하면 됩니다. 시스템은 자동으로 구축되고 배포되어 어플리케이션의 민첩한 개발과 빠른 반복을 가능하게 합니다. 시스템 아키텍처에서 PaaS 클라우드 플랫폼은 마이크로서비스 아키텍처, Docker 컨테이너 기술 및 DveOps 의 세 부분으로 나뉩니다. 이 기사에서는 주로 마이크로 서비스 아키텍처의 실현에 중점을 둡니다.

자바 공학을 배우고 싶다면 고성능과 분산이 있어 이해하기 쉽다. 마이크로복, Spring, MyBatis, Netty 소스 코드 분석에 종사하는 친구들은 854630 135 의 고급 자바 교류를 추가할 수 있습니다. 아리소 생방송 해설 기술과 자바 대규모 인터넷 기술 동영상이 무료로 공유되고 있습니다.

마이크로서비스를 실현하려면 많은 기술 노력이 인프라 개발에 필요한데, 이는 많은 기업에게 명백히 비현실적이다. 걱정하지 마세요, 업계는 이미 훌륭한 오픈 소스 프레임워크를 가지고 있습니다. 현재 업계에서 비교적 성숙한 마이크로서비스 프레임워크로는 망비, 춘운, 알리의 두보 등이 있다. Spring Cloud 는 마이크로서비스를 개발하는 데 필요한 구성 요소를 제공하는 Spring Boot 기반 마이크로서비스 프레임워크입니다. Spring Boot 과 함께 사용할 경우 마이크로서비스 아키텍처로 클라우드 서비스를 개발하는 것이 매우 편리합니다. 춘운에는 많은 하위틀이 포함되어 있는데, 춘운망 비행은 그 중 한 세트의 틀이다. Dell 의 마이크로서비스 아키텍처 설계에는 Spring Cloud 웹 비행 프레임워크의 많은 구성 요소가 사용되었습니다. 춘운망 비행 프로젝트는 시간이 오래 걸리지 않고 관련 문헌도 적다. 당시 블로거들은 이 틀을 연구하고 영어 문서를 많이 뜯어먹었는데, 정말 고통스러웠다. 이 프레임워크를 처음 접한 학생들은 마이크로서비스 애플리케이션 아키텍처를 구축하는 방법을 모를 수 있습니다. 다음으로, Dell 의 마이크로서비스 아키텍처 구축 프로세스와 마이크로서비스 아키텍처를 지원하는 데 필요한 프레임워크 또는 구성 요소에 대해 살펴보겠습니다.

마이크로서비스 아키텍처의 구성과 원리를 직관적으로 명확하게 보여주기 위해 다음과 같이 시스템 아키텍처 다이어그램을 작성했습니다.

위 그림에서 볼 수 있듯이 마이크로서비스 액세스의 대략적인 경로는 외부 요청 → 로드 밸런싱 → 서비스 게이트웨이) → 마이크로서비스 → 데이터 서비스/메시징 서비스입니다. 서비스 게이트웨이와 마이크로서비스는 모두 서비스 등록과 검색을 사용하여 추가 종속 서비스를 호출합니다. 각 서비스 클러스터는 구성 센터 서비스를 통해 구성 정보를 얻을 수 있습니다.

서비스 게이트웨이 (게이트웨이)

게이트웨이는 클라이언트 브라우저, 모바일 장치 등과 같은 외부 시스템 사이의 문입니다. ) 및 엔터프라이즈 내부 시스템, 모든 클라이언트가 게이트웨이를 통해 백그라운드 서비스에 대한 액세스를 요청합니다. 높은 동시 액세스를 처리하기 위해 서비스 게이트웨이는 클러스터 형태로 구축되므로 로드 밸런싱이 필요합니다. Amazon EC2 를 가상 클라우드 서버로 사용하고 ELB (유연한 로드 밸런싱) 를 로드 밸런싱에 사용했습니다. EC2 는 용량을 자동으로 구성하는 기능을 갖추고 있습니다. 사용자 트래픽이 최고점에 도달하면 EC2 는 가상 호스트의 성능을 유지하기 위해 자동으로 더 많은 용량을 추가할 수 있습니다. ELB 유연한 로드 밸런싱은 여러 인스턴스 간에 애플리케이션의 수신 트래픽을 자동으로 할당합니다. 보안을 위해 클라이언트 요청은 https 암호화를 통해 보호되어야 합니다. 이를 위해서는 SSL 을 마운트 해제하고 Nginx 를 사용하여 암호화 요청을 마운트 해제해야 합니다. 외부 요청은 ELB 로드 밸런싱 후 게이트웨이 클러스터의 게이트웨이 서비스로 라우팅되고 게이트웨이 서비스에서 마이크로서비스로 전달됩니다. 내부 시스템의 경계로서 서비스 게이트웨이는 다음과 같은 기본 기능을 제공합니다.

1. 동적 라우팅: 요청을 필요한 백엔드 서비스 클러스터로 동적으로 라우팅합니다. 내부는 복잡한 분산 마이크로서비스 메쉬 구조이지만 외부 시스템은 게이트웨이에서 전체 서비스로 보이며 게이트웨이가 백엔드 서비스의 복잡성을 마스킹합니다.

2. 제한 흐름 및 내결함성: 각 요청 유형에 용량을 할당하고, 요청 수가 임계값을 초과할 때 외부 요청을 삭제하고, 트래픽을 제한하고, 백그라운드 서비스를 큰 트래픽으로부터 보호합니다. 한 쪽의 내부 서비스가 실패하면 양호한 사용자 경험을 보장하기 위해 내부 클러스터에 요청을 전달하는 대신 경계에 직접 응답 세트를 만들어 내결함성이 있습니다.

3. 인증 및 보안 제어: 각 외부 요청에 대한 사용자 인증, 인증 실패 요청 거부, 액세스 모드 분석을 통해 반파충류 기능을 구현할 수 있습니다.

4. 모니터링: 게이트웨이는 의미 있는 데이터와 통계를 수집하여 백그라운드 서비스 최적화를 위한 데이터 지원을 제공합니다.

5. 액세스 로그: 게이트웨이가 액세스 로그 정보 (예: 액세스한 서비스) 를 수집할 수 있습니까? 처리 프로세스 (예외란 무엇입니까) 및 결과는 무엇입니까? 얼마나 걸리나요? 로그 내용을 분석하여 백그라운드 시스템을 더욱 최적화합니다.

우리는 Zuul(Spring Cloud Network Flight 프레임워크의 오픈 소스 구성 요소) 을 사용하여 게이트웨이 서비스를 구현합니다. Zuul 은 다양한 유형의 필터를 사용합니다. 필터를 다시 작성함으로써 게이트웨이의 다양한 기능을 유연하게 구현할 수 있습니다.

자바 공학을 배우고 싶다면 고성능과 분산이 있어 이해하기 쉽다. 마이크로복, Spring, MyBatis, Netty 소스 코드 분석에 종사하는 친구들은 854630 135 의 고급 자바 교류를 추가할 수 있습니다. 아리소 생방송 해설 기술과 자바 대규모 인터넷 기술 동영상이 무료로 공유되고 있습니다.

서비스 등록 및 검색

마이크로서비스 아키텍처는 단일 책임을 지닌 일련의 세밀한 서비스로 구성된 메쉬 구조이기 때문에 서비스는 경량 메커니즘을 통해 통신하므로 서비스 등록 및 발견에 문제가 발생합니다. 서비스 공급자는 서비스 주소를 등록하고 보고해야 하며 서비스 호출자는 대상 서비스를 찾을 수 있어야 합니다. Eureka 구성 요소는 Dell 의 마이크로서비스 아키텍처에서 서비스 등록 및 검색을 위해 사용되었습니다. 모든 마이크로서비스 (Eureka 서비스 정보 구성을 통해) 는 Eureka 서버에 등록되어 상태 점검을 위해 하트비트를 정기적으로 보냅니다. Eureka 의 기본 구성은 30 초마다 하트비트를 보내는 것으로 서비스가 여전히 유효함을 나타냅니다. 하트비트를 보내는 간격은 Eureka 자체의 구성 매개 변수를 통해 구성할 수 있습니다. Eureka 서버가 서비스 인스턴스의 마지막 하트비트를 수신한 후 서비스가 사망했다고 판단하기 위해 90 초 (기본 구성은 90 초, 구성 매개 변수를 통해 수정 가능) 기다려야 합니다 (즉, 하트비트가 3 회 연속 수신되지 않음). Eureka 자체 보호 모드를 끄면 서비스에 대한 등록 정보가 지워집니다. 소위 자기 보호 모드는 네트워크 파티션이 있을 때, Eureka 가 짧은 시간 내에 너무 많은 서비스를 잃어버리면 자기 보호 모드로 들어갑니다. 즉, 서비스가 오랫동안 하트비트를 보내지 않고 Eureka 는 삭제하지 않습니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 안전명언) 보호 모드는 기본적으로 설정되어 있으며 구성 매개변수를 통해 끄기로 설정할 수 있습니다.

Eureka 서비스는 한 클러스터에 배치됩니다 (Eureka 클러스터의 배치 모드는 블로거의 다른 문장). 클러스터의 모든 Eureka 노드는 주기적으로 마이크로서비스 등록 정보를 자동으로 동기화하여 모든 Eureka 서비스에 대한 등록 정보를 일관되게 유지합니다. 유레카 노드는 유레카 클러스터에서 어떻게 다른 노드를 찾을 수 있을까요? Dell 은 DNS 서버를 사용하여 모든 Eureka 노드를 연결하고 Eureka 클러스터를 배포하는 것 외에도 DNS 서버를 구축해야 합니다.

게이트웨이 서비스가 백그라운드 마이크로서비스 간에 외부 요청이나 호출을 전달하면 Eureka 서버에 가서 대상 서비스에 대한 등록 정보를 찾고 대상 서비스를 찾아 호출하여 서비스 등록 및 검색의 전 과정을 형성합니다. Eureka 의 구성 매개 변수는 수백 개에 달하며, 블로거는 또 다른 문장 기사에서 자세히 설명합니다.

마이크로서비스 배포

마이크로서비스는 단일 책임, 세밀한 서비스, 즉 비즈니스를 별도의 서비스 단위로 분할하는 서비스로, 확장성과 낮은 결합성을 갖추고 있습니다. (윌리엄 셰익스피어, 마이크로서비스, 서비스, 서비스, 서비스, 서비스, 서비스, 서비스, 서비스) 서로 다른 마이크로서비스는 각각 하나의 업무를 처리하는 서로 다른 언어로 개발될 수 있다. 마이크로서비스는 프런트 엔드 서비스 (에지 서비스라고도 함) 와 백 엔드 서비스 (중간 서비스라고도 함) 로 나눌 수 있습니다. 프런트 엔드 서비스는 다른 외부 장치 (PC, 전화 등) 에 공개됩니다. ) 필요한 집계 및 백엔드 서비스 자르기를 거칩니다. 모든 서비스는 시작할 때 Eureka server 에 등록되며 서비스 간에 복잡한 종속성이 있을 수 있습니다. 게이트웨이 서비스가 외부 요청을 전달하여 프런트 엔드 서비스를 호출할 때 쿼리 서비스 등록 센터를 통해 호출할 대상 서비스를 찾을 수 있습니다. 프런트 엔드 서비스가 백 엔드 서비스를 호출하는 경우에도 마찬가지입니다. 하나의 요청에는 여러 서비스 간의 상호 호출이 포함될 수 있습니다. 각 마이크로서비스는 클러스터로 배치되므로 서비스가 서로 호출될 때 로드 밸런싱을 수행해야 하므로 각 서비스에는 로드 밸런싱을 위한 LB 구성 요소가 있습니다.

마이크로서비스는 Docker 컨테이너에서 미러로 실행됩니다. Docker 컨테이너 기술을 통해 Dell 의 서비스 배포를 간단하고 효율적으로 수행할 수 있습니다. 기존의 배포 방식은 각 서버에 운영 환경을 설치해야 했습니다. 서버 수가 많다면 각 서버에 운영 환경을 설치하는 것은 매우 힘든 작업이 될 것입니다. 운영 환경이 바뀌면 다시 설치하는 것은 재앙이다. Docker 컨테이너 기술을 사용하면 필요한 기본 이미지의 새 이미지 (JDK 등) 만 생성하면 됩니다. ) 및 마이크로서비스를 통해 이 최종 이미지를 Docker 컨테이너에 배포하여 실행합니다. 이 방법은 간단하고 효율적이며 서비스를 신속하게 배포 할 수 있습니다. 각 Docker 컨테이너에서 여러 마이크로서비스를 실행할 수 있습니다. Docker 컨테이너는 클러스터에 구축되고 Docker Swarm 에 의해 관리됩니다. 모든 기본 이미지와 결과 최종 제공 이미지를 저장하고 이미지 저장소의 모든 이미지를 관리하는 이미지 저장소를 만들었습니다.

서비스 내결함성

마이크로서비스 사이에는 복잡한 의존성이 있다. 하나의 요청은 여러 백엔드 서비스에 의존하여 실제 운영 시 실패하거나 지연될 수 있습니다. 트래픽이 많은 시스템에서는 서비스가 지연되면 짧은 시간 내에 시스템 리소스가 부족해져 전체 시스템이 중단될 수 있습니다. 따라서 서비스가 장애를 격리하고 용인할 수 없다면 그 자체가 재앙입니다. Hystrix 구성 요소는 내결함성을 위해 마이크로서비스 아키텍처에 사용됩니다. Hystrix 는 블로킹 모드, 격리 모드, 롤백 및 제한 메커니즘을 통해 서비스에 유연한 내결함성 보호 기능을 제공하여 시스템 안정성을 보장하는 웹 비행의 오픈 소스 구성 요소입니다.

1. 퓨즈 모드: 퓨즈 모드는 회로 퓨즈처럼 작동합니다. 회로가 단락되면 퓨즈가 타서 파손되어 회로를 재난적인 손실로부터 보호한다. 서비스에 비정상적이거나 많은 지연이 발생할 경우 서비스 호출자는 fuse 조건이 충족될 때 사전 예방적으로 fuse 를 시작하고 fallback 논리를 실행한 후 직접 반환하며 서비스 호출을 계속하지 않고 시스템을 더 지체하지 않습니다. Fuse 에 대한 기본 구성 서비스 호출 오류율 임계값은 50% 입니다. 임계값을 초과하면 퓨즈 모드가 자동으로 시작됩니다. 서비스가 일정 기간 격리된 후 퓨즈는 반융해 상태로 들어갑니다. 즉, 소량의 요청 시도를 허용하고 호출이 여전히 실패하면 융해 상태를 반환하고 호출이 성공하면 융해 모드를 끕니다.

2. 격리 방식: Hystrix 는 기본적으로 스레드 격리를 사용하며 서비스마다 서로 다른 스레드 풀을 사용하며 서로 영향을 주지 않습니다. 한 서비스에 장애가 발생하여 스레드 풀 리소스가 모두 소모되면 다른 서비스의 정상 작동은 영향을 받지 않고 격리 효과를 얻을 수 있습니다. 예를 들어, TestThreadPool through 및 ThreadPoolKey 라는 스레드 풀을 사용하여 다른 명명된 스레드 풀과의 격리를 위한 서비스를 구성했습니다.

3.fallback):fallback 메커니즘은 실제로 서비스 실패 시 내결함성이며 Java 의 예외 처리와 유사하게 작동합니다. HystixCommand 를 상속하고 getFallBack () 메서드를 다시 작성하여 예외를 직접 throw 하거나 (빠른 실패), null 또는 기본값을 반환하거나, 백업 데이터를 반환하는 등의 처리 논리를 작성하기만 하면 됩니다. 서비스 호출 예외가 발생하면 대신 getFallBack () 이 실행됩니다. 다음과 같은 경우 롤백을 트리거할 수 있습니다.

1) 프로그램에서 비 Hystrixbadrequestxception 예외가 발생했습니다. 호출자는 Hystrixbadrequestxception 예외가 발생할 때 폴백을 트리거하지 않고 예외를 포착할 수 있으며 다른 예외가 발생할 경우 폴백을 트리거합니다.

2) 프로그램 시간 초과 실행;

3) 퓨즈 시동;

4) 스레드 풀이 꽉 찼습니다.

4. 제한 스트림: 제한 스트림은 서비스에 대한 동시 액세스를 제한하고, 단위 시간 내 동시 액세스 수를 설정하고, 제한을 초과하는 요청을 거부 및 롤백하여 백그라운드 서비스가 떠내려가지 않도록 하는 것을 말합니다.

Hystix 는 명령 모드 HystrixCommand 래퍼를 사용하여 호출 논리에 의존하므로 관련 호출이 Hystrix 의 유연한 내결함성 보호 하에 자동으로 배치됩니다. 호출자는 HystrixCommand 를 상속하고 run () 에 호출 논리를 작성하여 execute () (동기 차단) 또는 queue () (비동기 비차단) 를 사용하여 run () 실행을 트리거해야 합니다.

동적 구성 센터

마이크로비즈니스에는 많은 종속 구성이 있으며, 비즈니스 운영 중 일부 구성 매개변수를 동적으로 수정할 수 있습니다 (예: 액세스 트래픽에 따라 퓨즈 임계값을 동적으로 조정). Xml, yml 등의 구성 파일에 배치하고 응용 프로그램 패키징과 같은 기존 정보 구성 방식을 구현하는 것은 수정 시마다 코드를 다시 제출하고, 패키징하고, 새로운 이미지를 생성하고, 서비스를 다시 시작하는 것이 무리임이 분명합니다. 따라서 마이크로서비스의 동적 구성을 지원하기 위해 동적 구성 센터 서비스를 구축해야 합니다. Dell 은 Spring Cloud 의 configserver 서비스를 사용하여 동적 구성 센터를 구축하는 데 도움을 주었습니다. 우리가 개발한 마이크로서비스 코드는 git 서버의 사설 창고에 저장되고, 동적으로 구성해야 할 모든 프로필은 git 서버 아래의 구성 서버 (마이크로서비스) 서비스에 저장됩니다. Docker 컨테이너에 배포된 마이크로서비스는 git 서버에서 구성 파일의 정보를 동적으로 읽습니다. 로컬 git 웨어하우스가 코드를 수정하여 git 서버 웨어하우스로 푸시하면 git 서버 후크 (post-receive, 서버가 코드 업데이트를 완료하면 자동으로 호출됨) 가 프로필 업데이트를 자동으로 감지합니다. 있는 경우 git 서버는 메시지 대기열을 통해 구성 센터 (컨테이너에 배포된 마이크로서비스) 에 메시지를 보내 구성 센터에 해당 구성 파일을 새로 고치라고 알립니다. 이렇게 하면 마이크로서비스에서 최신 프로필 정보를 얻을 수 있어 동적 구성이 가능합니다.

이러한 프레임워크나 구성 요소는 마이크로서비스 아키텍처 구현을 지원하는 핵심입니다. 실제 생산에서는 로그 서비스 구성 요소, 메시지 서비스 구성 요소 등 다른 많은 구성 요소도 사용합니다. 을 누르고 비즈니스 요구에 따라 사용하도록 선택합니다. Dell 의 마이크로서비스 아키텍처 구현 사례에서는 Zuul (서비스 게이트웨이), Eureka (서비스 등록 및 검색), Hystrix (서비스 내결함성), Ribbon (클라이언트 로드 밸런싱) 등 Spring Cloud Network Flight 프레임워크의 오픈 소스 구성 요소를 많이 참조합니다. 이러한 우수한 오픈 소스 구성 요소는 마이크로서비스 아키텍처를 구현하는 지름길을 제공합니다.

자바 공학을 배우고 싶다면 고성능과 분산이 있어 이해하기 쉽다. 마이크로복, Spring, MyBatis, Netty 소스 코드 분석에 종사하는 친구들은 854630 135 의 고급 자바 교류를 추가할 수 있습니다. 아리소 생방송 해설 기술과 자바 대규모 인터넷 기술 동영상이 무료로 공유되고 있습니다.