SlideShare a Scribd company logo
대규모 서비스를 설계하는 기술
- 중급(일반편)
강대명(charsyam@naver.com)
발표자 소개
● 오픈 프론티어 5기 파트타임(현)
● Data Engineer at Udemy(현)
● Software Engineer at Kakao(카카오 스토리)
● Software Engineer at Naver(네이버 메일)
● Software Engineer at Finaldata
How to build massive service for advance
배틀그라운드
How to build massive service for advance
Facebook
How to build massive service for advance
대용량 서비스 설계 방법
● SPOF 제거
● 오브젝트 스토어
● 데이터 샤딩
● 코디네이터
● Circuit Breaker
● 블루/그린 배포, 카나리 배포
● Feature Flag(Switch)
SPOF
SPOF
Single Point Of
Failure
SPOF
여기가 죽으면…
다 죽습니다.
이런 구조라면!!!
Web Browser
Mobile Apps
API Server DB
이런 구조라면!!!
Web Browser
Mobile Apps
API Server DB
API Server 가 죽으면?
Web Browser
Mobile Apps
API Server DB
DB 가 죽으면?
Web Browser
Mobile Apps
API Server DB
그래서 보통 이런 구조
Web Browser
Mobile Apps
API Server 1
API Server 2
DB
Primary
DB
Secondary
API Server 가 죽어도?
Web Browser
Mobile Apps
API Server 1
API Server 2
DB
Primary
DB
Secondary
DB 가 죽어도?
Web Browser
Mobile Apps
API Server 1
API Server 2
DB
Primary
DB
Secondary
DB 가 죽어도?
Web Browser
Mobile Apps
API Server 1
API Server 2
DB
Primary
DB
Primary
SPOF
SPOF를 없애는
것이 관건!!!
그래도 서버가 물리 서버 한대면
DB
Primary
API Server 1
Web Browser
Mobile Apps
API Server 2
DB
Secondary
그래도 서버가 물리 서버 한대면
DB
Primary
API Server 1
Web Browser
Mobile Apps
API Server 2
DB
Secondary
Object
Storage
Object Storage
이미지나 동영상을
어떻게 관리해야 할까요?
Object Storage
NAS나
서버 한대에서
자체 관리
자체 관리하면 서버가 여러대일때...
Image 2는 어디서 찾아야 할까?
Web Browser
Mobile Apps
API Server 1
API Server 2 File Server
Image 2
Image 9
Image 3
File Server
Image 1
Image 10
Image 4
자체 관리 방식의 문제점
● 디스크 등의 증설 시기를 맞추기가 어렵다.
● 데이터 유실 확률이 높다.
● Object Store 형태로 갈려면, 구현하기가 어려움.
○ 큰 회사들은 대부분 자체 구현해서 씀.
3개의 복제본
Data Loss : 보통 3개의 복제본을 두면 99.999% 보
장
보장율 복제 개수
99.99% 2
99.999% 3
Object Store 의 역할
● 이미지 등의 파일(오브젝트)를 저장함.
● 내부적으로 복제본이 생겨서 유실의 가능성이 적음
○ 사람이 실수로 지울때는…(S3는 Versioning을 지원)
● 스토리지의 사이징, 장애등에 대한 고민이 적어짐.
Object Store
잘 동작하는 오브젝트 스토어를
만들기는 쉽지 않습니다.
있는 걸 잘 씁시다.(AWS S3)
외부 서비스 형태로 이용이 편하다.
Web Browser
Mobile Apps
API Server 1
API Server 2
Object
Storage
데이터 샤딩
데이터 샤딩
필요한 메타 정보들이
엄청나게 거대하다면?
데이터 샤딩
데이터 샤딩
데이터를 어떻게 나누고
찾을것인가?
다음 데이터를 두 개로 나누면 어떻게 해야 할까요?
1
2
3
4
5
두 개로 나누기
1
2
3
4
5
아무렇게나?
1 2
3
4
5
이러면 각 숫자가 어디에
있는지 알 수가 없습니다.
어디에 있는지를 모르면
전체를 찾아야 합니다.
전체를 찾게 되면
모든 노드에 매번
부하를 주게됩니다.
데이터를 나누는 기준,
규칙이 필요합니다.
한 군데로 몰기
1
2
3
4
5
순서대로
1
2
3
4
5
2로 나눠서 나머지가 1이면 앞에, 0이면 뒤에
1 2
3 4
5
여기서 서버 수가 변하면
어떻게 될까요?
2로 나누는게 아니라 3으로 나눠야 하면?
1 2
3 4
5 6
7 8
2로 나누는게 아니라 3으로 나눠야 하면?
5
1 2 3
4 6
7 8
많은 수의 데이터가
이동을 해야 합니다.
그런데
어디로 이동할지 모릅니다.
모듈러는 2^N 으로 증가하는게 좋습니다.
1 2 3 4
5 6 7 8
2^N으로 증가하면 이동하는 서버가 고정됩니다.
1 2 3 4
5 6 7 8
확장에 데이터가 적게
움직이는 방법을
연구해야 합니다.
코디네이터
코디네이터
추가되고 삭제되는
서버 목록을 어떻게 관리할 것인가?
코디네이터
서버의 추가 삭제시, 이를 이용하는
서비스에 알려준다.
코디네이터
API Server
API Server
API Server
Cordinator
Auth Server
Auth Server
코디네이터
API Server
API Server
API Server
Cordinator
Auth Server
Auth Server
Auth Server
2. Auth Server 추가
3. Auth Server 가 추가
되었음, 다시 목록을 가
져가시오.
1. Auth Server 의 변동
을 알려줘!!!
코디네이터
Zookeeper
Etcd
consul
Circuit Breaker
Circuit Breaker 의 필요성
● 현재의 서비스는 다 수의 많은 외부 서비스의 API(자기 팀 이외에, 또는
자기 팀에서 관리하더라도 다른 서버의)를 사용하게 됨.
● 보통은 장애를 대비해서 Timeout을 설정하게 되는데…
○ Timeout 이 길면... 전체적인 서비스가 계속 느려지게 됨.
○ 해당 스레드/프로세스가 Timeout 동안 다른 작업을 못함.
● API 중에 중요하지 않은 서비스들도 있음(광고를 보여준다거나…)
Circuit Breaker
Timeout 이 3초면 해당 스레드는 중요
하지 않은 API를
기다린다고 3초를 허비
Circuit Breaker
요청이 쌓이면... 해당 서비스도 응답이
느려지기 시작함.
Circuit Breaker
차라리 빨리 실패하고, 다른 값을 주자
!!!
Fast Fail Back!!!
Return (미리 정의된 값)
Circuit Breaker
광고를 못가져오면,
그냥 다른 이미지로 대체
광고 API가 죽더라도
서비스는 느려지지 않는다.
블루/그린 배포, Canary 배포
배포
기존의 배포가 힘든 이유
기존의 배포가 힘든 이유
● 버그의 존재
○ 문제가 발생했을 때, 해당 범위가 클 수 있다.
● 배포에 시간이 너무 많이 걸린다.
○ 롤백 시간도 배포시간 만큼 오래걸린다.
배포
이런 문제를 해결하기 위한 방법
배포
쉬운 배포 방법(자동화된 배포)
버튼 하나, 명령 하나로...
수많은 자동화된 테스트가 필요
(CI/CD)
커밋될 때마다...
배포
롤백 시간을 줄일려면?
Blue/Green 배포
새로운 한벌을 구성해서 배포, 그리고 라우터의 변경으로
서버군을 변경
Blue/Green 배포
롤백은 다시 라우터
변경으로 순식간!!!
Blue/Green 배포
그런데 항상 두벌씩 유지하라굽쇼!!!!
클라우드 아니면 힘듭니다.
Blue/Green 야매 버전 배포
Blue/Green 야매 버전 배포
Blue/Green 야매 버전 배포
Blue/Green 야매 버전 배포
Blue/Green 야매 버전 배포의 문제점
● 결국 둘 다 리소스를 많이 사용하는 경우, 시스템에 장애가 발생할 수
있다.
● 피크 타임은 피해서 배포해야 한다.
● Graceful Shutdown 잘 되어 있어야 한다. (Router 의 역할도 중요함.)
Blue/Green 배포와 데이터베이스 스키마 변경
● DB 스키마 변경은 지옥으로 가는 지름길…
○ 최대한 추가만 하고, 삭제와 변경은 하지 않는다.
○ 몇번의 배포이후 확실히 사용하지 않는다는 것이 확인될 때
삭제가능.
● 롤백보다는 빨리 고치는 걸 추천
● Feature Flag를 활용해보자.
Canary 배포
블루/그린을 하더라도 장애가
발생하면 대상의 범위가 넓다
Canary 배포
데이터가 지워지는 심각한 문제라면?
Canary 배포
일부 유저에게만 적용해보자.
서버가 100대면 유저의 1%만…
잘되면 10%... 더 잘되면 전체 배포
Canary 배포 : 한대만 배포해서 제대로 동작할까?
User #1이 다음번에
요청을 하게 되는 서버는?
항상 4번으로 간다는 보장이 없다.
Canary 배포
유저의 격리가 선행될 수 있어야 함.
서버군이 아예 다르거나…
A/B Test 형태로 적용이 가능하거나...
Feature Flag(Switch)
Feature Switch
새로 나갈 기능을 배포없이 옵션으로
실시간으로 끄고 켤 수 있도록 준비
Feature Flag(Switch) 의 장점
● 특정 기능에 문제가 생겼을 때, 해당 기능을 꺼버리면 된다.
○ 롤백 배포도 필요 없음.
● 다만 특정 기능이 동작하지 않는다면, UI에서는 어떻게 보여질지, 협의
가 필요.
○ 클라이언트 작업이 필요할 수 있음.
■ 클라이언트는 특정값이 오는 걸로 가정해버리면... 다 함께
Crash!!!
요약
● 대용량 서비스 설계는
○ SPOF를 줄이고 가능한 장비추가로 인한 선형적인 성능 증대가 필
요하다.
● 여러가지 상황에 맞추기 위해 자동화가 필수(배포/테스트)
○ 몇 백대 이상의 서버를 관리해야 한다.
● 항상. 이러면 수백만명이 동시에 써도 괜찮을까를 물어보자.
감사합니다.

