SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
Google이 구축한 대규모 시스템 –
디자인 패턴
최흥배
• 인프라에 대한 필요 기능에 대해 물어보면 많은 요청이 있다
- 요구 중 6개를 만족시킬 수는 있다
- 7번째를 만족시키는 것은 어렵다
- 8번째까지 만족시키면 반대로 나빠진다
- 그러므로 모든 요구를 만족할 필요는 없다. 가장 일반적인 과제를 정하고
그것을 만족시켜야 한다.
• 시스템을 개발할 때 가장 중요한 것은 확장성이다.
그러나 무한대로 확장 할 필요는 없다.
• 스케일이 2항(자리 수. 9->10) 바뀔 때는 처음 디자인을 다시 생각하는 것이
좋다
• 무한 확장성을 처음부터 고민할 필요는 없다
대규모 분산 처리 디자인 패턴 – Single Master, 1000s of Workers
• D중심적인 마스터를 가지고 있다.
• GFS 마스터나 BigTable, MapReduce 등에서 사용하고 있다.
• 마스터에 대해 자주 핫-스탠바이가 사용 되고 있다.
• 대량의 데이터가 클라이언트에서 워커 사이에 전송되고 있다
대규모 분산 처리 디자인 패턴 – Canary Request
• 이상한 요청에 의해서 크래쉬가 발생할 가능성이 있을 때, 그리고 이것을
막아낼 수 없을 때 이 패턴을 사용한다.
• 이 경우 같은 이상한 요청이 수 천의 서버에 보내지면 모든 서버가 크래쉬
된다.
• 처음에 Canary Request를 보내고 그것이 성공한다면 통신을 계속한다.
대규모 분산 처리 디자인 패턴 – Tree Distribution of Request
• 수 천대의 머신에 요청을 보낼 때 송신별 NIC랑 CPU가 병목이 된다. 이 때 이
패턴을 사용한다.
대규모 분산 처리 디자인 패턴 – Multiple Smaller Units per Machine
• 크래쉬 되었을 때 복구 시간을 최소화 하고 싶을 때 적절한 단위로 로드
밸런스 하고 싶을 때 사용한다.
• 큰 처리 덩어리가 아닌, 복수의 작은 처리 유닛를 관리하는 방법
• 각각의 머신을 1 유닛으로 해서 관리하면 복구할 때를 위해 머신마다 새로운
복제를 만드는 것은 큰일. 이것을 로드 밸러스 하는 것은 더 어렵다
그래서 머신 마다의 처리를 작은 유닛으로 나눈다.
• 유닛 수의 조정으로 로드 밸런스가 하기 쉬워지고, 만약 머신이 실패하더라도
각각의 유닛을 N개의 머신이 분담해서 복구할 수 있으므로 빠르게 복구할 수
있다.
대규모 분산 처리 디자인 패턴 – Multiple Smaller Units per Machine
대규모 분산 처리 디자인 패턴 – Range Distribution of Data, not Hash
• Key-Value 형 데이터 스토어 등을 복수의 머신에서 분산 처리하고 있을 때,
여기에다 머신을 추가하는 경우. 이 머신에 어떻게 데이터를 할당할지가 고민.
• Consistent hashing에서는 머신 간에 평등하게 데이터를 분산할 수 있다.
그러나 어느 머신에 어떤 데이터를 분산하는지를 유저가 알기 어렵다.
• 이 패턴에서는 Key의 범위를 복수의 연속된 범위로 분할 하여 새로운 머신에
할당하고 있다. BigTable의 Tablet 등이 이 방법을 채용하고 있다.
• 이 방법은 Consistent hashing에 비해 구현이 어렵지만 어느 범위의 Key의
데이터를 같은 Tablet에 넣는 것을 컨트롤 할 수 있어서 데이터를 빼 낼 때
소수의 머신에 접근하는 것으로 끝 낼 수 있다.
대규모 분산 처리 디자인 패턴 – Elastic Systems
• 부하에 대해서 유연한 시스템을 만들고 싶을 때 사용하는 패턴
• 부하에 대해서 큰 시스템을 만들면 리소스를 낭비하고. 부하를 작게 예상하면
멜-다운 해버린다.
가능하면 부하가 작을 때는 자동적으로 공유하여 리소스를 절약하고, Peek
때에는 자동적으로 확장하기를 바란다.
• 구글에서는 부하에 대해서 최대 2배 정도의 Capacity를 계호기하고 있다.
대규모 분산 처리 디자인 패턴 – One Interface, Multiple Implementation
• 구글의 검색 서비스에서는 동시에 달성하는 것이 거의 불가능할 정도의 많은
서로 다른 속성을 동시에 달성하고 있다.
최신의 인덱스
대용량
고품질 취득
대규모
• 하나의 구현만으로 이것들을 해결하는 것은 아주 어렵다.
그래서 과제를 분할하여 각각을 해결하는 구현을 목표로 한다.
대규모 분산 처리 디자인 패턴 – One Interface, Multiple Implementation
Evolution and Future Directions of Large-Scale Storage and Computation Systems
at Google」(Google에 있어서 대규모 저장소와 계산의 진화와 장래의 방향성)
http://research.microsoft.com/en-us/um/redmond/events/socc2010/index.htm
(일본어 번역) http://www.publickey1.jp/blog/10/4.html
참고

