78
클라우드 춘추전국시대 서버 개발자 생존기 iFunFactory Inc. 장수원 [email protected]

클라우드 춘추전국시대 서버 개발자 생존기

Embed Size (px)

Citation preview

Page 1: 클라우드 춘추전국시대 서버 개발자 생존기

클라우드 춘추전국시대 서버 개발자 생존기

iFunFactory Inc. 장수원 [email protected]

Page 2: 클라우드 춘추전국시대 서버 개발자 생존기

춘추전국시대?

Page 3: 클라우드 춘추전국시대 서버 개발자 생존기

출처: https://ko.wikipedia.org/wiki/%EC%B6%98%EC%B6%94_%EC%8B%9C%EB%8C%80

Page 4: 클라우드 춘추전국시대 서버 개발자 생존기

출처: http://www.meetup.com/fr/Expatriates-in-Paris/events/101742722/

Page 5: 클라우드 춘추전국시대 서버 개발자 생존기

생존?

Page 6: 클라우드 춘추전국시대 서버 개발자 생존기

출처: 영화 Cast Away

Page 7: 클라우드 춘추전국시대 서버 개발자 생존기

다루는 것

• 여러 종류 클라우드를 통합 관리할 때

• 만났던 문제점과 해결책

Page 8: 클라우드 춘추전국시대 서버 개발자 생존기

다루지 않는 것

• 클라우드 섞어 쓰기 (하이브리드/인터 클라우드)

• 특정 클라우드 사용법

• (게임) 서버 만드는 법

Page 9: 클라우드 춘추전국시대 서버 개발자 생존기

춘추 전국 시대라고는 했지만...

Page 10: 클라우드 춘추전국시대 서버 개발자 생존기

AWS만 쓰면 안 되나요?

Page 11: 클라우드 춘추전국시대 서버 개발자 생존기

출처: Gartner: Magic Quadrant for Cloud Infrastructure as a Service, Worldwide 보고서, Lydia Leong 외, 2015년 5월 18일 발행

Page 12: 클라우드 춘추전국시대 서버 개발자 생존기

AWS > 10 × 14 다른 클라우드"AWS’s IaaS cloud is ten times larger than the next 14

competitors in the MQ combined!”

출처: http://www.networkworld.com/article/2925186/cloud-computing/gartner-amazon-s-cloud-is-10x-bigger-than-its-next-14-competitors-combined.html

Page 13: 클라우드 춘추전국시대 서버 개발자 생존기

그럼에도 불구하고 다른 클라우드가 필요한 이유?

Page 14: 클라우드 춘추전국시대 서버 개발자 생존기

지연시간

Page 15: 클라우드 춘추전국시대 서버 개발자 생존기

AWS vs. KT ucloud bizroun

d-trip 시

간 평

균 (ms)

0

12.5

25

37.5

50

ping -c 30

11.16 ms

40.466 ms

AWS Tokyo KT ucloud biz

Page 16: 클라우드 춘추전국시대 서버 개발자 생존기

AWS Tokyo → KT ucloud biz 게임 서버 랙 해결

Page 17: 클라우드 춘추전국시대 서버 개발자 생존기

실시간성 + 지연시간 서비스 지역의 클라우드 필요

Page 18: 클라우드 춘추전국시대 서버 개발자 생존기

다만 ...

Page 19: 클라우드 춘추전국시대 서버 개발자 생존기

가격

Page 20: 클라우드 춘추전국시대 서버 개발자 생존기

AWS vs. DigitalOcean

0

0.075

0.15

0.225

0.3

2 CPU,(3.75G/4G RAM),(별도/60G SSD) 4 CPU,(7.5G/8G RAM),(별도/80G SSD)

US$0.119

US$0.060

US$0.276

US$0.138

AWS DigitalOcean

Page 21: 클라우드 춘추전국시대 서버 개발자 생존기

다양한 클라우드를 쉽게 통합 관리하려면?

Page 22: 클라우드 춘추전국시대 서버 개발자 생존기

클라우드 통합 관리

• 서버 인스턴스 및 인프라 생성 및 설정

• 서버 인스턴스 환경 설정

• 서버 인스턴스에 애플리케이션 배포

Page 23: 클라우드 춘추전국시대 서버 개발자 생존기

자동화!

Page 24: 클라우드 춘추전국시대 서버 개발자 생존기

변하는 것/변하지 않는 것분리

Page 25: 클라우드 춘추전국시대 서버 개발자 생존기

변하는 것 / 변하지 않는 것

• 서버 인스턴스 및 인프라 생성 ✖ 클라우드 벤더마다 API 상이

• 서버 인스턴스 환경 설정 ✔ 운영체제가 같다면 클라우드 벤더에 독립적

• 서버 인스턴스에 애플리케이션 배포✔ 클라우드 벤더에 독립적

Page 26: 클라우드 춘추전국시대 서버 개발자 생존기

멀티 클라우드 사용 전략

• 서버 인스턴스 및 인프라 생성 → 벤더 API