More Related Content

PDF
Massive service basic
PPTX
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
PDF
webservice scaling for newbie
PDF
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
PDF
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
PDF
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
Massive service basic
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
webservice scaling for newbie
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버

What's hot (20)

PDF
임태현, 게임 서버 디자인 가이드, NDC2013
PDF
중앙 서버 없는 게임 로직
PDF
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
PDF
Data Engineering 101
PPTX
게임 분산 서버 구조
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PDF
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
PPTX
Ndc14 분산 서버 구축의 ABC
PDF
NDC12_Lockless게임서버설계와구현
PPTX
로그 기깔나게 잘 디자인하는 법
PDF
PDF
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
PDF
서버 성능에 대한 정의와 이해
PDF
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
PDF
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
PDF
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
PDF
서버학개론(백엔드 서버 개발자를 위한)
PDF
쿠키런 1년, 서버개발 분투기
PDF
NoSQL 위에서 MMORPG 개발하기
PDF
추천시스템 이제는 돈이 되어야 한다.
임태현, 게임 서버 디자인 가이드, NDC2013
중앙 서버 없는 게임 로직
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
Data Engineering 101
게임 분산 서버 구조
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
Ndc14 분산 서버 구축의 ABC
NDC12_Lockless게임서버설계와구현
로그 기깔나게 잘 디자인하는 법
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
서버 성능에 대한 정의와 이해
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
서버학개론(백엔드 서버 개발자를 위한)
쿠키런 1년, 서버개발 분투기
NoSQL 위에서 MMORPG 개발하기
추천시스템 이제는 돈이 되어야 한다.
Ad

