DAPR, Amazon EKS로 마이크로 서비스 개발을 간소화합니다

DAPR, Amazon EKS로 마이크로 서비스 개발을 간소화합니다

마이크로 서비스와 컨테이너는 클라우드에서 최신 애플리케이션이 구축, 배포 및 관리되는 방식에 혁명을 일으키고 있습니다. 그러나 마이크로 서비스를 개발하고 운영하면 상당한 복잡성을 유발할 수 있으며, 종종 개발자가 서비스 발견, 주 관리 및 관찰 가능성과 같은 문제를 교차 절단하는 데 귀중한 시간을 소비해야합니다.

DAPR 또는 분산 애플리케이션 런타임은 클라우드 및 에지 환경에서 마이크로 서비스를 구축하기위한 오픈 소스 런타임입니다. 서비스 발견, 주 관리, 펍/서브 메시징 및 상자의 관찰 가능성과 같은 플랫폼 공연 빌딩 블록을 제공합니다. DAPR은 CNCF (Cloud Native Computing Foundation)의 졸업 성숙 수준으로 이동했으며 현재 많은 기업에서 사용하고 있습니다.

AWS의 관리 된 Kubernetes 서비스 인 Amazon Elastic Kubernetes Service (Amazon EKS)와 결합하면 DAPR은 마이크로 서비스 및 컨테이너의 채택을 가속화하여 개발자가 인프라 배관에 대해 걱정하지 않고 비즈니스 논리 작성에 집중할 수 있도록합니다. Amazon Eks는 Kubernetes 클러스터를 쉽게 관리하여 작업량이 변경됨에 따라 쉽게 스케일링을 가능하게합니다.

이 블로그 게시물에서는 DAPR이 Amazon EK의 마이크로 서비스 개발을 단순화하는 방법을 살펴 보겠습니다. 우리는 두 가지 필수 빌딩 블록으로 다이빙으로 시작할 것입니다. 서비스 호출 그리고 국가 관리.

서비스 호출

마이크로 서비스 간의 원활하고 신뢰할 수있는 의사 소통이 중요합니다. 그러나 개발자는 종종 서비스 검색, API 표준화, 통신 채널 보안, 실패 처리 및 관찰 가능성 구현과 같은 복잡한 작업으로 어려움을 겪습니다.

DAPR의 서비스 호출로 인해 이러한 문제는 과거의 일이됩니다. 귀하의 서비스는 GRPC 및 HTTP/HTTPS와 같은 산업 표준 프로토콜을 사용하여 서로 쉽게 통신 할 수 있습니다. 서비스 호출은 서비스 등록 및 검색에서 요청 회수, 암호화, 액세스 제어 및 분산 추적에 이르기까지 모든 무거운 리프팅을 처리합니다.

국가 관리

DAPR의 국가 관리 빌딩 블록은 개발자가 응용 프로그램에서 주와 함께 일하는 방식을 단순화합니다. 기본 상태 저장소 (예 : Redis, AWS DynamoDB, Azure Cosmos DB)에 관계없이 상태 데이터를 저장 및 검색하기위한 일관된 API를 제공합니다.

이러한 추상화를 통해 개발자는 주 매장을 관리하고 확장하는 복잡성에 대해 걱정하지 않고 상태의 응용 프로그램을 구축 할 수 있습니다.

전제 조건

이 게시물을 따르려면 다음과 같은 것이 있어야합니다.

응용 프로그램 아키텍처

아래 다이어그램에는 Python 앱과 Node.js 앱의 두 개의 마이크로 서비스가 있습니다. Python 앱은 주문 데이터를 생성하고 호출합니다 /neworder node.js 앱에 노출 된 엔드 포인트. Node.js 앱은 들어오는 주문 데이터를 State Store (이 경우 Amazon Elasticache)에 작성하고 주문 ID를 Python 앱에 응답으로 반환합니다.

DAPR, Amazon EKS로 마이크로 서비스 개발을 간소화합니다

DAPR의 서비스 호출 빌딩 블록을 활용하여 Python 앱은 서비스 발견, API 표준화, 통신 채널 보안, 실패 처리 또는 관찰 가능성에 대해 걱정하지 않고 Node.js 앱과 완벽하게 통신 할 수 있습니다. MTLS를 구현하여 안전한 서비스 간 통신을 제공합니다.

DAPR은 이러한 교차 절단 문제를 처리하여 개발자가 핵심 비즈니스 논리 작성에 집중할 수있게합니다.

