서버리스 아키텍처란 무엇인가요?

서버리스 아키텍처는 타사에서 완전히 관리하는 임시 컨테이너에서 사용자 지정 코드를 실행합니다. 사용자 지정 코드는 일반적으로 전체 애플리케이션의 작은 부분입니다. 또한 다음과 같이 호출됩니다. 함수. 이는 서버리스 아키텍처의 또 다른 이름을 서비스로서의 기능 (FaaS). 컨테이너는 한 번 호출하는 동안만 지속될 수 있으므로 임시적입니다. 컨테이너는 재사용될 수 있지만, 그렇다고 안심하고 사용할 수 있는 것은 아닙니다. 개발자는 FaaS 플랫폼에 코드를 업로드하면 서비스에서 코드를 실행하기 위한 인프라의 용량, 확장, 패치 및 관리를 모두 처리합니다.

서버리스 아키텍처를 사용하여 구축된 애플리케이션은 이벤트 중심 접근 방식을 따릅니다. 예를 들어, 애플리케이션에서 클릭과 같은 활동이 발생했습니다. 이는 애플리케이션 코드가 일반적으로 Tomcat이나 WildFly와 같은 애플리케이션 서버에 배포되는 기존 아키텍처와는 매우 다릅니다. 애플리케이션을 확장한다는 것은 애플리케이션 서버의 추가 인스턴스를 시작하거나 패키지 애플리케이션 서버로 추가 컨테이너를 스핀업하는 것을 의미합니다. 로드 밸런서를 새 IP 주소로 업데이트해야 합니다. 운영 체제를 패치, 업그레이드 및 유지 관리해야 합니다.

서버리스 아키텍처 기존 프로그래밍 모델과 이 새로운 서버리스 아키텍처의 차이점을 설명합니다. FaaS 플랫폼을 사용하면 애플리케이션이 여러 기능으로 나뉩니다. 각 기능은 FaaS에 배포됩니다. 이 서비스는 애플리케이션의 확장성 요구 사항을 충족하기 위해 추가 컴퓨팅 인스턴스를 스핀업합니다. FaaS 플랫폼은 실행 환경을 제공하고 함수를 실행하기 위한 컨테이너의 시작과 해체를 처리합니다.

읽기 서버리스 아키텍처 를 참조하세요. FaaS의 큰 장점 중 하나는 계산 시간, 즉 코드가 실행되는 시간만큼만 요금이 부과된다는 점입니다. 코드가 실행되지 않을 때는 요금이 부과되지 않습니다. 함수는 VM 및 컨테이너와 어떻게 다른가요?

AWS Lambda의 구현으로 Docker 컨테이너 대신 Linux 컨테이너가 사용된다는 점에 유의하세요.

FaaS는 PaaS와 어떻게 다른가요?

에서 인용한 대로 서버리스 아키텍처에 대한 빠른 답변은 다음 트윗에서 확인할 수 있습니다:

즉, 대부분의 PaaS 애플리케이션은 모든 요청에 대해 전체 애플리케이션을 업/다운하는 데 적합하지 않은 반면, FaaS 플랫폼은 정확히 이 기능을 수행합니다. FaaS로 백엔드 추상화하기 다른 *aaS 제품과의 차이점을 설명합니다. 블로그의 이미지가 아래에 캡처되어 있습니다:
faas

서버리스 아키텍처 에서도 FaaS가 무엇이고 무엇이 아닌지에 대해 자세히 설명합니다. AWS 람다, Google 클라우드 기능 그리고 Azure 기능 는 서버리스 애플리케이션을 실행하기 위한 몇 가지 옵션입니다. 이 블로그에서는 첫 번째 AWS Lambda 함수를 작성하는 방법을 보여드립니다.

AWS 람다란 무엇인가요?

AWS Lambda는 Amazon Web Services의 FaaS 서비스입니다. 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버 및 운영 체제 유지 관리, 용량 프로비저닝 및 자동 확장, 코드 모니터링 및 로깅을 포함한 컴퓨팅 리소스의 모든 관리를 수행합니다. AWS Lambda는 코드가 실행되는 기간에 대해 100ms 단위로 요금을 청구합니다. AWS에 Lambda 함수를 저장하는 데는 비용이 들지 않습니다.

월 첫 백만 건의 요청은 무료이며 그 이후의 요금은 명목상 가격입니다. 자세한 내용 보기 람다 가격. 또한 다음 대상에 실시간 메트릭과 로그를 제공하여 성능에 대한 가시성을 제공합니다. AWS CloudWatch. 코드를 작성하기만 하면 됩니다! 다음은 간단한 소개입니다:

