AWS로 불꺼온 나날들

65
AWS 불꺼온 나날들

description

AWS 한국 사용자모임 세미나 김슬

Transcript of AWS로 불꺼온 나날들

Page 1: AWS로 불꺼온 나날들

AWS로 불꺼온 나날들

Page 2: AWS로 불꺼온 나날들

개요• 좌충우돌 경험담

• Not! 체계적인 방법 설명서

• 응급처치 임시방편

• Not! 아름다운 최선의 설계

Page 3: AWS로 불꺼온 나날들
Page 4: AWS로 불꺼온 나날들

발표자 소개• 김슬 lexifdev

• 개발자

• Not! 시스템 엔지니어

• Not! 서버관리자

• 구글링으로 연명

Page 5: AWS로 불꺼온 나날들
Page 6: AWS로 불꺼온 나날들

첫번째 화재

Page 7: AWS로 불꺼온 나날들

옛날 옛날 한 옛날에.. 착한 서버 한대가 살고 있었어요.

Page 8: AWS로 불꺼온 나날들

Apache (w PHP) MySQL

Page 9: AWS로 불꺼온 나날들

그러던 어느날..

Page 10: AWS로 불꺼온 나날들

사용자가 급증.. ????

Page 11: AWS로 불꺼온 나날들

• SBS 8시 뉴스

Page 12: AWS로 불꺼온 나날들

FIRE!!!!!

Page 13: AWS로 불꺼온 나날들

lexifdev: “저기.. 서버 추가 좀..”

호스트업체: “일주일은 기다리셔야..”

Page 14: AWS로 불꺼온 나날들

OTL ‘일주일.. 일주일만 버티면..’

Page 15: AWS로 불꺼온 나날들

AWS!

Page 16: AWS로 불꺼온 나날들

AWS!• 일단 당장 추가할 수 있고..

• 750시간 무료 써봤는데 잘 돌아갔던것 같애..

• 다소 멀긴 하지만.. (Tokyo생기기 전..)

• 지금 그런거 따질 때가 아니다!

Page 17: AWS로 불꺼온 나날들

DB서버 부터 분리

Page 18: AWS로 불꺼온 나날들
Page 19: AWS로 불꺼온 나날들

IDC (한국)

AWS (싱가폴)

Page 20: AWS로 불꺼온 나날들

ㅋ 아름답진 않지만.. 일단 버팀

Page 21: AWS로 불꺼온 나날들

그런데.. 사용자 계속 증가..

Page 22: AWS로 불꺼온 나날들

• SBS 8시 뉴스

• 네이버, 네이트 등 포털 메인

• 실시간 검색어 순위권

Page 23: AWS로 불꺼온 나날들

큐큐큐큐ㅠㅋㅋ큐ㅠ큐큐ㅠㅠㅠㅋ

Page 24: AWS로 불꺼온 나날들
Page 25: AWS로 불꺼온 나날들

IDC (한국)

AWS (싱가폴)

Page 26: AWS로 불꺼온 나날들

ㅋ…ㅠ 아름답진 않지만.. 일단 버팀

Page 27: AWS로 불꺼온 나날들

호스트업체: “서버..

입고됨..”

Page 28: AWS로 불꺼온 나날들

IDC (한국)

AWS (싱가폴)

Page 29: AWS로 불꺼온 나날들

수고했다 AWS..

Page 30: AWS로 불꺼온 나날들

돌아보면..• 처음부터 쓰던 상황이 아니라도 급하게 불끄는데 쓸만하다

!

• DNS 라운드 로빈보다 ELB를 쓸 걸..

• IP를 아껴서 써야..

Page 31: AWS로 불꺼온 나날들

두번째 화재

Page 32: AWS로 불꺼온 나날들

그러던 어느날.. Kak*o 플랫폼에

새 서비스를 출시하기로 하였어요..

Page 33: AWS로 불꺼온 나날들

얼마나 들어올까..? 예상보다 적으면 서버가 남아서 손해.. 예상보다 많으면 서비스 장애..

?

?

?

?

?

?

?

Page 34: AWS로 불꺼온 나날들

AWS!

Page 35: AWS로 불꺼온 나날들

Web (uwsgi)Web (uwsgi)Web (uwsgi)

ELB

Page 36: AWS로 불꺼온 나날들

DB는?

Page 37: AWS로 불꺼온 나날들

• Replication Master-Slave는 Write Scale하지 않음

Page 38: AWS로 불꺼온 나날들

• Sharding은 프로그램 수정이 많이 필요함

Page 39: AWS로 불꺼온 나날들

• MMM은 개발자가 구글로 튄 뒤로 관리 안됨

Page 40: AWS로 불꺼온 나날들

• MySQL Cluster는 JOIN 안됨

• + 흉흉한 소문들…

Page 41: AWS로 불꺼온 나날들

MySQL Galera Cluster• 멀티-마스터 클러스터

• 모든 노드에 읽기/쓰기 가능