또한 DAPR의 주 관리 빌딩 블록은 Node.js 앱이 State Store (Amazon Elasticache)와 상호 작용하는 방식을 단순화합니다. DAPR은 상태 데이터를 저장하고 검색하기위한 일관된 API를 제공하여 기본 상태 저장소 관리 및 확장의 복잡성을 추상화합니다. 이러한 추상화를 통해 개발자는 주 매장 관리의 복잡성에 대해 걱정하지 않고 상태의 응용 프로그램을 구축 할 수 있습니다.

Amazon EKS 클러스터는 호출 된 네임 스페이스를 호스팅합니다 dapr-systemDAPR 제어 평면 구성 요소가 포함되어 있습니다. 그만큼 dapr-sidecar-injector DAPR 지원 마이크로 서비스의 포드에 DAPR 런타임을 자동으로 주입합니다.

서비스 호출 단계

  1. Order Generator Service (Python App)는 노드 앱의 메소드를 호출합니다. /neworder. 이 요청은 Python 앱과 동일한 포드로 실행되는 로컬 DAPR 사이드카로 전송됩니다.
  2. DAPR은 Amazon Eks Cluster의 DNS 제공 업체를 사용하여 대상 앱을 해결하고 요청을 Node 앱의 사이드카로 보냅니다.
  3. 노드 앱의 사이드카는 요청을 노드 앱 마이크로 서비스로 보냅니다.
  4. 그런 다음 Node App은 Python 앱에서 Amazon ElasticCache에 수신 된 주문 ID를 작성합니다.
  5. 노드 앱은 로컬 DAPR 사이드카에 응답을 보냅니다.
  6. Node App의 Sidecar는 Python App의 DAPR 사이드카에 대한 응답을 전달합니다.
  7. Python 앱 사이드카는 Node 앱의 방법에 대한 요청을 시작한 Python 앱에 대한 응답을 반환합니다. /neworder.

배포 단계

EKS 클러스터를 작성하고 확인하십시오

Amazon EKS (Elastic Kubernetes Service) 클러스터를 설정하려면 여러 단계를 따라야합니다. 다음은 프로세스에 대한 높은 수준의 개요입니다.

전제 조건

  • AWS CLI를 설치하고 구성하십시오
  • 설치하다 eksctl,,, kubectl및 AWS IAM 인증 자

1. EKS 클러스터를 만듭니다. 사용 eksctl 다음과 같은 명령으로 기본 클러스터를 만듭니다.

eksctl create cluster --name my-cluster --region us-west-2 --node-type t3.medium --nodes 3

2. Kubectl 구성. 업데이트 kubeconfig 새 클러스터에 연결하려면 :

aws eks update-kubeconfig --name my-cluster --region us-west-2

3. 클러스터를 확인하십시오. 노드가 준비되었는지 확인하십시오.

EKS 클러스터에 DAPR을 설치하십시오

1. DAPR CLI 설치 :

wget -q  -O - | /bin/bash

2. 설치 확인 :

3. DAPR을 설치하고 검증하십시오.

dapr init -k --dev
dapr status -k

DAPR 구성 요소 statestore 그리고 pubsub 기본 네임 스페이스에서 생성됩니다. 아래 명령을 사용하여 확인할 수 있습니다.

Amazon Elasticache를 DAPR Statestore로 구성하십시오

마이크로 서비스의 상태를 저장하려면 Amazon Elasticache를 만듭니다. 이 예에서는 Elasticache Serverless를 사용하여 관리 할 서버없이 응용 프로그램 트래픽 요구를 충족시키기 위해 자동으로 스케일링하는 캐시를 빠르게 생성합니다.

EKS 클러스터에서 연결할 수 있도록 Elasticache의 보안 그룹을 구성하십시오. 단순성을 위해 EKS 클러스터와 동일한 VPC에 보관하십시오. 후속 단계에 필요한 캐시 엔드 포인트를 기록하십시오.

샘플 응용 프로그램 실행

1. 샘플 응용 프로그램의 git repo를 복제하십시오.

git clone 

2. 생성 redis-state.yaml Amazon ElasticCache 엔드 포인트를 제공합니다 redisHost:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  namespace: default
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: redisdaprd-7rr0vd.serverless.use1.cache.amazonaws.com:6379
  - name: enableTLS
    value: true 

적용하다 yaml State Store 구성 요소 사용 구성 kubectl.

kubectl apply -f redis-state.yaml

3. 사이드카에 마이크로 서비스를 배포하십시오.

마이크로 서비스 노드 앱의 경우로 이동하십시오 /quickstarts/tutorials/hello-kubernetes/deploy/node.yaml 파일은 아래 주석을 알 수 있습니다. DAPR 제어 평면에 사이드카를 주입하도록 지시하고 DAPR 응용 프로그램에 이름을 할당합니다.