Contenu connexe

Plus de 흥배 최

잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback흥배 최
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기흥배 최
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치흥배 최
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발흥배 최
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
닷넷 Apache avro
닷넷 Apache avro닷넷 Apache avro
닷넷 Apache avro흥배 최
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리흥배 최
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트흥배 최
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션흥배 최
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기흥배 최
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서흥배 최
 
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템흥배 최
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍흥배 최
 
[Sdc 3rd] Boost multi_index
[Sdc 3rd] Boost multi_index[Sdc 3rd] Boost multi_index
[Sdc 3rd] Boost multi_index흥배 최
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11흥배 최
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D흥배 최
 
[Final]조진현 direct write
[Final]조진현 direct write[Final]조진현 direct write
[Final]조진현 direct write흥배 최
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서흥배 최
 
Facebook이 대규모 확장성 도전에서 배운 것
Facebook이 대규모 확장성 도전에서 배운 것Facebook이 대규모 확장성 도전에서 배운 것
Facebook이 대규모 확장성 도전에서 배운 것흥배 최
 

Plus de 흥배 최 (20)

잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
닷넷 Apache avro
닷넷 Apache avro닷넷 Apache avro
닷넷 Apache avro
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
 
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
[Sdc 3rd] Boost multi_index
[Sdc 3rd] Boost multi_index[Sdc 3rd] Boost multi_index
[Sdc 3rd] Boost multi_index
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D
 
[Final]조진현 direct write
[Final]조진현 direct write[Final]조진현 direct write
[Final]조진현 direct write
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서
 
Facebook이 대규모 확장성 도전에서 배운 것
Facebook이 대규모 확장성 도전에서 배운 것Facebook이 대규모 확장성 도전에서 배운 것
Facebook이 대규모 확장성 도전에서 배운 것
 

