Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중

4,040 views

Published on

판교 개발자 데이
Aws가 제안하는 서버리스 아키텍처 - 김필중

Published in: Technology
  • Be the first to comment

판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중

  1. 1. AWS가 제안하는 서버리스 아키텍처 김필중 솔루션즈 아키텍트
  2. 2. 오늘의 진행 • 서버리스란? • 서버리스 관련 핵심 서비스 소개 • 활용 방법 및 사례 • 정리
  3. 3. 서버에 대한 고민 없이 애플리케이션을 구축 및 작동 서버리스?
  4. 4. 왜 서버리스 일까요?
  5. 5. Servers서버의 물리적인 장애를 어플리케이션에서 어떻게 처리하지? 내 서버들에 대한 접근을 어떻게 통제할 수 있지? 서버의 수를 언제 늘려야 하지? 내 서버의 용량을 언제 늘려야 하지? 내 예산에 맞는 서버의 크기는? 내 서버들의 남아있는 용량은 얼마나 되지? (AAHHHHHHHHH!!)
  6. 6. 서버리스 아키텍쳐 완전 관리형 • 프로비져닝 없음 • 관리요소 없음 • 높은 가용성 개발자 생산성 • 중요한 코드에 집중 • 빠르게 혁신 • 시장에 빠르게 접근 지속적인 스케일링 • 자동으로 • 스케일 업/다운
  7. 7. AWS의 수많은 서버리스 옵션 스토리지 데이터베이스 네트워크 컴퓨팅 콘텐츠 전송 메시징 및 대기열보안 게이트웨이 사용자 관리 모니터링 및 로깅 사물 인터넷 기계 학습 데이터 분석
  8. 8. 챗봇 • 챗봇 로직 구현 아마존 알렉사 • 음성 인식 애플리케이션 • 알렉사 스킬 키트 대게 자주 사용되는 곳 웹 애플리케이션 • 정적 웹사이트 • 동적 웹 애플리케이션 • Flask 와 Express 패키지 데이터 처리 • 실시간 • MapReduce • 배치 백엔드 • 애플레케이션 및 서비스 • 모바일 • IoT </></>
  9. 9. 서버리스 와 함께 성장하는 고객들
  10. 10. 진화하는 아키텍처 모노리틱 아키텍처 (Monolithic) • 획일적 • 자유가 없는 서비스 중심 아키텍처 (SOA) • 모듈화 • 기능별 분리 마이크로서비스 (Microservices) • 최소한의 기능 분리 • 신속한 개발/배포
  11. 11. AWS Lambda
  12. 12. AWS Lambda 서버리스, 이벤트 처리 방식의 컴퓨팅 서비스 Lambda = 서버리스 마이크로서비스
  13. 13. Lambda : 동작 원리 1. 코드 등록 2. 트리거 3. 실행 4. 사용요금
  14. 14. Amazon S3 Amazon DynamoDB Amazon Kinesis AWS CloudFormation AWS CloudTrail Amazon CloudWatch Amazon SNSAmazon SES Amazon API Gateway Amazon Cognito Amazon Alexa Cron events 데이터 저장소 엔드포인트 설정 저장소 이벤트/메시지 서비스 AWS Lambda 의 이벤트 소스 그리고… 지속적으로 확장중! AWS CodeCommit AWS IoT
  15. 15. Lambda : 동작 원리 Bring your own code • Node.js, Java, Python • Java = Scala, Clojure 등의 어떠한 JVM기반 언어. • Bring your own libraries 유연한 호출 경로 • Event 혹은 Request/Response 호출 옵션 • 여러 AWS 서비스들과 통합 단순한 자원 모델 • 128MB부터 1.5GB까지 64MB 단위로 메모리 설정 • 할당된 메모리에 비례하여 CPU 및 네트웍 자원 할당 • 실제 사용량 내역 보고 효과적인 권한 통제 • AWS IAM (Identity and Access Management) Role을 사용한 실행 권한 설정 • AWS 이벤트 소스에 대한 자원 정책
  16. 16. Lambda : 동작 원리 제작 기능 • AWS SDK 포함 • 인바운드 네트웍 처리 • 프로세스, 쓰레드, /tmp, 소켓 … 배포 옵션 • 콘솔의 WYSIWIG 편집기를 사용하여 직접 제작/배포 • 코드를 zip 파일로 묶어 Lambda 서비스 혹은 S3로 전송 Stateless 기능 • S3/Amazon DynamoDB/Amazon ElastiCache를 사용한 저장 • 인프라스트럭쳐와의 연관성 없음 (로그인 불가) 모니터링 및 로깅 • Amazon CloudWatch 메트릭 – 요청 수, 에러 수, 처리 시간, 처리량 • Amazon CloudWatch Log를 사용하여 로깅
  17. 17. 배포 관리: 버저닝 - 개발 람다 함수에 하나 이상의 버전 퍼블리싱 람다 함수 배포는 여전히 손쉬움: • 변경 시 코드 업로드 • 변경 적용 • 마지막 업데이트가 최신 exports.handler = function(event,context) {context.succeed(“bye”);} exports.handler = function(event,context) {context.succeed(“hi”);}
  18. 18. 배포 관리: 버저닝 - 배포 효과적인 프로덕션 람다 함수 코드 관리 개발 중 필요 시 마다 신규 버전 배포: • 개발 버전을 번호 버전으로 복제 배포 • 배포된 버전은 읽기 전용 (구성 포함) • 함수 별 간단한, 정수 버전 exports.handler = function(event,context) {context.succeed(“bye”);} exports.handler = function(event,context) {context.succeed(“hi”);} 1 2 Versions
  19. 19. 배포 관리: 버저닝 - 별칭 서로 다른 버전에 대한 변경 가능한 별칭 사용 특정 버전에 대하여 이름으로 별칭(alias) 지정 • 함수 소유자가 ARNs를 코드에 매핑 • 클라이언트 변경 없이 업데이트 가능 exports.handler = function(event,context) {context.succeed(“bye”);} exports.handler = function(event,context) {context.succeed(“hi”);} prod dev Aliases
  20. 20. 배포 관리: 버저닝 – Lambda 함수 호출 다양한 버전의 Lambda 함수 사용: 개발, 베타, 프로덕션 개발 버전: FunctionName (or) FunctionName:$LATEST 특정 버전: FunctionName:1 FunctionName:2 명명된 버전: FunctionName:production FunctionName:v1_2_3_4
  21. 21. 추가 정보 • 메모리 = “파워 레벨“ • 더 많은 메모리는 더 높은 CPU 파워를 제공 • 성능 튜닝 • JIT (Just-in-time) 초기화: 처음 대기 시간 비용 (“콜드 스타트“) • 컨테이너를 재사용하여 반복 호출에 대한 지연을 피함 • Python 은 Node 보다 더 빨리 시작하며, 둘 모두 Java 보다 빨리 시작 • 사용자 라이브러리가 적으면 코드가 더 빨리 시작될 수 있음 (불필요한 종속성 제거) • VPC 내에서 동작되는 함수는 VPC 가 아닌 것 보다 느릴 수 있음 • 높은 파워 레벨 (메모리) 설정은 빠르게 시작 될 것임 (특히 많은 사용자 라이브러리 또는 초기화 코드가 사용되는 경우) • 함수에는 상태 개념이 없음 • 지속성을 위해 DynamoDB, S3, ElastiCache 를 사용 • 로컬 캐시 사용도 가능 • 메타 데이터 전달을 위해 환경 변수를 사용
  22. 22. 환경 변수도 지정 가능
  23. 23. AWS Serverless Application Model (SAM) • 서버리스 앱의 컨텐츠를 기술하기 위한 공통 언어 • CloudFormation 에서 SAM 을 지원하여 서버리스 구성이 손 쉬워짐 • 람다 기반 애플리케이션을 패키지하고 배포하기 위한 CloudFormation 도구 • 콘솔에서 SAM 포맷으로 람다 블루프린트와 함수를 내보내기 가능
  24. 24. AWS Serverless Application Model AWSTemplateFormatVersion: '2010-09-09’ Transform: AWS::Serverless-2016-10-31 Resources: GetHtmlFunction: Type: AWS::Serverless::Function Properties: CodeUri: s3://flourish-demo-bucket/todo_list.zip Handler: index.gethtml Runtime: nodejs4.3 Policies: AmazonDynamoDBReadOnlyAccess Events: GetHtml: Type: Api Properties: Path: /{proxy+} Method: ANY ListTable: Type: AWS::Serverless::SimpleTable 함수 API 저장소
  25. 25. Dead-letter 큐 안정적인 엔드-투-엔드 이벤트 처리 솔루션을 손 쉽게 생성 • 처리되지 않은 모든 이벤트를 SQS 큐나 SNS 토픽으로 보냄: 3 스트라이크 규칙 • 코드에 문제가 있거나 호출이 쓰로틀 된 경우에도 이벤트를 보존 • 함수 별 동작 • S3 및 SNS 이벤트를 포함한 모든 비동기 호출에도 작동 Amazon SQS Amazon SNS AWS Lambda
  26. 26. Dead-letter 큐 활용 Amazon SNS Error Handler 실패된 이벤트 퍼블리시 Original Function 트리거
  27. 27. 개발자 에코시스템 - 오픈소스 Chalice Framework
  28. 28. AWS Step Functions 3개 이상의 함수 시도 비동기 함수 콜백 추가 대기가 필요한 상황 처리 함수 실행 체인 (A à B à C) Long-running 워크플로우 지원 여러 람다 함수를 안정적으로 조정
  29. 29. Amazon API Gateway
  30. 30. 기존의 어려움 다양한 API 버전 및 스테이지 관리의 어려움 타사 개발자들의 접근 모니터링에 시간 소요 접근 권한 관리의 어려움 트래픽 증감에 따른 운영 부담 서버를 전혀 갖지 않고 싶으면?
  31. 31. Amazon API Gateway 개요 다양한 API 버전 및 스테이지를 제공 타사 개발자에 API 키 생성 및 배포 API 접근 권한 관리를 위한 ‘AWS 서명 버전 4’ 활용 요청을 모니터링 및 제한하여 백엔드 보호 AWS Lambda 활용
  32. 32. API Gateway 사용의 장점 API 응답을 저장하기 위한 관리형 캐시 CloudFront를 통한 응답속도 개선 및 DDoS 보호 iOS, Android 및 JavaScript 를 위한 SDK 생성 API 정의를 위한 Swagger 지원 Request/response 데이터 변환
  33. 33. Supercell 고객 사례 Supercell also makes good use of the Amazon API Gateway, and it uses AWS Lambda to run code in response to events and automatically manage the associated compute resources. Yliharju says, “We use AWS Lambda and the API Gateway when building API-based services that need scalability.” https://aws.amazon.com/solutions/case-studies/supercell/
  34. 34. API 호출 흐름 Internet Mobile apps Websites Services AWS Lambda functions AWS API Gateway cache Endpoints on Amazon EC2/AWS Elastic Beanstalk Any other publicly accessible endpoint Amazon CloudWatch monitoring API Gateway
  35. 35. 관리형 서비스 새로운, 완전 관리형 모델 InternetMobile apps AWS Lambda functions AWS API Gateway cache Endpoints on Amazon EC2 Any other publicly accessible endpoint Amazon CloudWatch Amazon CloudFront API Gateway API Gateway Other AWS services AWS Lambda functions
  36. 36. AWS 로 앱 및 서버리스 마이크로서비스 개발 Amazon Cognito Identity AWS Device Farm AWS Lambda API Gateway Amazon Simple Email Service Mobile Hub Android SDK iOS SDK JavaScript SDK Amazon DynamoDB Amazon RDS Amazon S3 Amazon CloudFront Amazon EMR Amazon Kinesis Amazon Redshift Amazon SNS Amazon Mobile Analytics 모바일 앱 개발 서버리스 백엔드 ID 관리 테스팅 및 개발 도구 데이터 저장소와 컨텐츠 모바일 분석 이메일과 푸시 알림 분석과 빅데이터 AWS CodeCommit AWS CodeDeploy AWS CodePipeline Amazon Cognito Sync
  37. 37. 서버리스의 활용
  38. 38. 서버리스 활용 시나리오 데이터 처리 별도 혹은 데이터 저장소나 메시지 버스에 스트리밍되는 데이터를 stateless 하게 처리 시스템 제어 AWS 내의 상태 및 데이터 변경에 대한 응답 및 응답 워크플로우 제어 앱 백엔드 개발 Web, 모바일, 디바이스, 음성인식과 관련하여 서버의 비지니스 로직 실행
  39. 39. 데이터 소스 변경 사항 폴링을 위한 서버 플릿 소스 리스닝 작업 큐 푸시 작업 큐 풀 데이터 처리를 위한 작업자 서버 플릿 부하 대응을 위한 오토스케일 링 S3 객체 Amazon Kinesis 레코드 DynamoDB 테이블 SNS 메시지 IoT 장치 … 고가용성을 위한 다중 가용영역 분산 트래픽 분산을 위한 로드밸런서 서버를 통한 데이터 처리 아키텍처 어플리케이션 코드
  40. 40. 데이터 소스 Lambda 함수 연결 이것으로 끝! Lambda가 수행 리스닝/폴링 작업 큐 관리 오토스케일링 고가용성 로드 밸런싱 서버리스 데이터 처리 아키텍처 어플리케이션 코드
  41. 41. Amazon S3 Bucket Events AWS Lambda Original image Thumbnailed image 1 2 3 참조 아키텍처: 이미지 리사이징 튜토리얼: Using AWS Lambda with Amazon S3 - http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html
  42. 42. 참조 아키텍처: 서버리스 비디오 스트리밍 아키텍처 AWS Lambda Amazon S3 비디오 파일 입수 PUT 이벤트 Lambda 트리거 Amazon Elastic Transcoder 트랜스코딩 Job 시작 Amazon S3 여러 bit-rate HLS 스트리밍 Amazon CloudFront 시청자
  43. 43. 서버리스 웹 앱 : API Gateway + Lambda 정적 컨텐츠 제공 : S3 동적 컨텐츠 제공 : Lambda HTTPS 억세스 및 인터페이스 : API Gateway 저장소 : DynamoDB Dynamic Content in AWS Lambda Data Stored in Amazon DynamoDB API GatewayStatic content in Amazon S3
  44. 44. 비동기 프로세싱: S3 + Lambda New data available Amazon S3 AWS Lambda Amazon S3
  45. 45. 데이터베이스 트리거: DynamoDB + Lambda New data available Amazon DynamoDB AWS Lambda Amazon DynamoDB Amazon Redshift
  46. 46. 실시간 분석 처리: Kinesis + Lambda 고속 대용량 데이터 수집 : Kinesis Lambda 내 “Kinesis” 블루프린트 활용 수집 및 집계 결과 저장 : Redshift, S3, DynamoDB Data Ingestion with Amazon Kinesis (PUT record) Records retrieved by AWS Lambda Your code runs once per [batch of] records Amazon S3 Amazon DynamoDB Smart Devices Click Stream Log Data Amazon Redshift
  47. 47. 서버리스 폴링: SQS + Lambda AWS Lambda Scheduled Job Amazon SQS (or rabbitMQ or webhook)
  48. 48. 백엔드 : AWS IoT + AWS Lambda
  49. 49. 간단한 웹 기반 툴: Serverless Pastebin (gist) SPPutPaste 웹 브라우저 Amazon S3 동적 콘텐츠 정적 콘텐츠 Amazon DynamoDBAmazon API Gateway ServerlessPastebin - pid - content - created_at SPGetPaste SPUpdatePaste SPDeletePaste 모바일 /paste POST OPTIONS /{id} POST GET PUT DELETE OPTIONS Amazon Route 53 s3://serverless.piljoong.com
  50. 50. 서버리스 맵/리듀스 https://github.com/awslabs/lambda-refarch-mapreduce
  51. 51. 서버리스 맵/리듀스 벤치마크 데이터셋: Amplab 벤치마크의 일부분 쿼리: - Scan 쿼리 (9천만건, 6.36GB) - SELLECT pageURL, pageRank FROM rankings WHERE pageRank > X (x = {1000, 100, 10}) - 1a) SELECT pageURL, pageRank FROM rankings WHERE pageRank > 1000 - 1b) SELECT pageURL, pageRank FROM rankings WHERE pageRank > 100 - UserVisits 에 Aggregation 쿼리 (7.75억건, ~127GB) - 2a) SELECT SUBSTR(sourceIP, 1, 8), SUM(adRevenue) FROM uservisits GROUP BY SUBSTR(sourceIP, 1, 8)
  52. 52. 서버리스 맵/리듀스 벤치마크 결과 Serverless 맵리듀스 비용 각 솔루션 별 쿼리 실행 시간 (초 단위)
  53. 53. PyWren: 대규모 데이터 프레임 워크 • 람다를 사용하는 오픈 소스 맵리듀스 프레임워크 • 25 TFLOPS 성능 (피크 40) • 60GB/초 읽기와 • 50GB/초 쓰기 (S3) https://github.com/pywren/pywren http://pywren.io/
  54. 54. The Seattle Times 데스크탑, 태블릿, 스마트폰 등의 서로 다른 디바이스에서 최적화된 이미지를 보기 위해 이미지 리사이징 목적으로 사용
  55. 55. PlayOn! Sports 랩톱 인코더 HLS S3 재생 VOD 스트림 모바일 클라이언트 CloudFront 스트리밍 라이브 스트림 모바일 클라이언트 CloudFront S3 수집 480p 트랜스코드 HQ 사본 360p 트랜스코드 오디오 전용 트랜스코드 썸네일 QOS 분석 Lambda 함수 종속 연결 http://www.slideshare.net/AmazonWebServices/arc308-the-serverless-company-using-aws-lambda Peak 시: 300 라이브 인바운드와 2만여명의 뷰어
  56. 56. SQUARE ENIX 결과: - 몇 시간 걸리던 작업이 10여초만에! - 동일한 작업의 1/20 수준의 비용 어떤 작업: - 게임 내 사진의 추가 작업: 썸네일, 워터마크 추가 등 기존 상황: - 보통 1분에 2~300 장 정도 처리 - 이벤트 시 분당 6000개 까지 늘어남 - 이벤트 시 사용자의 사진 확인까지 긴 경우 3~4시간 소요 고려한 점들: - 64코어 서버 추가 및 처리 쓰레드 확장 (처리 속도보단 병렬 처리를) - 몇 번 없는 스파이크를 위해 고비용의 장비 구매는 비효율적 - AWS 도입? Lambda 도입?
  57. 57. VidRoll 아키텍처 - 개발자들의 인프라에 대한 이해와 걱정을 없앰 - 8~10 명의 엔지니어가 주로 하던일을 2~3 명의 엔지니어가 할 수 있게 됨 - 기술인력 추가 없이 10배 이상 수익이 증가함 AWS Lambda Amazon API Gateway Amazon DynamoDB Amazon Redshift Amazon Kinesis
  58. 58. https://goad.io/
  59. 59. https://goad.io/
  60. 60. 참고: AWS 부하 테스트와 관한 정보는 http://bit.ly/LoadTestingOnAWS
  61. 61. 사용자 인증 및 제어 비지니스 로직 수행 사용자 행동 분석 데이터 동기화 콘텐츠 저장, 공유, 전송 푸시 알림 전송 실 시간 데이터 스트림 공유 데이터 저장 대화형 입력 처리리텐션 추적 모바일 게임 AWS Mobile SDK 사용자와 인증 제공 관리 서버 없이 상태 없는 커스텀 코드 실행 디바이스 간의 사용자 설정 동기화 활성 유저, 인게이지먼트 추적 사용자 제작 사진과 미디어 저장, 공유 및 글로벌로 빠르게 전송 메시지를 전송하여 사용자 인게이지먼트 레벨 향상 사용자와 디바이스 간 데이터를 저장 및 쿼리 실 시간 클릭스트림 로그 수집 및 빠르게 동작 수행 실 시간 클릭스트림 로그 수집 및 빠르게 동작 수행 서버 없이 상태 없는 커스텀 코드 실행
  62. 62. 사용자 인증 및 제어 비지니스 로직 수행 사용자 행동 분석 데이터 동기화 Amazon Mobile Analytics Amazon Cognito (Sync) Amazon Lambda Amazon Cognito (Identity) IAM 콘텐츠 저장, 공유, 전송 푸시 알림 전송 Amazon CloudFront Amazon S3 Amazon SNS Mobile Push Amazon Pinpoint 실 시간 데이터 스트림 Amazon Kinesis Amazon Pinpoint 공유 데이터 저장 Amazon DynamoDB Amazon RDS 대화형 입력 처리리텐션 추적 Amazon Lex 모바일 게임 AWS Mobile SDK
  63. 63. 정리
  64. 64. AWS의 수많은 Serverless 옵션 스토리지 데이터베이스 네트워크 컴퓨팅 콘텐츠 전송 메시징 및 대기열보안 게이트웨이 사용자 관리 모니터링 및 로깅 사물 인터넷 기계 학습 데이터 분석
  65. 65. AWS 활용 = Building Block 조립 작은 서비스 구축에 적절한 다양한 서비스들을 유연하게 조립하여 활용
  66. 66. 참고자료는 여기에! https://aws.amazon.com/ko/ https://aws.amazon.com/ko/new/ https://aws.amazon.com/ko/blogs/aws/ http://aws.amazon.com/ko/documentation/ https://aws.amazon.com/ko/whitepapers/ https://twitter.com/awskorea
  67. 67. 감사합니다!

×