SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
숨겨진 마이크로서비스
정윤진
Principal Technologist, Pivotal
마이크로 서비스 환경
https://sdtimes.com/apis/securing-microservices-the-api-gateway-authentication-and-authorization/
팬-아웃 효과
마이크로 서비스 환경에서는
다양한 목적에 부합하기 위해 캐시의 사용이 매우 중요합니다.
● 웹 애플리케이션 간의 데이터 일관성 유지
● 요청에 대한 응답을 매우 낮은 지연시간으로 제공
● 온라인과 오프라인 서비스간 데이터의 연동
하지만 캐시를 주요 데이터베이스 처럼 사용하기는 어렵습니다.
● 휘발성을 가진 메모리가 주 저장소 Volatile
● 대부분 키:값 구조와 같은 단순한 데이터 구조를 지원 – Hard to keep complex data
● 클러스터로 구성되지 않아 고가용성의 확보가 기본이 아님 – Fragile
데이터베이스 구간에서의 복제는
데이터를 잃지 않는 캐시 클러스터
를 가질 수 있다면 어떤 일이 벌어
질까?
만약
https://medium.com/netflix-techblog/cache-warming-agility-for-a-stateful-
service-2d3b1da82642
넷플릭스 EVCache
넷플릭스 EVCache는 분산 캐시
분산 캐시 사용의 장점:
● 소스/데이터베이스로부터의 데이터 참조보다 훨씬 빠른 조회 속도를 제공
● 응답이 빠르기 때문에 더 적은 수량의 리소스로 더 많은 요청의 처리가 가능
● 프론트에 위치한 서버들의 부하를 감소
● 서버의 처리량을 극대화
EVCache 는 ”Memcached” 를 기본으로 만들어 졌습니다.
https://github.com/Netflix/evcache/wiki
https://github.com/Netflix/EVCache
https://medium.com/netflix-techblog/announcing-evcache-distributed-in-memory-datastore-for-cloud-c26a698c27f7
Memcached를 사용하여 얻은 장점은 :
● 간단하고 쉬운 Memcached 인터페이스를 그대로 사용할 수 있었습니다. (get, set, touch, etc.)
● 데이터 크기 또는 네트워크 요청의 증가에 따라 선형적인 확장을 기대할 수 있습니다. (vs getting a bigger box)
● 원하는 수량으로 데이터 복제를 구현할 수 있었습니다. (some clusters run with 2, others with 9)
● AWS 최적화를 통한 구조로 재시도, 폴백과 같은 메커니즘들이 문제 없이 동작할 수 있었습니다. (Optimization f
or AWS architecture)
● 원하는 크기의 데이터 사용에 제약이 없습니다. (with data chunking)
● 실시간에 근접한 글로벌 복제를 구현할 수 있었습니다. (Nearline)
● 데이터의 유실을 방지할 수 있었습니다.
EVCache의 기본 생김새
• 1개의 가용존에 3개의 인스턴스가 기본이 됩니다.
• 1개의 데이터는 3개의 인스턴스에 카테마 일관성 해싱 알
고리즘이 적용되어 분산 저장 됩니다.
• “Ketama Consistence Hashing algorithm”
카테마 라이브러리에 대한 자세한 설명은 아래의 링크에서
libketama: Consistent Hashing library for Memcached clients
https://www.metabrew.com/article/libketama-consistent-hashing-algo-memcac
hed-clients
다수의 가용존에서의 EVCache
• 프로덕션에서의 EVCache 는 다수의 가용
존에 배포 됩니다.
• 이때 쓰기는 모든 가용존에 수행 됩니다.
• 하지만 읽기는 클라이언트가 위치한 가용
존의 EVCache 만을 사용합니다.
넷플릭스의 플랫폼 도구와 연동되어 동작
• 사이드카 (Prana)
• EVCache 서버
• EVCache 클라이언트
• 유레카 (서비스 디스커
버리)
• 아카이어스 (설정 서버)
EVCache 사용 패턴 – Look aside
EVCache 사용 패턴 – 프로세스간 데이터 처리
오프라인과 온라인 또는 실시간에 가까운 애플리케이션 간에 동일한 데이터를 흐름에
따라 연속적으로 참조하는 형태로 사용할 수도 있음
EVCache 사용 패턴 – 캐시 확장과 워밍
https://www.slideshare.net/ShashiShekarMadappa/evcache-at-netflix
글로벌 리전간 복제 구성
https://medium.com/netflix-techblog/caching-for-a-global-netflix-7bcc457012f1
이 모든 동작은 개발자가 EVCache 클라이언트 라이브러리에 포함된 set() 을 수행하
면 자동으로 이루어지는 과정
구성 요소 : Replication Message Queue
● 이 글로벌 복제의 핵심 구성 요소 입니다. 넷플릭스는 여기에 카프카를
사용하고 있습니다. 이 카프카 클러스터는 2개의 컨슈머를 가집니다. 바
로 다른 리전으로 복제를 담당하는 ‘복제 릴레이 클러스터'입니다. 각
리전별로 독립된 복제 클러스터는 리전에 발생할 수 있는 지연 시간 이
슈로 부터 다른 리전의 복제를 보호합니다.
● 만약 대상 리전이 장시간 문제가 발생하여 복제 지연이 발생한 경우, 카
프카 큐의 버퍼가 꽉 차게 되어 결국 카프카는 오래된 메세지를 드랍 합
니다. 이런 장애 시나리오에서 드랍된 메세지는 절대 대상 리전으로 복
제 하지 않습니다. 복제 캐시를 사용하는 넷플릭스 서비스들은 이런 형
태의 장애를 처리할 수 있도록 디자인 되어 있습니다.
구성요소: Replication Relay
● 복제 릴레이는 카프카 클러스터로 부터 메세지를 가져옵니다. 가져오는
메세지는 다른 리전에 위치한 복제 프락시와 안전한 연결을 구성하고,
복제 요청을 보냅니다.
● 이때 SET과 같은 명령으로 데이터가 필요하다면 로컬의 EVCache에서
데이터를 가져옵니다. 복제 프락시가 데이터를 성공적으로 저장했다는
메세지를 받을떄까지 대기하며, 타임아웃이나 실패가 발생한다면 재시
도 합니다.
● 일시적인 리전간 복제 지연은 매우 자연스럽게 핸들링되고 있습니다. 카
프카는 지속적으로 신규 메세지를 받으며 복제에 지연이 발생하면 완료
되는 동안 백로그를 버퍼로 사용합니다.
Replication Proxy
● 복제 프락시 클러스터는 대상 리전의 캐시에 복제 데이터를 저장
하기 위해 동작합니다. 복제 릴레이로 부터 타 리전의 데이터를 받
아 로컬 리전의 캐시에 저장합니다. 이 과정이 성공적이면 릴레이
클러스터에 응답을 리턴하여 복제에 이상이 없음을 알립니다.
● 복제 프락시가 위치한 로컬 리전의 캐시에 데이터를 저장할때는
일반 클라이언트가 사용하는 것과 동일한 EVCache 클라이언트를
사용합니다. 이 클라이언트 라이브러리는 샤딩 인스턴스 선택, 재
시도와 같은 복잡한 작업을 수행합니다.
● 다른 많은 넷플릭스 서비스들과 마찬가지로, 복제 릴레이와 복제
프락시 클러스터들은 다수의 가용존에 배포되어 리전 내에서 발
생할 수 있는 장애에 대비합니다.
Performance
• 초당 2천 5백만 요청 처리
• 매일 2조개의 데이터가 글로벌 복제
• 수천만개의 오브젝트를 저장
• 수만개의 Memcached 인스턴스
• 각각의 요청은 밀리세컨 단위의 응답성을 가짐
데모 애플리케이션
Diagram
Web
kafka
memcached
Relay memcached
Web
(relay)
AWS-KR
Region
AWS-JP
Region
https://github.com/younjinjeong/spring-cloud-cross-region-replication-example
엔터프라이즈 캐시
Pivotal Cloud Cache
데이터베이스 오프로딩 레거시와 신규 마이크로 서비스에서 모두 사용
• 각 마이크로서비스 별로 캐시 클러스터를
준비해 사용
• 이벤트 기반의 메세징을 사용하여 캐시
클러스터간 데이터 복제
결론
• 다수의 마이크로서비스로 이루어진 마이크로서비스 아키텍처는 필연적으로 내부에 팬-아웃 현상을
유발한다.
• 분산 캐시를 사용함으로 인해 낮은 지연시간을 제공하는 데이터 저장소를 높은 가용성으로 유지할
수 있다.
• 메세지 큐를 사용함으로서 캐시 워밍, 캐시의 확장 재구성, 글로벌 복제와 같은 구성이 가능해진다.
• 메세지 큐나 캐시에는 성능이나 목적의 수행에 맞는 다양한 도구, 예를 들면 래빗엠큐나 레디스등의
도구를 선택해서 사용할 수 있다. 이때 스프링 클라우드 스트림이나 스프링에서 지원하는 도구를 선
택한다면 더 용이할 것이다.
• 카프카에 유입되는 데이터는 캐시-캐시 복제 외에도 캐시-데이터베이스나 이기종 데이터베이스간 데
이터를 복제하는 등의 형태로 응용할 수 있다.
• 각 마이크로서비스 개발팀은 운영팀의 지원이 없이도 직접 캐시를 준비해서 사용할 수 있어야 한다.
• 오픈 소스의 직접 사용에 대한 지원이 필요한 경우 피보탈 클라우드 캐시(PCC)를 통해 동일한 효과를
노려볼 수 있다.
고맙습니다.
Speaker Name
Contact information