다음에서 AWS Lambda의 새로운 기능도 확인해 보세요. AWS 리인벤트 2016:

AWS ReInvent 2016의 서버리스 아키텍처 패턴 및 모범 사례도 확인해 보세요:

AWS Lambda에서 실행하는 코드를 람다 함수라고 합니다. 코드를 zip 파일로 업로드하거나 다음을 사용하여 코드를 디자인합니다. AWS 람다 관리 콘솔. AWS SDK를 기본적으로 지원하므로 다른 AWS 서비스를 호출하는 기능이 간소화됩니다. 간단히 말해, Lambda는 확장 가능하고 서버리스이며 클라우드에서 컴퓨팅합니다. AWS Lambda는 다음과 같은 여러 기능을 제공합니다. 실행 환경을 지원합니다:

  • Node.js - v0.10.36, v4.3.2(권장)
  • Java - Java 8
  • Python - Python 2.7
  • .NET Core - .NET Core 1.0.1(C#)

이 블로그에서는 그 방법을 알려드립니다:

  • JSON 문서를 Couchbase에 저장하는 Java 애플리케이션을 빌드하세요.
  • Maven을 사용하여 Java 애플리케이션용 배포 패키지 만들기
  • 람다 함수 만들기
  • 람다 함수 업데이트

이 블로그의 전체 코드는 다음 링크에서 확인할 수 있습니다. github.com/arun-gupta/serverless/tree/master/aws/hellocouchbase.

AWS 람다용 Java 애플리케이션

먼저 이 람다 함수에 사용될 Java 애플리케이션을 살펴보겠습니다. Java에서 람다 함수를 위한 프로그래밍 모델 에서 자바로 람다 함수 코드를 작성하는 방법에 대한 자세한 내용을 확인할 수 있습니다. 람다 함수는 사전 정의된 인터페이스를 구현합니다. com.amazonaws.services.lambda.runtime.RequestHandler. 코드는 다음과 같습니다:

핸들 요청 메서드는 함수 코드가 구현되는 곳입니다. 컨텍스트 는 람다 실행 환경에 대한 유용한 정보를 제공합니다. 컨텍스트의 일부 정보는 JSON 문서로 저장됩니다. 마지막으로 카우치베이스 자바 SDK API 업서트 는 식별된 카우치베이스 인스턴스에 JSON 문서를 작성하는 데 사용됩니다. Amazon EC2의 카우치베이스 는 AWS EC2에 Couchbase를 설치하기 위한 전체 지침을 제공합니다. Couchbase 서버에 대한 정보는 다음과 같이 얻습니다:

다시 한 번 Couchbase Java API를 사용합니다. 카우치베이스클러스터 를 카우치베이스 클러스터의 주요 진입점으로 사용합니다. 그리고 COUCHBASE_HOST 환경 변수가 Lambda 함수가 생성될 때 전달됩니다. 저희의 경우, 이 변수는 AWS EC2에서 실행되는 단일 노드 Couchbase 클러스터를 가리킵니다. 환경 변수가 최근에 도입되었습니다. 를 생성합니다. 마지막으로 서버에서 이 버킷에 액세스해야 합니다:

버킷 이름은 서버리스 에 저장되며 모든 JSON 문서는 여기에 저장됩니다. 간단한 헬로월드 애플리케이션 를 사용하여 이 함수를 만들 수도 있습니다.

AWS 람다 배포 패키지 생성

AWS FaaS에는 배포 패키지가 필요합니다. 이 Lambda 패키지는 .zip 또는 .jar 파일에 함수의 모든 종속성을 포함합니다. 애플리케이션은 Maven을 사용하여 패키징되므로 Maven 플러그인을 사용하여 배포 패키지를 만들겠습니다. 애플리케이션에는 pom.xml 를 다음 플러그인 조각으로 대체합니다:

Maven 구성에 대한 자세한 내용은 다음에서 확인할 수 있습니다. IDE 없이 Maven을 사용하여 .jar 배포 패키지 만들기. . 메이븐-쉐이드-플러그인 를 사용하면 모든 종속성을 포함한 uber-jar를 만들 수 있습니다. 그리고 그늘 목표는 패키지 단계입니다. 따라서 MVN 패키지 명령은 단일 배포 jar를 생성합니다. 애플리케이션을 패키징하려면 MVN 패키지 명령을 실행합니다. 그러면 출력이 표시됩니다:

그리고 대상/헬로-카우치베이스-1.0-SNAPSHOT.jar 는 AWS Lambda에 배포할 음영 처리된 컨테이너입니다. 배포 패키지를 생성하는 방법에 대한 자세한 내용은 배포 패키지 만들기.

AWS 람다 함수 생성

다음을 사용하여 AWS 람다 함수 생성 AWS CLI. 이 경우의 CLI 명령은 다음과 같습니다:

이 CLI:

  • create-function 람다 함수를 생성합니다.
  • --함수 이름 함수 이름을 입력합니다. 함수 이름은 대소문자를 구분합니다.
  • --역할 는 아마존 리소스 이름(ARN)을 지정합니다. IAM 역할 함수를 실행하여 다른 AWS 리소스에 액세스할 때 Lambda가 가정합니다. Lambda를 실행한 경우
    함수를 사용하면 이 역할이 자동으로 생성됩니다.
  • --zip-file 는 이전 단계에서 생성한 배포 패키지를 가리킵니다. fileb 는 업로드된 콘텐츠가 바이너리임을 나타내는 AWS CLI 전용 프로토콜입니다.
  • --핸들러 는 함수 실행을 시작하기 위해 호출되는 Java 클래스입니다.
  • --게시 Lambda 함수를 생성하고 버전을 원자 작업으로 게시하도록 AWS Lambda에 요청하세요. 그렇지 않으면 여러 버전이 생성되어 나중에 게시될 수 있습니다.

람다 콘솔 쇼:

servleress-couchbase-lambda-function

AWS 람다 함수 테스트

AWS CLI를 사용하여 AWS 람다 함수를 테스트합니다.

출력은 다음과 같이 표시됩니다:

명령의 출력은 다음 위치에 저장됩니다. hellocouchbase.out 처럼 보입니다:

이 함수를 호출하면 Couchbase에 JSON 문서가 저장됩니다. Couchbase에 저장된 문서는 다음을 사용하여 볼 수 있습니다. 카우치베이스 웹 콘솔. 사용자 이름은 관리자 이며, 비밀번호는 EC2 인스턴스 ID입니다. 이 카우치베이스 인스턴스의 모든 데이터 버킷은 아래와 같습니다:

serverless-couchbase-bucket-overview

참고 서버리스 버킷이 수동으로 생성됩니다. 문서를 클릭하면 버킷에 저장된 여러 문서의 세부 정보가 표시됩니다:

serverless-couchbase-bucket-documents

각 문서를 클릭하면 JSON 문서에 대한 자세한 내용을 볼 수 있습니다:

serverless-couchbase-bucket-document

콘솔을 사용하여 람다 기능을 테스트할 수도 있습니다:

serverless-couchbase-console-test

AWS 람다 함수 업데이트

애플리케이션 로직이 변경되면 람다 함수에 대한 새 배포 패키지를 업로드해야 합니다. 이 경우 MVN 패키지 은 배포 패키지를 생성하고 AWS 람다 CLI 명령은 기능 코드를 업데이트하는 데 사용됩니다:

결과를 표시합니다:

그런 다음 함수를 다시 호출할 수 있습니다. 이 블로그를 작성하는 동안 이 함수를 디버깅하는 데에도 자주 사용했습니다. 그 이유는 람다 함수에는 연결된 상태나 상자가 없기 때문입니다. 따라서 함수가 올바르게 배포되지 않았는지 확인하기 위해 상자에 로그인할 수 없습니다. 함수가 작동하면 CloudWatch 로그 문을 확실히 사용할 수 있습니다.

AWS 람다 레퍼런스

작성자

게시자 Arun Gupta, 개발자 지원 부문 부사장, Couchbase

아룬 굽타는 Couchbase의 개발자 지원 담당 부사장입니다. 그는 Sun, Oracle, Red Hat에서 10년 이상 개발자 커뮤니티를 구축하고 이끌었습니다. 그는 콘텐츠, 마케팅 캠페인 및 프로그램의 전략, 계획 및 실행을 개발 및 실행하는 교차 기능 팀을 이끄는 데 있어 깊은 전문성을 보유하고 있습니다. 그 전에는 Sun에서 엔지니어링 팀을 이끌었으며 Java EE 팀의 창립 멤버입니다. Gupta는 기술에 관한 블로그 게시물을 2,000개 이상 작성했습니다. 40여 개국에서 수많은 주제에 대해 광범위한 강연 경험을 가지고 있으며, 3년 연속 JavaOne Rock Star로 선정되었습니다. 또한 미국에서 Devoxx4Kids 지부를 설립하여 어린이를 대상으로 한 기술 교육을 지속적으로 장려하고 있습니다. 기술에 관한 여러 권의 책을 저술했으며, 열렬한 마라토너이자 지구를 횡단하는 사람, Java 챔피언, JUG 리더, NetBeans 드림팀 멤버, Docker 캡틴이기도 한 그는 @arungupta에서 쉽게 만나볼 수 있습니다.

댓글 남기기