• 서버 환경 설정 및 패키지 배포 → 단일화

Page 27: 클라우드 춘추전국시대 서버 개발자 생존기

다양한 클라우드 API동일한 인터페이스?

문제 #1

Page 28: 클라우드 춘추전국시대 서버 개발자 생존기

Apache Libcloudhttps://libcloud.apache.org

Page 29: 클라우드 춘추전국시대 서버 개발자 생존기

Apache Libcloud

• AWS, Azure, Google Compute Engine 등을 포함한30개 이상의 클라우드 서비스 지원

• KT ucloud biz 지원

• 공통된 기능은 같은 인터페이스로 제공해 편리

Page 30: 클라우드 춘추전국시대 서버 개발자 생존기
Page 31: 클라우드 춘추전국시대 서버 개발자 생존기

Libcloud 사용하면 OK?

Page 32: 클라우드 춘추전국시대 서버 개발자 생존기

클라우드 사업자 독자적기능을 지원하지 못 함

Page 33: 클라우드 춘추전국시대 서버 개발자 생존기

예 - AWS VPC

• AWS VPC(virtual private cloud) → 임의로 독립적인 네트워크 생성 → Isolation

• libcloud → VPC 생성/삭제 불가

Page 34: 클라우드 춘추전국시대 서버 개발자 생존기

예 - ucloud biz 로드밸런서

• libcloud 가 load balancer 인터페이스 제공

• ucloud biz 미지원

Page 35: 클라우드 춘추전국시대 서버 개발자 생존기

libcloud 만으로는 부족

Page 36: 클라우드 춘추전국시대 서버 개발자 생존기

클라우드 구성 방식의미묘한 차이

문제 #2

Page 37: 클라우드 춘추전국시대 서버 개발자 생존기

• AWS - 각 인스턴스에 security group 을 부착

• ucloud biz - 퍼블릭 IP 에 방화벽 룰 설정

예 - Access Control List

Page 38: 클라우드 춘추전국시대 서버 개발자 생존기

예 - 퍼블릭 IP 할당

• AWS - 인스턴스에 퍼블릭 IP 할당

• ucloud biz - 프로젝트에 퍼블릭 IP 를 할당하고 원하는 서버 인스턴스로 트래픽 포워딩

Page 39: 클라우드 춘추전국시대 서버 개발자 생존기

예 - 로드밸런서

• AWS - 별 다른 설정 없이 서버 인스턴스를 로드밸런서에 부착

• ucloud biz - 퍼블릭 IP 를 로드밸런서에 부착

Page 40: 클라우드 춘추전국시대 서버 개발자 생존기

생각보다 유사하지 않다

Page 41: 클라우드 춘추전국시대 서버 개발자 생존기