Mais conteúdo relacionado

Mais procurados

mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
Woo Yeong Choi
 

Mais procurados (20)

[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03
 
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
주니어의 쿠버네티스 생태계에서 살아남기
주니어의 쿠버네티스 생태계에서 살아남기주니어의 쿠버네티스 생태계에서 살아남기
주니어의 쿠버네티스 생태계에서 살아남기
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
 

Semelhante a 숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인

Semelhante a 숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인 (20)

Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안
 
ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회
 
Introduction of Mesosphere DCOS
Introduction of Mesosphere DCOSIntroduction of Mesosphere DCOS
Introduction of Mesosphere DCOS
 
오픈 소스 클라우드 플랫폼 분석
오픈 소스 클라우드 플랫폼 분석오픈 소스 클라우드 플랫폼 분석
오픈 소스 클라우드 플랫폼 분석
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systems
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systems
 
MySQL operator for_kubernetes
MySQL operator for_kubernetesMySQL operator for_kubernetes
MySQL operator for_kubernetes
 
About memcached
About memcachedAbout memcached
About memcached
 
Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현
 
SEP Overview - 이비플러스(주)
SEP Overview - 이비플러스(주)SEP Overview - 이비플러스(주)
SEP Overview - 이비플러스(주)
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
 
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...
 
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3 AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
 
JMI Techtalk : Backend.AI
JMI Techtalk : Backend.AIJMI Techtalk : Backend.AI
JMI Techtalk : Backend.AI
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
NoSQL
NoSQLNoSQL
NoSQL
 

Mais de VMware Tanzu Korea

굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
VMware Tanzu Korea
 

Mais de VMware Tanzu Korea (20)

꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
 
꿀밋업2탄_도메인 모델에 따른 데이터 분리 저장과 API 연결
꿀밋업2탄_도메인 모델에 따른 데이터 분리 저장과 API 연결꿀밋업2탄_도메인 모델에 따른 데이터 분리 저장과 API 연결
꿀밋업2탄_도메인 모델에 따른 데이터 분리 저장과 API 연결
 
꿀밋업1탄_왜_마이크로서비스인가
꿀밋업1탄_왜_마이크로서비스인가꿀밋업1탄_왜_마이크로서비스인가
꿀밋업1탄_왜_마이크로서비스인가
 
2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...
2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...
2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...
 
2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례
2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례
2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례
 
2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례
2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례
2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례
 
2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개
2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개
2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개
 
Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...
Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...
Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...
 
클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵
클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵 클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵
클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
 
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
 
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
 
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS)
 
