날고싶은 커피향
AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석과 관련된 자료입니다.
내용 참고 하시기 바랍니다.
Transcript
1. SEOUL © 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
2. © 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved 게임 서비스 운영 Solutions Architect 정윤진
3. https://speakerdeck.com/hatena/jaws-days-2014-miiverse
4. 어떻게 만든걸까? • CentOS 6 • MySQL, Redis, Memcached • Nginx, HAProxy, Squid • Quagga, OpenSwan, OpenVPN • Nagios, CloudWatch, Graphite, Mackerel • Git, Capistrano, Cinamon • Chef from OPSCODE https://speakerdeck.com/hatena/jaws-days-2014-miiverse
5. 신규 게임을 출시할 때마다 이런 설치 작업을 반복해야 한다면?
6. Pain points • 게임을 런칭 할때마다 환경을 직접 구성 • AMI 기반의 버전 관리만으로는 부족 • 대부분의 게임은 장르별로 유사한 구성 • 정기 점검으로 인한 서비스 중단은 매출에 영향
7. 인프라를 코드로 관리
8. 필요할때 즉시 사용한 만큼 지불 신축성
9. = 프로그래밍 가능한 플랫폼
10. 프로그램밍이 가능하다면 자동화 역시 가능
11. 11.6s 신규 코드가 반영되는 속도 (주중) 1,079 한시간 동안 최대 업데이트 횟수 10,000 동시에 업데이트가 발생하는 호스트 수 30,000 동시에 업데이트가 발생하는 최대 호스트 수 AMAZON.COM 연속 배포 (in 2011)
12. 소프트웨어 배포 ≠ 제품 출시
13. 같은 일 두번 하지 말자 Don’t re:invent the wheel
14. DevOps
15. DevOps? • « DevOps란 서비스의 라이프 사이클 관리를 위해 운영과 개발의 양쪽 엔지니어가 함께 협업 하는 모델 » - theagileadmin.com
16. 선택 가능한 다양한 옵션 • Configuration Management Systems – Puppet – Chef – Saltstack • Deployment Frameworks – CodeDeploy – AWS Elastic Beanstalk – AWS OpsWorks – Ansible – Fabric – Capistrano • Infrastructure Management – CloudFormation • Containers – Amazon EC2 Container Service
17. Bootstrapping
18. 이미지 생성 자동 구성 시간이 소요되는 설정 (startup time) 거의 변경되지 않는 설정 (less change management) Bootstrapping
19. 연속 배포 (latest code) 환경 종속적 요소 (dev-test-prod) Bootstrapping 이미지 생성 자동 구성
20. Continuous Integration
21. Continuous Integration? • 코드의 변경 사항이 자동으로 서비스에 배포 – Unit / Mock 테스트 완료 후 • 코드의 변경과 배포를 하나의 덩어리로 처리하는 대신 변경 발생시 마다 지속적으로 배포 • 버그의 빠른 발견 • 자동화된 배포 • 신속한 개발과 배포를 가능하게 함
22. SOURCE CODE REPOSITORY PROJECT MANAGEMENT SERVER CONTINUOUS INTEGRATION SERVER 개발자 PICK TASKS SUBMIT CODE SCHEDULE BUILD RECURRENT BUILDS CODE FETCHCODE QUALITY TESTS TEST RESULTS BUILD OUTPUT DOCS BINARIES & PACKAGES DEV FACING NOTIFICATIONS CLOUDFORMATION AMIS or CONTAINERS
23. SOURCE CODE REPOSITORY DNS CONTINUOUS INTEGRATION SERVER PROJECT MANAGEMENT SERVER BUILDS
24. PAIN POINTS • Unit 테스트의 비 종료 • MOCK 테스트의 메인터넌스 • 고 비용의 테스트 환경 • 테스트 환경 ≠ 실서비스 환경 • 배포 주기
25. 소프트웨어 개발 라이프사이클 10/13/14 26 MonitorProvisionDeployTestBuildCode AWS Elastic Beanstalk AWS OpsWorks Amazon CloudWatch AWS CloudFormation ?
26. AWS code 서비스 AWS CodeCommit 곧 출시 됩니다 AWS CodePipeline 곧 출시 됩니다 AWS CodeDeploy 절찬리 판매중
27. Source Control 아마존 S3 위에서 서비스되는 사설 Git 코드 저장소 • Git 완벽 호환 (기존의 도구 그대로 사용 가능) • 클라우드 사용의 잇점을 모두 도입 가능 (확장성, 내구성, 신뢰성, 사용량 기반의 저렴한 과금 체계) • 저장소의 크기 제한 없음(바이너리도 마음껏 저장) • 온라인 도구 제공 – 코드 확인, 수정, diff 10/13/14 28
28. Same Git experience $ git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli Cloning into 'aws-cli'... Receiving objects: 100% (16032/16032), 5.55 MiB | 1.25 MiB/s, done. Resolving deltas: 100% (9900/9900), done. Checking connectivity... done. $ nano README.rst $ git commit -am 'updated README' [master 4fa0318] updated README 1 file changed, 1 insertion(+) $ git push Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: To https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli 4dacd6d..4fa0318 master -> master
29. Continuous Delivery 커스터마이즈 가능한 빌드, 테스트를 포함한 배포 자동화 • 커스텀된 배포 자동화 흐름을 한눈에 확인 (source build beta gamma prod) • 자동 빌드, 테스트, 그리고 배포 • 커스텀 정책, 승인 및 게이트 구성이 가능 • 3rd party 도구 또는 커스텀 도구와 연동 가능 10/13/14 30
30. Deployment EC2 인스턴스 그룹에 소프트웨어 업데이트를 조정 • 다운타임 없이 업데이트 가능 - 롤링 업데이트 • Health check 와 함께 배포하여 손쉬운 Rollback • 오토 스케일 연동 • 어떠한 어플리케이션과도 연동 가능 • 기존의 설정 도구와 함께 연동 가능 (Bash, Powershell, Chef, Puppet…) 10/13/14 32
31. 9/25/14 Slides not intended for 33
32. Cloud software development lifecycle 10/13/14 34 MonitorProvisionDeployTestBuildCode AWS Elastic Beanstalk AWS OpsWorks CloudWatchCloudFormationCodeDeploy CodeCommit CodePipeline
33. CODECOMMIT DNS CODEPIPELINE PROJECT MANAGEMENT SERVER BUILDS
34. CONTINUOUS DEPLOYMENT 연속 배포 작은 코드의 변경이라도 지속적으로 서비스 시스템에 배포/반영하는것을 이르는 말
35. 필수 요소 = 반복
36. ITERATION (반복) = 사용자를 위해 지속적으로 시스템을 더 향상된 형태로 수정
37. © 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved AWS CLOUDFORMATION 스택 기반 배포 서비스
38. CLOUDFORMATION TEMPLATE
39. 기본 워크 플로우 디자인 인프라 템플릿 생성 어플리케이션 코드 생성 스택 생성 반복
40. Infrastructure-as-code workflow 코드 템플릿 버전 컨트롤 코드 리뷰 개선 “It’s all software”
41. Headers Parameters Mappings Resources Outputs
42. { "Description" : "Create RDS with username and password", "Resources" : { "MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "500", "DBInstanceClass" : "db.m1.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : "MyName", "MasterUserPassword" : "MyPassword" } } } }
43. "AWS::CloudFormation::Init" : { "config" : { "packages" : { "yum" : { "mysql" : [], "mysql-server" : [], "httpd" : [], "php" : [], "php-mysql" : [] } }, "sources" : { "/var/www/html" : "https://s3.amazonaws.com/my-builds/build-v4.zip" } }
44. { "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type" : "String" } }, }
45. CLOUDFORMATION TEMPLATE PROCEDURAL DEFINITION 생성 KNOWN CONFIGURATION 코드 저장소에 템플릿을 저장하여 관리 PARAMETER DRIVEN 사용자가 원하는 형태로 동적인 템플릿 구성 가능 COLLABORATION 다른 사람들과 파일만 공유하면 됨
46. 어플리케이션 버전 관리 + 인프라 버전 관리
47. CLOUDFORMATION TEMPLATE
48. © 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved AWS OpsWorks 어플리케이션 라이프사이클 관리 서비스
49. AWS OpsWorks • 어플리케이션 라이프사이클 관리 서비스 – 빠르고 안전한 배포 구성 – 복잡한 인프라에 대한 확장, 관리, 모델링 등을 자동화 – 기본 구성을 사용하여 쉽게 사용 가능 – 추가 비용 없음
50. OpsWorks의 기본 구조 EC2 인스턴스의 OpsWorks Agent OpsWorks talks with
51. OpsWorks 기본 구조 OpsWorks에 정의된 일련의 명령을 다운로드, Agent에서 Chef solo(Chef Zero)에서 레시피를 실행 EC2 인스턴스의 OpsWorks Agent Chef 11.10에서 Chef Client의 local mode
52. OpsWorks 요구사항 • Amazon Linux 또는 Ubuntu 12.04LTS,14.04LTS 기반 – 사용자가 생성한 AMI 역시 사용 가능 • Chef 버전 0.9, 11.4, 11.10 지원 • VPC 지원 – Default VPC, Customer VPC 모두 사용 가능 • ELB, RDS, CloudFormation, CloudTrail 지원 • 신규로 구동한 인스턴스에서 OpsWorks endpoint 에 접근 하도록 구성 가능
53. OpsWorks 사용 방법 • AWS 관리 콘솔 • AWS SDK • AWS CLI • OpsWorks Agent CLI – OpsWorks에서 시작된 인스턴스에 SSH로 로그인하여 agent 전용 명령어를 실행
54. 첫번째 인스턴스를 추가 App 서버 Setup Deploy Configure Execute Recipe Shutdown
55. 첫번째 인스턴스를 시작하면 Setup이 실행 App서버를 시작 App 서버 Setup Deploy Configure Execute Recipe Shutdown
56. Setup 실행 후 Deploy가 자동으로 실행 App 서버를 시작 App 서버 Setup Deploy Configure Execute Recipe Shutdown
57. 인스턴스가 online되면 Configure가 실행 App 서버를 시작 App 서버 Setup Deploy Configure Execute Recipe Shutdown
58. 데이터베이스 인스턴스 추가 App 서버 시작 App 서버 DB 서버 Setup Deploy Configure Execute Recipe Shutdown
59. Setup, Deploy 자동 수행 App 서버 시작 App 서버 DB 서버 App 서버 DB 서버 시작 Setup Deploy Configure Execute Recipe Shutdown
60. DB 서버가 online되면 스택의 모든 인스턴스에서 Configure 가 수행됨 App 서버 시작 App 서버 DB 서버 DB 서버 시작 Setup Deploy Configure Execute Recipe Shutdown
61. 인스턴스를 추가 App 서버 시작 App 서버 DB 서버 App 서버 DB 서버 시작 Setup Deploy Configure Execute Recipe Shutdown
62. Setup, Deploy 가 자동 실행 App 서버 시작 App 서버 DB 서버 App 서버 DB 서버 시작 Setup Deploy Configure Execute Recipe Shutdown App 서버 시작
63. 새로운 인스턴스가 online이 되면 스택의 모든 인스턴스에서 configure가 실행됨 App 서버 시작 App 서버 DB 서버 App 서버 DB 서버 시작 Setup Deploy Configure Execute Recipe Shutdown App 서버 시작
64. 수동 배포 App 서버 시작 App 서버 DB 서버 App 서버 DB 서버 시작 Setup Deploy Configure Execute Recipe Shutdown App 서버 시작 수동 배포 실행
65. 레시피 수동 실행 App 서버 시작 DB 서버 시작 Setup Deploy Configure Execute Recipe Shutdown App 서버 시작 수동 배포 실행 레시피 실행 App 서버 DB 서버 App 서버
66. 인스턴스 중지 App 서버 시작 App 서버 DB 서버 App 서버 DB 서버 시작 Setup Deploy Configure Execute Recipe Shutdown App 서버 시작 수동 배포 실행 레시피 실행 App 서버 종료
67. 인스턴스가 상태가 변경되면 Configure가 실행 Setup Deploy Configure Execute Recipe Shutdown App 서버 시작 App 서버 DB 서버 App 서버 DB 서버 시작 App 서버 시작 수동 배포 실행 레시피 실행 App 서버 종료
68. 시간 기반으로 인스턴스를 rolling update 예 • 매일 지정된 시간에 인스턴스를 시작 / 중지 – 각 인스턴스별로 시간을 늦추어 시작 / 중지 • 인스턴스가 부팅할 때마다 Setup, Deploy 라이프 사이클 이벤트에 의해 업데이트되어 최신 버전으로 어플리케이션을 구동
69. 배포한 App 의 rollback • 1회 이전의 버전의 App 으로도 rollback 이 가능 – 예:App의 업데이트를 3회 수행한 경우, 한번 롤백하면 두번째 버전으로, 두번 롤백하면 첫번째 버전으로 롤백 • OpsWorks는 기본적으로 5가지 버전의 App 을 보유 – 보유하고 있는 버전 수를 넘어 롤백을 시도하면 실패하게되고, 가장 오래된 버전으로 적용된다. – [:opsworks][:deploy_keep_releases]을 변경하여 전체 스택에서 유지할 버전의 수를 변경 가능 – 개별 App 버전의 보유 수를 변경하려면 [:deploy][‘appshortname’][:keep_releases]를 변경
70. CloudWatch 를 통한 모니터링 • OpsWorks는 CloudWatch를 사용하여 다음의 메트릭을 1분 단위로 모니터링 • 14개 메트릭 (무료 제공) – CPU(5) • Idle / User CPU / System CPU / IO Wait / nice(Unix) – 메모리 • 메모리 합계 / 사용중인 메모리 / swap / free / 메모리 버퍼 – 부하 (3) • 1분 / 5분 / 15분 단위 평균 부하 – 프로세스(1) • 프로세스의 수 • 인스턴스의 OS 레벨에서 얻을 수 있는 정보는 OpsWorks 에이전트가 수집하여 CloudWatch 서비스로 전송하여 얻어진다. – 이를 통해 메모리, 프로세스 같은 표준 CloudWatch 모니터링에선 얻을 수 없는 데이터도 확인할 수 있다.
71. CloudWatch를 사용한 OpsWorks 모니터링 각 레이어별 모니터링 인스턴스 모니터링
72. 데이터 기반 아키텍처
73. METRICS @ETSY
74. 모니터링 옵션 CloudWatch … and many more
75. CONTINUOUS DEPLOYMENT (배포의 연속) = CONTINUOUS EXPERIMENTATION (실험의 연속)
76. CONTINUOUS DEPLOYMENT (배포의 연속) = CONTINUOUS IMPROVEMENT (개선의 연속)
77. INNOVATE
78. SAN FRANCISCO
'정보공유' 카테고리의 다른 글
[정보] 2015 trend code 2 (0) | 2015.04.30 |
---|---|
[정보] [Marketing trend] 2015 Marketing Trend (0) | 2015.04.30 |
[정보] 클라우드 컴퓨팅 AWS(Amazon Web Services) (0) | 2015.04.29 |
[정보] AWS Summit Seoul 2015 - 국내 사례로 본 클라우드 운영 최적화 (0) | 2015.04.29 |
[정보] Apple Watch: Everything You Need To Know As A Marketer (0) | 2015.04.28 |
[정보][Korean,Apple watch review] 애플 워치 리뷰: 시계로서의 접근 (0) | 2015.04.28 |
[정보] 2015 Internet of Logistic Things / 2015 물류 사물인터넷 (0) | 2015.04.28 |
[정보] 고객전환을 유도하는 리타겟팅 광고 (0) | 2015.04.27 |