Similar to How to build massive service for advance (20)

PDF
안정적인 서비스 운영 2013.08
PPTX
분산저장시스템 개발에 대한 12가지 이야기
PDF
안정적인 서비스 운영 2014.03
PDF
Internet Scale Service Arichitecture
PDF
확장가능한 웹 아키텍쳐 구축 방안
PDF
대규모 서비스를 가능하게 하는 기술
PPTX
Scalable web architecture and distributed systems
 
PPTX
Scalable web architecture and distributed systems
PDF
Scalable webservice
PPTX
4. 대용량 아키텍쳐 설계 패턴
PPTX
MSA와 infra
PDF
꿀밋업1탄_왜_마이크로서비스인가
PDF
Tdc2013 선배들에게 배우는 server scalability
PDF
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
PDF
[웨비나] Follow me! 클라우드 인프라 구축 기본편 - 강지나 테크 에반젤리스트
PDF
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
PDF
마이크로서비스 아키텍처의 이해 - 부산대 소프트웨어 공학 연구실 강의 자료
PDF
(OkdevTV) 2024년 9월 2일 개발 이야기 - 좋은 리팩토링 vs 나쁜 리팩토링
PDF
컨테이너와 서버리스 기술을 통한 디지털 트랜스포메이션::정도현::AWS Summit Seoul 2018
PPT
091106kofpublic 091108170852-phpapp02 (번역본)
안정적인 서비스 운영 2013.08
분산저장시스템 개발에 대한 12가지 이야기
안정적인 서비스 운영 2014.03
Internet Scale Service Arichitecture
확장가능한 웹 아키텍쳐 구축 방안
대규모 서비스를 가능하게 하는 기술
Scalable web architecture and distributed systems
 