• Write Scale

• 자동 멤버십 관리 (죽은 노드 알아서 빠짐)

!

• 곧.. ELB에 바로 물려서 쓸 수 있음

Page 42: AWS로 불꺼온 나날들

Web (uwsgi)DB (Galera)

Web (uwsgi)Web (uwsgi)

DB (Galera)ELB ELB

Page 43: AWS로 불꺼온 나날들

오픈 1주일간

가입자 수 100만+

Page 44: AWS로 불꺼온 나날들

….ㅋ….

Page 45: AWS로 불꺼온 나날들
Page 46: AWS로 불꺼온 나날들

Web (uwsgi)DB (Galera)

Web (uwsgi)Web (uwsgi)

DB (Galera)ELB ELB

Web (uwsgi)DB (Galera)

Web (uwsgi) DB (Galera)Web (uwsgi)

Web (uwsgi) DB (Galera)

……… …

……

Page 47: AWS로 불꺼온 나날들

ㅇ..어?

Page 48: AWS로 불꺼온 나날들

ec2 instance limit: 20개

!provisioned IOPS limit:

10000

Page 49: AWS로 불꺼온 나날들

Page 50: AWS로 불꺼온 나날들

… 몰랐음..

그래도 연락하면 거의 바로 다음날 풀어줌..

Page 51: AWS로 불꺼온 나날들

Web (uwsgi)DB (Galera)

Web (uwsgi)Web (uwsgi)

DB (Galera)ELB ELB

Web (uwsgi)DB (Galera)

Web (uwsgi) DB (Galera)Web (uwsgi)

Web (uwsgi) DB (Galera)Web (uwsgi)Web (uwsgi)Web (uwsgi)

Web (uwsgi)

Web (uwsgi)

DB (Galera)DB (Galera)DB (Galera)

DB (Galera)

Web (uwsgi)Web (uwsgi)Web (uwsgi)

Web (uwsgi)Web (uwsgi)

DB (Galera)DB (Galera)DB (Galera)DB (Galera)

DB (Galera)DB (Galera)

Page 52: AWS로 불꺼온 나날들

……..ㅋ!…. 아름답진 않지만.. 일단 버팀

Page 53: AWS로 불꺼온 나날들

돌아보면..• Galera는 생각없이 AWS에 물리기에 제법 쓸만

!

• Instance 제한 & PIOPS 제한 미리 늘려놔야..

• On-Demand 외의 Instance들도 잘 활용했어야 했는데..

Page 54: AWS로 불꺼온 나날들

More..• 서버 트래픽 몰리는 시간을 알려면 TV시간표를 봐라

• 돈 많이 나온다 싶으면 전화옴 “최적화 원하면 도와줌 ㅇㅇ”

Page 55: AWS로 불꺼온 나날들

세번째 화재

Page 56: AWS로 불꺼온 나날들

.. 또 신규 서비스를 출시하기로 했어요..

Page 57: AWS로 불꺼온 나날들

비밀이지만..• 두번째 화재 진압하는데 Memcached가 많이 사용됨

• Memcached는 기본적으로 ID/PW 없음..

• SASL이나 iptables로 어느정도 제한 할 수 는 있음

• ㅋ..

• ㅋㅋ..

• ㅇ..

Page 58: AWS로 불꺼온 나날들

VPC• 외부 연결과 분리된 서브넷 구성 가능

• Memcached 같은거 그냥 열어놔도 내부에서만 들어갈 수 있음

• (ELB는 연결 가능)

• IP 갯수 압박에서 벗어날 수 있음

Page 59: AWS로 불꺼온 나날들

Web

DB

WebWeb

DB

Worker (Celery)

Worker (Celery)Queue

NAT

ELB

ELB

Cache

Page 60: AWS로 불꺼온 나날들

오픈 ^^

Page 61: AWS로 불꺼온 나날들

오픈 ^^

Page 62: AWS로 불꺼온 나날들

Django 트랜잭션의 문제• 기본은 request시작하자 마자 걸고 끝날때 커밋

• autocommit 옵션은 사기 (항상 꺼져있고 에뮬레이션만 함)

• Django ORM 자체 캐싱 + REPEATABLE READ

방안• UPDATE 보다는 INSERT, atomic update query…

• 여기에 대한 자세한 내용은 Python Korea 컨퍼런스 때.. ^6;

Page 63: AWS로 불꺼온 나날들

SSH 연결조차 할 수 없다.. Bastion의 다운..

!

상위 인스턴스로 교체 그래도 안되면.. 기도..

Page 64: AWS로 불꺼온 나날들

돌아보면..• IP 요구하는 업체들 클라우드에 쓰는데 별 문제 없음

!

• High RPS서비스를 테스트 할 때는 High RPS상태에서..

• 자동화 하는데 들이는 시간을 아까워하지 마라..

• Bastion은 여럿 만들어 둬야..

• Django.. 너 어무해..