Google이 구축한 대규모 시스템–디자인 패턴

  • 1. Google이 구축한 대규모 시스템 – 디자인 패턴 최흥배
  • 2. • 인프라에 대한 필요 기능에 대해 물어보면 많은 요청이 있다 - 요구 중 6개를 만족시킬 수는 있다 - 7번째를 만족시키는 것은 어렵다 - 8번째까지 만족시키면 반대로 나빠진다 - 그러므로 모든 요구를 만족할 필요는 없다. 가장 일반적인 과제를 정하고 그것을 만족시켜야 한다. • 시스템을 개발할 때 가장 중요한 것은 확장성이다. 그러나 무한대로 확장 할 필요는 없다. • 스케일이 2항(자리 수. 9->10) 바뀔 때는 처음 디자인을 다시 생각하는 것이 좋다 • 무한 확장성을 처음부터 고민할 필요는 없다
  • 3. 대규모 분산 처리 디자인 패턴 – Single Master, 1000s of Workers • D중심적인 마스터를 가지고 있다. • GFS 마스터나 BigTable, MapReduce 등에서 사용하고 있다. • 마스터에 대해 자주 핫-스탠바이가 사용 되고 있다. • 대량의 데이터가 클라이언트에서 워커 사이에 전송되고 있다
  • 4. 대규모 분산 처리 디자인 패턴 – Canary Request • 이상한 요청에 의해서 크래쉬가 발생할 가능성이 있을 때, 그리고 이것을 막아낼 수 없을 때 이 패턴을 사용한다. • 이 경우 같은 이상한 요청이 수 천의 서버에 보내지면 모든 서버가 크래쉬 된다. • 처음에 Canary Request를 보내고 그것이 성공한다면 통신을 계속한다.
  • 5. 대규모 분산 처리 디자인 패턴 – Tree Distribution of Request • 수 천대의 머신에 요청을 보낼 때 송신별 NIC랑 CPU가 병목이 된다. 이 때 이 패턴을 사용한다.
  • 6. 대규모 분산 처리 디자인 패턴 – Multiple Smaller Units per Machine • 크래쉬 되었을 때 복구 시간을 최소화 하고 싶을 때 적절한 단위로 로드 밸런스 하고 싶을 때 사용한다. • 큰 처리 덩어리가 아닌, 복수의 작은 처리 유닛를 관리하는 방법 • 각각의 머신을 1 유닛으로 해서 관리하면 복구할 때를 위해 머신마다 새로운 복제를 만드는 것은 큰일. 이것을 로드 밸러스 하는 것은 더 어렵다 그래서 머신 마다의 처리를 작은 유닛으로 나눈다. • 유닛 수의 조정으로 로드 밸런스가 하기 쉬워지고, 만약 머신이 실패하더라도 각각의 유닛을 N개의 머신이 분담해서 복구할 수 있으므로 빠르게 복구할 수 있다.
  • 7. 대규모 분산 처리 디자인 패턴 – Multiple Smaller Units per Machine
  • 8. 대규모 분산 처리 디자인 패턴 – Range Distribution of Data, not Hash • Key-Value 형 데이터 스토어 등을 복수의 머신에서 분산 처리하고 있을 때, 여기에다 머신을 추가하는 경우. 이 머신에 어떻게 데이터를 할당할지가 고민. • Consistent hashing에서는 머신 간에 평등하게 데이터를 분산할 수 있다. 그러나 어느 머신에 어떤 데이터를 분산하는지를 유저가 알기 어렵다. • 이 패턴에서는 Key의 범위를 복수의 연속된 범위로 분할 하여 새로운 머신에 할당하고 있다. BigTable의 Tablet 등이 이 방법을 채용하고 있다. • 이 방법은 Consistent hashing에 비해 구현이 어렵지만 어느 범위의 Key의 데이터를 같은 Tablet에 넣는 것을 컨트롤 할 수 있어서 데이터를 빼 낼 때 소수의 머신에 접근하는 것으로 끝 낼 수 있다.
  • 9. 대규모 분산 처리 디자인 패턴 – Elastic Systems • 부하에 대해서 유연한 시스템을 만들고 싶을 때 사용하는 패턴 • 부하에 대해서 큰 시스템을 만들면 리소스를 낭비하고. 부하를 작게 예상하면 멜-다운 해버린다. 가능하면 부하가 작을 때는 자동적으로 공유하여 리소스를 절약하고, Peek 때에는 자동적으로 확장하기를 바란다. • 구글에서는 부하에 대해서 최대 2배 정도의 Capacity를 계호기하고 있다.
  • 10. 대규모 분산 처리 디자인 패턴 – One Interface, Multiple Implementation • 구글의 검색 서비스에서는 동시에 달성하는 것이 거의 불가능할 정도의 많은 서로 다른 속성을 동시에 달성하고 있다. 최신의 인덱스 대용량 고품질 취득 대규모 • 하나의 구현만으로 이것들을 해결하는 것은 아주 어렵다. 그래서 과제를 분할하여 각각을 해결하는 구현을 목표로 한다.
  • 11. 대규모 분산 처리 디자인 패턴 – One Interface, Multiple Implementation
  • 12. Evolution and Future Directions of Large-Scale Storage and Computation Systems at Google」(Google에 있어서 대규모 저장소와 계산의 진화와 장래의 방향성) http://research.microsoft.com/en-us/um/redmond/events/socc2010/index.htm (일본어 번역) http://www.publickey1.jp/blog/10/4.html 참고