Scalable web architecture and distributed systems
Scalable webservice
4. 대용량 아키텍쳐 설계 패턴
MSA와 infra
꿀밋업1탄_왜_마이크로서비스인가
Tdc2013 선배들에게 배우는 server scalability
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
[웨비나] Follow me! 클라우드 인프라 구축 기본편 - 강지나 테크 에반젤리스트
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
마이크로서비스 아키텍처의 이해 - 부산대 소프트웨어 공학 연구실 강의 자료
(OkdevTV) 2024년 9월 2일 개발 이야기 - 좋은 리팩토링 vs 나쁜 리팩토링
컨테이너와 서버리스 기술을 통한 디지털 트랜스포메이션::정도현::AWS Summit Seoul 2018
091106kofpublic 091108170852-phpapp02 (번역본)
Ad

More from DaeMyung Kang (20)

PPTX
Count min sketch
PDF
Ansible
PDF
Why GUID is needed
PDF
How to use redis well
PPTX
The easiest consistent hashing
PDF
How to name a cache key
PDF
Integration between Filebeat and logstash
PDF
How To Become Better Engineer
PPTX
Kafka timestamp offset_final
PPTX
Kafka timestamp offset
PPTX
Data pipeline and data lake
PDF
Redis acl
PDF
Coffee store
PDF
Number system
PDF
Bloomfilter
PDF
Redis From 2.8 to 4.x(unstable)
PDF
Redis From 2.8 to 4.x
PDF
Soma search
PDF
Redis 2017
PDF
Using spark data frame for sql
Count min sketch
Ansible
Why GUID is needed
How to use redis well
The easiest consistent hashing
How to name a cache key
Integration between Filebeat and logstash
How To Become Better Engineer
Kafka timestamp offset_final
Kafka timestamp offset
Data pipeline and data lake
Redis acl
Coffee store
Number system
Bloomfilter
Redis From 2.8 to 4.x(unstable)
Redis From 2.8 to 4.x
Soma search
Redis 2017
Using spark data frame for sql

How to build massive service for advance