annotations:
        dapr.io/enabled: "true"
        dapr.io/app-id: "nodeapp"
        dapr.io/app-port: "3000"

주석 서비스를 추가하십시오 .Beta.kubernetes.io/aws-load-balancer-scheme : “인터넷 팩”in node.yaml AWS ELB를 생성합니다.

kind: Service
apiVersion: v1
metadata:
  name: nodeapp
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
  labels:
    app: node
spec:
  selector:
    app: node
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
  type: LoadBalancer

사용하여 노드 앱을 배포하십시오 kubectl. 디렉토리로 이동하십시오 /quickstarts/tutorials/hello-kubernetes/deploy 아래 명령을 실행하십시오.

kubectl apply -f node.yaml

아래 명령의 출력에 외부 IP에 나타나는 AWS NLB를 얻습니다.

kubectl get svc nodeapp 

로 이동하십시오 /quickstarts/tutorials/hello-kubernetes 디렉토리 sample.json 아래 단계를 실행하려면 파일.

curl --request POST --data "@sample.json" --header Content-Type:application/json 

액세스하여 출력을 확인할 수 있습니다 /order 브라우저에서로드 밸런서를 사용하는 엔드 포인트.

출력을 다음과 같이 볼 수 있습니다 {“OrderId”:“42”}

다음으로, 두 번째 마이크로 서비스 파이썬 앱을 배포합니다. 여기에는 매 초마다 새 주문 ID를 생성하고 노드 앱의 메소드를 호출하는 비즈니스 로직이 있습니다. /neworder.

디렉토리로 이동하십시오 /quickstarts/tutorials/hello-kubernetes/deploy 아래 명령을 실행하십시오.

kubectl apply -f python.yaml

4. 응용 프로그램 배포 검증 및 테스트.

이제 우리는 두 마이크로 서비스를 모두 배포했습니다. Python 앱은 주문을 생성하고 호출합니다 /neworder 아래 로그에서 분명합니다.

kubectl logs --selector=app=python -c daprd --tail=-1

time="2024-03-07T12:43:11.556356346Z" level=info msg="HTTP API Called" app_id=pythonapp instance=pythonapp-974db9877-dljtw method="POST /neworder" scope=dapr.runtime.http-info type=log useragent=python-requests/2.31.0 ver=1.12.5
time="2024-03-07T12:43:12.563193147Z" level=info msg="HTTP API Called" app_id=pythonapp instance=pythonapp-974db9877-dljtw method="POST /neworder" scope=dapr.runtime.http-info type=log useragent=python-requests/2.31.0 ver=1.12.5

우리는 노드 앱이 요청을 수신하고 본 예에서 State Store Amazon ElasticCache에 쓰고 있음을 알 수 있습니다.

kubectl logs —selector=app=node -c node —tail=-1

Got a new order! Order ID: 367
Successfully persisted state for Order ID: 367
Got a new order! Order ID: 368
Successfully persisted state for Order ID: 368
Got a new order! Order ID: 369
Successfully persisted state for Order ID: 369

Amazon ElasticCache에서 데이터가 지속되는지 확인하기 위해 엔드 포인트에 액세스합니다. /order 아래에. Python 앱에서 생성 된 최신 주문 ID를 반환합니다.

가장 최근의 순서로 출력이 표시됩니다. {“OrderId”:“370”}.

정리

아래 명령을 실행하여 State Store 구성 요소와 함께 배포 노드 앱 및 Python 앱을 삭제하십시오.

로 이동하십시오 /quickstarts/tutorials/hello-kubernetes/deploy 아래 명령을 실행하는 디렉토리.

kubectl delete -f node.yaml
kubectl delete -f python.yaml

당신은 eksctl Amazon Elasticache를 명령하고 삭제하십시오.

있는 디렉토리로 이동하십시오 cluster.yaml 첫 번째 단계에서 클러스터를 만드는 데 사용되는 파일.

eksctl delete cluster -f cluster.yaml

결론

DAPR과 Amazon EKS는 마이크로 서비스 개발을위한 강력한 동맹을 형성합니다. DAPR은 교차 절단 문제를 단순화하는 반면 EKS는 Kubernetes 인프라를 관리하여 개발자가 핵심 비즈니스 논리에 집중하고 생산성을 높일 수 있도록합니다.

이 조합은 확장 가능하고 탄력적이며 관찰 가능한 응용 프로그램의 생성을 가속화하여 작동 오버 헤드를 크게 줄입니다. 마이크로 서비스 여행에 이상적인 기초입니다. 배포 된 추적 및 관찰 가능성에서 DAPR 및 EKS의 기능을 탐색하는 다가오는 게시물을보십시오. 더 깊은 통찰력과 모범 사례를 제공하십시오.

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다