해결책 (#1, #2)

• 기반 클라우드에 대한 지식

• 벤더 독자 API 를 사용하되, 전체 구성은 통일

Page 42: 클라우드 춘추전국시대 서버 개발자 생존기

지원하는 서비스범위의 차이

문제 #3

Page 43: 클라우드 춘추전국시대 서버 개발자 생존기

한번은 이런 일도...

Page 44: 클라우드 춘추전국시대 서버 개발자 생존기

• 나: DigitalOcean 로드밸런서 서비스 연동해 주세요. (당연히 있겠거니...)

• JK: DigitalOcean 에는 로드밸런서 서비스가 없는데요?

• 나: 아. 네.

Page 45: 클라우드 춘추전국시대 서버 개발자 생존기

튜토리얼만 있을 뿐...

Page 46: 클라우드 춘추전국시대 서버 개발자 생존기

지원하는 서비스 차이

AWS ucloud biz DigitalOcean

Instance 제어 및 관리 ✔ (❨Opsworks)❩ ✘ ✘

로드밸런서 ✔ (❨ELB)❩ ✔ ✘

데이터베이스 ✔ (❨RDS)❩ ✔ ✘

캐시 서버 ✔ (❨ElastiCache)❩ ✘ ✘

Page 47: 클라우드 춘추전국시대 서버 개발자 생존기

당연히 AWS 가 제일 많다

Page 48: 클라우드 춘추전국시대 서버 개발자 생존기

Page 49: 클라우드 춘추전국시대 서버 개발자 생존기

AWS만의 기능을 쓰면편하지만...

Page 50: 클라우드 춘추전국시대 서버 개발자 생존기

• 고비용: 직접 설치해 사용할 때 보다 당연히 비싸다

• Lock-in: 특정 클라우드에 종속

Page 51: 클라우드 춘추전국시대 서버 개발자 생존기

특정 클라우드와죽어도 같이 죽고 살아도 같이 살기?

해결책 #3

Page 52: 클라우드 춘추전국시대 서버 개발자 생존기

가능한 범용적인 stack 사용로드밸런서, RDBMS 서비스 → 직접 구성 가능

해결책 #3

Page 53: 클라우드 춘추전국시대 서버 개발자 생존기

해결책 - 예

• DigitalOcean 로드밸런서의 경우

• 서버 인스턴스 생성 + HAProxy(소프트웨어 로드밸런서)

• API 는 동일하게 유지

• HAProxy 는 실제 운영중인 게임 서버에서 사용중(DNS RR 과 함께)

Page 54: 클라우드 춘추전국시대 서버 개발자 생존기

AWS (ELB)

ucloud biz 로드밸런서

DigitalOcean 서버

agent HAProxy

API 서버

create remove

add_instances remove_instances

Page 55: 클라우드 춘추전국시대 서버 개발자 생존기

서버, 인프라 다 띄웠으니.. 서버 환경 설정!

Page 56: 클라우드 춘추전국시대 서버 개발자 생존기

설정 자동화 도구 사용

Page 57: 클라우드 춘추전국시대 서버 개발자 생존기

설정 자동화 도구 사용하려면...

• 통합 관리를 위한 마스터 서버 설정

• 서버 인스턴스 추가→ 해당 도구의 에이전트를 설치/설정

• 에이전트와 마스터 서버가 정상 연결 → 모든 시스템 관리 작업은 마스터 서버를 통해 가능

Page 58: 클라우드 춘추전국시대 서버 개발자 생존기

에이전트 설치도 자동화

Page 59: 클라우드 춘추전국시대 서버 개발자 생존기

CloudInit http://cloudinit.readthedocs.org/

Page 60: 클라우드 춘추전국시대 서버 개발자 생존기

클라우드시스템 서버 인스턴스

user-data

서버 인스턴스 생성 시

부팅 과정에서 CloudInit 은 해당 user-data 에 따라

서버에 다양한 설정을 해준다

Page 61: 클라우드 춘추전국시대 서버 개발자 생존기

CloudInit 하는 일

• 패키지 저장소 추가

• 사용자 추가 / 삭제

• 최초 부팅 시 특정 커맨드 실행

• SSH key 설정

• 최초 운영체제 설치 시 필요한 작업 대부분

Page 62: 클라우드 춘추전국시대 서버 개발자 생존기

에이전트 설치 자동화

• 에이전트 설치 명령 + 마스터 서버 주소 설정 → user-data 생성

• 서버 인스턴스 생성 API 호출 시 user-data 전달

• 이후 모든 관리 작업은 마스터에서

Page 63: 클라우드 춘추전국시대 서버 개발자 생존기

간단하게 끝날 듯 했으나 ...

Page 64: 클라우드 춘추전국시대 서버 개발자 생존기

ucloud biz 에서 작동 안함

Page 65: 클라우드 춘추전국시대 서버 개발자 생존기

원인 및 해결

• CloudInit 벤더 제공 운영체제 이미지 설치 X

• 해결 : 수동으로 이미지에 CloudInit 을 설치→ 해당 이미지 사용

Page 66: 클라우드 춘추전국시대 서버 개발자 생존기

잘 작동하는 듯 하다가 ... 다시 문제 발생

Page 67: 클라우드 춘추전국시대 서버 개발자 생존기

원인 및 해결

• AWS 과는 달리,user-data 크기가 4KB 초과 되면 문제 발생

• 해결: 쓸데 없는 정보를 줄이고, 데이터를 압축 → cloud-init 압축 지원

Page 68: 클라우드 춘추전국시대 서버 개발자 생존기

이후행복했을까요?

Page 69: 클라우드 춘추전국시대 서버 개발자 생존기

간헐적으로 문제 발생

Page 70: 클라우드 춘추전국시대 서버 개발자 생존기

문제 및 해결책

• github 의 ucloud biz Python 라이브러리가 ‘/‘ 를 잘못 인코딩해서 발생한 문제

• API 인자에 ‘/‘ 가 들어가는 경우만 발생 (예: CIDR 주소: 0.0.0.0/0)

• user-data base64 인코딩도 url safe 인코딩으로 변경

Page 71: 클라우드 춘추전국시대 서버 개발자 생존기

교훈

Page 72: 클라우드 춘추전국시대 서버 개발자 생존기

• 라이브러리/도구가 있어도 잡다하게 신경 쓸 부분이 많다

• 충분히 써보기 전까지는 안 되는 거다

Page 73: 클라우드 춘추전국시대 서버 개발자 생존기

전체 그림

Page 74: 클라우드 춘추전국시대 서버 개발자 생존기

AWS

ucloudbiz

DigitalOcean

Rackspace

통합 API 서버

대시보드

마스터 서버

에이전트

Page 75: 클라우드 춘추전국시대 서버 개발자 생존기

요약

Page 76: 클라우드 춘추전국시대 서버 개발자 생존기

• 특정 클라우드와 동고동락하거나

• Libcloud 사용해서 제한된 기능만 사용하거나

• 벤더 API 는 활용하되, 통합된 시스템을 구성해서

• 다양한 클라우드를 편하게 사용합시다

Page 77: 클라우드 춘추전국시대 서버 개발자 생존기

감사합니다.