Pivotal Labs 고객사례 - Coinone
Pivotal Labs 고객사례 - CoinonePivotal Labs 고객사례 - Coinone
Pivotal Labs 고객사례 - Coinone
 
Spring Project와 최신 Pivotal Cloud Foundry 업데이트
Spring Project와 최신 Pivotal Cloud Foundry 업데이트 Spring Project와 최신 Pivotal Cloud Foundry 업데이트
Spring Project와 최신 Pivotal Cloud Foundry 업데이트
 
Netflix MSA and Pivotal
Netflix MSA and PivotalNetflix MSA and Pivotal
Netflix MSA and Pivotal
 
클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정
 
Cloud native enterprise
Cloud native enterpriseCloud native enterprise
Cloud native enterprise
 
gp text roadmap presentation
gp text roadmap presentationgp text roadmap presentation
gp text roadmap presentation
 

숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인

  • 1.
  • 5.
  • 6. 마이크로 서비스 환경에서는 다양한 목적에 부합하기 위해 캐시의 사용이 매우 중요합니다. ● 웹 애플리케이션 간의 데이터 일관성 유지 ● 요청에 대한 응답을 매우 낮은 지연시간으로 제공 ● 온라인과 오프라인 서비스간 데이터의 연동 하지만 캐시를 주요 데이터베이스 처럼 사용하기는 어렵습니다. ● 휘발성을 가진 메모리가 주 저장소 Volatile ● 대부분 키:값 구조와 같은 단순한 데이터 구조를 지원 – Hard to keep complex data ● 클러스터로 구성되지 않아 고가용성의 확보가 기본이 아님 – Fragile
  • 8. 데이터를 잃지 않는 캐시 클러스터 를 가질 수 있다면 어떤 일이 벌어 질까? 만약 https://medium.com/netflix-techblog/cache-warming-agility-for-a-stateful- service-2d3b1da82642
  • 10. 넷플릭스 EVCache는 분산 캐시 분산 캐시 사용의 장점: ● 소스/데이터베이스로부터의 데이터 참조보다 훨씬 빠른 조회 속도를 제공 ● 응답이 빠르기 때문에 더 적은 수량의 리소스로 더 많은 요청의 처리가 가능 ● 프론트에 위치한 서버들의 부하를 감소 ● 서버의 처리량을 극대화
  • 11. EVCache 는 ”Memcached” 를 기본으로 만들어 졌습니다. https://github.com/Netflix/evcache/wiki https://github.com/Netflix/EVCache https://medium.com/netflix-techblog/announcing-evcache-distributed-in-memory-datastore-for-cloud-c26a698c27f7 Memcached를 사용하여 얻은 장점은 : ● 간단하고 쉬운 Memcached 인터페이스를 그대로 사용할 수 있었습니다. (get, set, touch, etc.) ● 데이터 크기 또는 네트워크 요청의 증가에 따라 선형적인 확장을 기대할 수 있습니다. (vs getting a bigger box) ● 원하는 수량으로 데이터 복제를 구현할 수 있었습니다. (some clusters run with 2, others with 9) ● AWS 최적화를 통한 구조로 재시도, 폴백과 같은 메커니즘들이 문제 없이 동작할 수 있었습니다. (Optimization f or AWS architecture) ● 원하는 크기의 데이터 사용에 제약이 없습니다. (with data chunking) ● 실시간에 근접한 글로벌 복제를 구현할 수 있었습니다. (Nearline) ● 데이터의 유실을 방지할 수 있었습니다.
  • 12. EVCache의 기본 생김새 • 1개의 가용존에 3개의 인스턴스가 기본이 됩니다. • 1개의 데이터는 3개의 인스턴스에 카테마 일관성 해싱 알 고리즘이 적용되어 분산 저장 됩니다. • “Ketama Consistence Hashing algorithm” 카테마 라이브러리에 대한 자세한 설명은 아래의 링크에서 libketama: Consistent Hashing library for Memcached clients https://www.metabrew.com/article/libketama-consistent-hashing-algo-memcac hed-clients
  • 13. 다수의 가용존에서의 EVCache • 프로덕션에서의 EVCache 는 다수의 가용 존에 배포 됩니다. • 이때 쓰기는 모든 가용존에 수행 됩니다. • 하지만 읽기는 클라이언트가 위치한 가용 존의 EVCache 만을 사용합니다.
  • 14. 넷플릭스의 플랫폼 도구와 연동되어 동작 • 사이드카 (Prana) • EVCache 서버 • EVCache 클라이언트 • 유레카 (서비스 디스커 버리) • 아카이어스 (설정 서버)
  • 15. EVCache 사용 패턴 – Look aside
  • 16. EVCache 사용 패턴 – 프로세스간 데이터 처리 오프라인과 온라인 또는 실시간에 가까운 애플리케이션 간에 동일한 데이터를 흐름에 따라 연속적으로 참조하는 형태로 사용할 수도 있음
  • 17. EVCache 사용 패턴 – 캐시 확장과 워밍 https://www.slideshare.net/ShashiShekarMadappa/evcache-at-netflix
  • 18. 글로벌 리전간 복제 구성 https://medium.com/netflix-techblog/caching-for-a-global-netflix-7bcc457012f1 이 모든 동작은 개발자가 EVCache 클라이언트 라이브러리에 포함된 set() 을 수행하 면 자동으로 이루어지는 과정
  • 19. 구성 요소 : Replication Message Queue ● 이 글로벌 복제의 핵심 구성 요소 입니다. 넷플릭스는 여기에 카프카를 사용하고 있습니다. 이 카프카 클러스터는 2개의 컨슈머를 가집니다. 바 로 다른 리전으로 복제를 담당하는 ‘복제 릴레이 클러스터'입니다. 각 리전별로 독립된 복제 클러스터는 리전에 발생할 수 있는 지연 시간 이 슈로 부터 다른 리전의 복제를 보호합니다. ● 만약 대상 리전이 장시간 문제가 발생하여 복제 지연이 발생한 경우, 카 프카 큐의 버퍼가 꽉 차게 되어 결국 카프카는 오래된 메세지를 드랍 합 니다. 이런 장애 시나리오에서 드랍된 메세지는 절대 대상 리전으로 복 제 하지 않습니다. 복제 캐시를 사용하는 넷플릭스 서비스들은 이런 형 태의 장애를 처리할 수 있도록 디자인 되어 있습니다.
  • 20. 구성요소: Replication Relay ● 복제 릴레이는 카프카 클러스터로 부터 메세지를 가져옵니다. 가져오는 메세지는 다른 리전에 위치한 복제 프락시와 안전한 연결을 구성하고, 복제 요청을 보냅니다. ● 이때 SET과 같은 명령으로 데이터가 필요하다면 로컬의 EVCache에서 데이터를 가져옵니다. 복제 프락시가 데이터를 성공적으로 저장했다는 메세지를 받을떄까지 대기하며, 타임아웃이나 실패가 발생한다면 재시 도 합니다. ● 일시적인 리전간 복제 지연은 매우 자연스럽게 핸들링되고 있습니다. 카 프카는 지속적으로 신규 메세지를 받으며 복제에 지연이 발생하면 완료 되는 동안 백로그를 버퍼로 사용합니다.
  • 21. Replication Proxy ● 복제 프락시 클러스터는 대상 리전의 캐시에 복제 데이터를 저장 하기 위해 동작합니다. 복제 릴레이로 부터 타 리전의 데이터를 받 아 로컬 리전의 캐시에 저장합니다. 이 과정이 성공적이면 릴레이 클러스터에 응답을 리턴하여 복제에 이상이 없음을 알립니다. ● 복제 프락시가 위치한 로컬 리전의 캐시에 데이터를 저장할때는 일반 클라이언트가 사용하는 것과 동일한 EVCache 클라이언트를 사용합니다. 이 클라이언트 라이브러리는 샤딩 인스턴스 선택, 재 시도와 같은 복잡한 작업을 수행합니다. ● 다른 많은 넷플릭스 서비스들과 마찬가지로, 복제 릴레이와 복제 프락시 클러스터들은 다수의 가용존에 배포되어 리전 내에서 발 생할 수 있는 장애에 대비합니다.
  • 22. Performance • 초당 2천 5백만 요청 처리 • 매일 2조개의 데이터가 글로벌 복제 • 수천만개의 오브젝트를 저장 • 수만개의 Memcached 인스턴스 • 각각의 요청은 밀리세컨 단위의 응답성을 가짐
  • 28. 데이터베이스 오프로딩 레거시와 신규 마이크로 서비스에서 모두 사용
  • 29. • 각 마이크로서비스 별로 캐시 클러스터를 준비해 사용 • 이벤트 기반의 메세징을 사용하여 캐시 클러스터간 데이터 복제
  • 30.
  • 32. • 다수의 마이크로서비스로 이루어진 마이크로서비스 아키텍처는 필연적으로 내부에 팬-아웃 현상을 유발한다. • 분산 캐시를 사용함으로 인해 낮은 지연시간을 제공하는 데이터 저장소를 높은 가용성으로 유지할 수 있다. • 메세지 큐를 사용함으로서 캐시 워밍, 캐시의 확장 재구성, 글로벌 복제와 같은 구성이 가능해진다. • 메세지 큐나 캐시에는 성능이나 목적의 수행에 맞는 다양한 도구, 예를 들면 래빗엠큐나 레디스등의 도구를 선택해서 사용할 수 있다. 이때 스프링 클라우드 스트림이나 스프링에서 지원하는 도구를 선 택한다면 더 용이할 것이다. • 카프카에 유입되는 데이터는 캐시-캐시 복제 외에도 캐시-데이터베이스나 이기종 데이터베이스간 데 이터를 복제하는 등의 형태로 응용할 수 있다. • 각 마이크로서비스 개발팀은 운영팀의 지원이 없이도 직접 캐시를 준비해서 사용할 수 있어야 한다. • 오픈 소스의 직접 사용에 대한 지원이 필요한 경우 피보탈 클라우드 캐시(PCC)를 통해 동일한 효과를 노려볼 수 있다.