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.

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

아이펀팩토리 게임 서버 개발 세미나에서 발표한 자료입니다.

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

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

  1. 1. 클라우드 춘추전국시대 서버 개발자 생존기 iFunFactory Inc. 장수원 sw.jang@ifunfactory.com
  2. 2. 춘추전국시대?
  3. 3. 출처: https://ko.wikipedia.org/wiki/%EC%B6%98%EC%B6%94_%EC%8B%9C%EB%8C%80
  4. 4. 출처: http://www.meetup.com/fr/Expatriates-in-Paris/events/101742722/
  5. 5. 생존?
  6. 6. 출처: 영화 Cast Away
  7. 7. 다루는 것 • 여러 종류 클라우드를 통합 관리할 때 • 만났던 문제점과 해결책
  8. 8. 다루지 않는 것 • 클라우드 섞어 쓰기 (하이브리드/인터 클라우드) • 특정 클라우드 사용법 • (게임) 서버 만드는 법
  9. 9. 춘추 전국 시대라고는
 했지만...
  10. 10. AWS만 쓰면 안 되나요?
  11. 11. 출처: Gartner: Magic Quadrant for Cloud Infrastructure as a Service, Worldwide 보고서, Lydia Leong 외, 2015년 5월 18일 발행
  12. 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
  13. 13. 그럼에도 불구하고 다른 클라우드가 필요한 이유?
  14. 14. 지연시간
  15. 15. AWS vs. KT ucloud biz round-trip시간평균(ms) 0 12.5 25 37.5 50 ping -c 30 11.16 ms 40.466 ms AWS Tokyo KT ucloud biz
  16. 16. AWS Tokyo → KT ucloud biz 게임 서버 랙 해결
  17. 17. 실시간성 + 지연시간 서비스 지역의 클라우드 필요
  18. 18. 다만 ...
  19. 19. 가격
  20. 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
  21. 21. 다양한 클라우드를 쉽게 통합 관리하려면?
  22. 22. 클라우드 통합 관리 • 서버 인스턴스 및 인프라 생성 및 설정 • 서버 인스턴스 환경 설정 • 서버 인스턴스에 애플리케이션 배포
  23. 23. 자동화!
  24. 24. 변하는 것/변하지 않는 것 분리
  25. 25. 변하는 것 / 변하지 않는 것 • 서버 인스턴스 및 인프라 생성
 ✖ 클라우드 벤더마다 API 상이 • 서버 인스턴스 환경 설정
 ✔ 운영체제가 같다면 클라우드 벤더에 독립적 • 서버 인스턴스에 애플리케이션 배포
 ✔ 클라우드 벤더에 독립적
  26. 26. 멀티 클라우드 사용 전략 • 서버 인스턴스 및 인프라 생성 → 벤더 API • 서버 환경 설정 및 패키지 배포 → 단일화
  27. 27. 다양한 클라우드 API
 동일한 인터페이스? 문제 #1
  28. 28. Apache Libcloud https://libcloud.apache.org
  29. 29. Apache Libcloud • AWS, Azure, Google Compute Engine 등을 포함한
 30개 이상의 클라우드 서비스 지원 • KT ucloud biz 지원 • 공통된 기능은 같은 인터페이스로 제공해 편리
  30. 30. Libcloud 사용하면 OK?
  31. 31. 클라우드 사업자 독자적
 기능을 지원하지 못 함
  32. 32. 예 - AWS VPC • AWS VPC(virtual private cloud) 
 → 임의로 독립적인 네트워크 생성
 → Isolation • libcloud → VPC 생성/삭제 불가
  33. 33. 예 - ucloud biz 로드밸런서 • libcloud 가 load balancer 인터페이스 제공 • ucloud biz 미지원
  34. 34. libcloud 만으로는 부족
  35. 35. 클라우드 구성 방식의
 미묘한 차이 문제 #2
  36. 36. • AWS - 각 인스턴스에 security group 을 부착 • ucloud biz - 퍼블릭 IP 에 방화벽 룰 설정 예 - Access Control List
  37. 37. 예 - 퍼블릭 IP 할당 • AWS - 인스턴스에 퍼블릭 IP 할당 • ucloud biz - 프로젝트에 퍼블릭 IP 를 할당하고 원하는 서버 인스턴스로 트래픽 포워딩
  38. 38. 예 - 로드밸런서 • AWS - 별 다른 설정 없이 서버 인스턴스를 로드밸런서에 부착 • ucloud biz - 퍼블릭 IP 를 로드밸런서에 부착
  39. 39. 생각보다 유사하지 않다
  40. 40. 해결책 (#1, #2) • 기반 클라우드에 대한 지식 • 벤더 독자 API 를 사용하되, 전체 구성은 통일
  41. 41. 지원하는 서비스
 범위의 차이 문제 #3
  42. 42. 한번은 이런 일도...
  43. 43. • 나: DigitalOcean 로드밸런서 서비스 연동해 주세요.
 (당연히 있겠거니...) • JK: DigitalOcean 에는 로드밸런서 서비스가 없는데요? • 나: 아. 네.
  44. 44. 튜토리얼만 있을 뿐...
  45. 45. 지원하는 서비스 차이 AWS ucloud biz DigitalOcean Instance 제어 및 관리 ✔ (❨Opsworks)❩ ✘ ✘ 로드밸런서 ✔ (❨ELB)❩ ✔ ✘ 데이터베이스 ✔ (❨RDS)❩ ✔ ✘ 캐시 서버 ✔ (❨ElastiCache)❩ ✘ ✘
  46. 46. 당연히 AWS 가 제일 많다
  47. 47.
  48. 48. AWS만의 기능을 쓰면
 편하지만...
  49. 49. • 고비용: 직접 설치해 사용할 때 보다 당연히 비싸다 • Lock-in: 특정 클라우드에 종속
  50. 50. 특정 클라우드와
 죽어도 같이 죽고 살아도 같이 살기? 해결책 #3
  51. 51. 가능한 범용적인 stack 사용 로드밸런서, RDBMS 서비스 → 직접 구성 가능 해결책 #3
  52. 52. 해결책 - 예 • DigitalOcean 로드밸런서의 경우 • 서버 인스턴스 생성 + HAProxy(소프트웨어 로드밸런서) • API 는 동일하게 유지 • HAProxy 는 실제 운영중인 게임 서버에서 사용중(DNS RR 과 함께)
  53. 53. AWS (ELB) ucloud biz 로드밸런서 DigitalOcean 서버 agent HAProxy API 서버 create remove add_instances remove_instances …
  54. 54. 서버, 인프라 다 띄웠으니.. 서버 환경 설정!
  55. 55. 설정 자동화 도구 사용
  56. 56. 설정 자동화 도구 사용하려면... • 통합 관리를 위한 마스터 서버 설정 • 서버 인스턴스 추가
 → 해당 도구의 에이전트를 설치/설정 • 에이전트와 마스터 서버가 정상 연결
 → 모든 시스템 관리 작업은 마스터 서버를 통해 가능
  57. 57. 에이전트 설치도 자동화
  58. 58. CloudInit http://cloudinit.readthedocs.org/
  59. 59. 클라우드
 시스템 서버 인스턴스 user-data 서버 인스턴스 생성 시 부팅 과정에서 CloudInit 은 해당 user-data 에 따라 서버에 다양한 설정을 해준다
  60. 60. CloudInit 하는 일 • 패키지 저장소 추가 • 사용자 추가 / 삭제 • 최초 부팅 시 특정 커맨드 실행 • SSH key 설정 • 최초 운영체제 설치 시 필요한 작업 대부분
  61. 61. 에이전트 설치 자동화 • 에이전트 설치 명령 + 마스터 서버 주소 설정
 → user-data 생성 • 서버 인스턴스 생성 API 호출 시 user-data 전달 • 이후 모든 관리 작업은 마스터에서
  62. 62. 간단하게 끝날 듯 했으나 ...
  63. 63. ucloud biz 에서 작동 안함
  64. 64. 원인 및 해결 • CloudInit 벤더 제공 운영체제 이미지 설치 X • 해결 : 수동으로 이미지에 CloudInit 을 설치
 → 해당 이미지 사용
  65. 65. 잘 작동하는 듯 하다가 ... 다시 문제 발생
  66. 66. 원인 및 해결 • AWS 과는 달리,
 user-data 크기가 4KB 초과 되면 문제 발생 • 해결: 쓸데 없는 정보를 줄이고, 데이터를 압축
 → cloud-init 압축 지원
  67. 67. 이후
 행복했을까요?
  68. 68. 간헐적으로 문제 발생
  69. 69. 문제 및 해결책 • github 의 ucloud biz Python 라이브러리가 ‘/‘ 를 잘못 인코딩해서 발생한 문제 • API 인자에 ‘/‘ 가 들어가는 경우만 발생
 (예: CIDR 주소: 0.0.0.0/0) • user-data base64 인코딩도 url safe 인코딩으로 변경
  70. 70. 교훈
  71. 71. • 라이브러리/도구가 있어도 잡다하게 신경 쓸 부분이 많다 • 충분히 써보기 전까지는 안 되는 거다
  72. 72. 전체 그림
  73. 73. AWS ucloud
 biz DigitalOcean Rackspace 통합 API 서버 대시보드 마스터 서버 ⋮ 에이전트
  74. 74. 요약
  75. 75. • 특정 클라우드와 동고동락하거나 • Libcloud 사용해서 제한된 기능만 사용하거나 • 벤더 API 는 활용하되, 통합된 시스템을 구성해서 • 다양한 클라우드를 편하게 사용합시다
  76. 76. 감사합니다.
  77. 77. Q & A sw.jang@ifunfactory.com

×