SlideShare une entreprise Scribd logo
1  sur  16
Hystrix를 이용한 고가용성
어플리케이션 개발
MP사업부문 Platform 개발Unit
Infra개발팀 조경태
Agenda
• Hystrix란?
• Hystrix의 필요성
• Hystrix Command
• Hystrix dashboard
• Hystrix metrics
• Hystrix plugin
Hystrix?
Hystrix?-Circuit breaker!
• fail fast
• resilience
• fault tolerance
• fallback
• library
Circuit breaker의 필요성
내부
Service A
내부
Service B
내부
Service C
CACHE A CACHE B
QUEUE
내부API
외부
API
DB A
DB B
DB C
외부
ServiceB
외부
ServiceA
외부
ServiceC
외부
ServiceC
외부
API
내부
Service A
내부
Service C
외부
API
내부
Service B
내부
Service C
Hystrix의 해법
내부
Service A
내부
Service B
내부
Service C
외부
API
외부
ServiceB
외부
ServiceA
외부
ServiceC
Hystrix
command
서비스 정상화
체크
fail fast 또는
대체 로직
Hystrix Command
public class HelloCommand extends HystrixCommand<String> {
private boolean errorFlag = false;
public HelloCommand(boolean errorFlag) {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("TestGroup"))
.andCommandKey(HystrixCommandKey.Factory.asKey("Hello"))
.andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("TestThread"))
.andCommandPropertiesDefaults(
HystrixCommandProperties.Setter().withCircuitBreakerErrorThresholdPercentage(70))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withExecutionIsolationStrategy(ExecutionIsolationStrategy.THREAD)));
this.errorFlag = errorFlag;
}
@Override
protected String run() throws Exception {
if(errorFlag) {
throw new RuntimeException("오류 발생");
}
return "정상 처리 결과";
}
@Override
protected String getFallback() {
return "대체 로직 처리 결과";
}
}
public class HelloCommandTest {
@Test
public void normalProcessTest() {
HelloCommand command = new HelloCommand(false);
Assert.assertEquals("정상 처리 결과", command.execute());
}
@Test
public void abnormalProcessTest() {
HelloCommand command = new HelloCommand(true);
Assert.assertEquals("대체 로직 처리 결과", command.execute());
}
}
Hystrix PropertiesProperties구분 key default value
Command
Execution
execution.isolation.strategy THREAD
execution.isolation.thread.timeoutInMilliseconds 1000
execution.timeout.enabled
true
execution.isolation.thread.interruptOnTimeout
true
execution.isolation.semaphore.maxConcurrentRequests 10
Command Fallback
fallback.isolation.semaphore.maxConcurrentRequests 10
fallback.enabled
true
Command Circuit
Breaker
circuitBreaker.enabled
true
circuitBreaker.requestVolumeThreshold 20
circuitBreaker.sleepWindowInMilliseconds 5000
circuitBreaker.errorThresholdPercentage 50
circuitBreaker.forceOpen
false
circuitBreaker.forceClosed
false
Command Metrics
metrics.rollingStats.timeInMilliseconds 10000
metrics.rollingStats.numBuckets 10
metrics.rollingPercentile.enabled
true
metrics.rollingPercentile.timeInMilliseconds 60000
metrics.rollingPercentile.numBuckets 6
Thread VS Semaphore
• Thread
• 별도 Thread pool의 thread로 HystrixCommand 수행
• 수행중인 thread의 수행시간 오버시 취소 가능
• semaphore에 비해 상대적으로 성능 오버헤드가 큼
• peak rps * 응답시간(sec) + 여유공간으로 thread pool core size 지정 필요
• Semaphore
• 어플리케이션 워킹 thread가 HystrixCommand 수행
• 인스턴스당 초당 수백건 이상의 요청을 처리해야 하는 경우 선택
11번가는 어떻게?
• 11번가에도 주요 연동 프로세스엔 스위치 기능 구현
• 자동 ON/OFF, 수동 ON/OFF 개별 구현
• Hystrix의 장점
• instance별 제어
• 스위치 반영 즉시성
• 요청 횟수와 수행시간등 부가적인 정보 제공
• Dashboard 제공
Hystrix Dashboard
Hystrix Dashboard
HystrixStreamServlet
<servlet>
<description></description>
<display-name>HystrixMetricsStreamServlet</display-name>
<servlet-name>HystrixMetricsStreamServlet</servlet-name>
<servlet-class>com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HystrixMetricsStreamServlet</servlet-name>
<url-pattern>/hystrix.stream</url-pattern>
</servlet-mapping>
• Metric 수집을 위해 각 instance에 stream servlet 추가
필요
Hystrix metrics 수집
Hystrix Dashboard
(Proxy)
Application
(HystrixEventStrea
m)
Application
(HystrixEventStrea
m)
Application
(HystrixEventStrea
m)
Application
(HystrixEventStrea
m)
Turbine Stream
Aggregator
text/event-stream
text/event-stream
text/event-stream
Hystrix plugin
• Dashboard의 아쉬운 점
• 현재 데이터만 모니터링 가능
• 문제 발생 인스턴스를 확인하기 힘듦
• 스위치 수동 제어기능이 없음
• 문제 발생시 자동 알림 기능 부재
• Plugin을 이용 입맛대로 수정 가능
• Event notifier
• Metric Publisher
• Properties Strategy
• Concurrency Strategy
마치며
• 11번가 Hystrix 적용 현황
• 커스텀 Dashboard로 문제 발생 instance와
command만 별도 확인 및 과거 이력 조회 기능 제
공
• Client APP(Android)로 쉽게 스위치 컨트롤 기능
제공
• 실시간 Hystrix properties 변경 기능 제공
• 비동기 Queue에 적용. Cache등 적용 확대 중

Contenu connexe

Tendances

DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)AWSKRUG - AWS한국사용자모임
 
[243]kaleido 노현걸
[243]kaleido 노현걸[243]kaleido 노현걸
[243]kaleido 노현걸NAVER D2
 
코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개태준 문
 
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안SANG WON PARK
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)Hyunmin Lee
 
Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터jinho park
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스Dan Kang (강동한)
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 ChefOpen Source Consulting
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)Brian Hong
 
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10![웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!Open Source Consulting
 
[142]편광을 활용한6 dof 전현기
[142]편광을 활용한6 dof 전현기[142]편광을 활용한6 dof 전현기
[142]편광을 활용한6 dof 전현기NAVER D2
 
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)Jongwon Han
 
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유Kyoungchan Lee
 
Real-time Big Data Analytics Practice with Unstructured Data
Real-time Big Data Analytics Practice with Unstructured DataReal-time Big Data Analytics Practice with Unstructured Data
Real-time Big Data Analytics Practice with Unstructured DataTed Won
 
Microsoft Azure 클라우드 에서 Elasticsearch 서비스 사용 - 이건복 님
Microsoft Azure 클라우드 에서 Elasticsearch 서비스 사용 - 이건복 님Microsoft Azure 클라우드 에서 Elasticsearch 서비스 사용 - 이건복 님
Microsoft Azure 클라우드 에서 Elasticsearch 서비스 사용 - 이건복 님NAVER D2
 

Tendances (20)

Dynamodb 삽질기
Dynamodb 삽질기Dynamodb 삽질기
Dynamodb 삽질기
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
 
Ansible과 CloudFormation을 이용한 배포 자동화
Ansible과 CloudFormation을 이용한 배포 자동화Ansible과 CloudFormation을 이용한 배포 자동화
Ansible과 CloudFormation을 이용한 배포 자동화
 
[243]kaleido 노현걸
[243]kaleido 노현걸[243]kaleido 노현걸
[243]kaleido 노현걸
 
코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개
 
Aws로 ci하기 안기욱
Aws로 ci하기 안기욱Aws로 ci하기 안기욱
Aws로 ci하기 안기욱
 
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
 
Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 Chef
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
 
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10![웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
 
[142]편광을 활용한6 dof 전현기
[142]편광을 활용한6 dof 전현기[142]편광을 활용한6 dof 전현기
[142]편광을 활용한6 dof 전현기
 
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
 
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
 
Real-time Big Data Analytics Practice with Unstructured Data
Real-time Big Data Analytics Practice with Unstructured DataReal-time Big Data Analytics Practice with Unstructured Data
Real-time Big Data Analytics Practice with Unstructured Data
 
Microsoft Azure 클라우드 에서 Elasticsearch 서비스 사용 - 이건복 님
Microsoft Azure 클라우드 에서 Elasticsearch 서비스 사용 - 이건복 님Microsoft Azure 클라우드 에서 Elasticsearch 서비스 사용 - 이건복 님
Microsoft Azure 클라우드 에서 Elasticsearch 서비스 사용 - 이건복 님
 

Similaire à Hystrix소개

20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)Amazon Web Services Korea
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
 
091106kofpublic 091108170852-phpapp02 (번역본)
091106kofpublic 091108170852-phpapp02 (번역본)091106kofpublic 091108170852-phpapp02 (번역본)
091106kofpublic 091108170852-phpapp02 (번역본)Taegil Heo
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기Ted Won
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기John Kim
 
[Partner TechShift 2017] AWS로 당신의 소프트웨어를 혁신하라
[Partner TechShift 2017] AWS로 당신의 소프트웨어를 혁신하라[Partner TechShift 2017] AWS로 당신의 소프트웨어를 혁신하라
[Partner TechShift 2017] AWS로 당신의 소프트웨어를 혁신하라Amazon Web Services Korea
 
F5 프로그래밍 기능
F5 프로그래밍 기능F5 프로그래밍 기능
F5 프로그래밍 기능itian-f5
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
designing, implementing and delivering microservices with event storming, spr...
designing, implementing and delivering microservices with event storming, spr...designing, implementing and delivering microservices with event storming, spr...
designing, implementing and delivering microservices with event storming, spr...uEngine Solutions
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live세준 김
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
멀티클라우드 Service Mesh
멀티클라우드 Service Mesh멀티클라우드 Service Mesh
멀티클라우드 Service MeshJeong-Ho Na
 
마이크로서비스 아키텍처 기반의 의료정보시스템 고도화 전환사례.건국대학교병원.이제관
마이크로서비스 아키텍처 기반의 의료정보시스템 고도화 전환사례.건국대학교병원.이제관마이크로서비스 아키텍처 기반의 의료정보시스템 고도화 전환사례.건국대학교병원.이제관
마이크로서비스 아키텍처 기반의 의료정보시스템 고도화 전환사례.건국대학교병원.이제관제관 이
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석uEngine Solutions
 
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)Amazon Web Services Korea
 
Opensource apm scouter in practice
Opensource apm scouter in practiceOpensource apm scouter in practice
Opensource apm scouter in practicedonghoonlee18659041
 

Similaire à Hystrix소개 (20)

20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 
I flux 소개-slideshare
I flux 소개-slideshareI flux 소개-slideshare
I flux 소개-slideshare
 
091106kofpublic 091108170852-phpapp02 (번역본)
091106kofpublic 091108170852-phpapp02 (번역본)091106kofpublic 091108170852-phpapp02 (번역본)
091106kofpublic 091108170852-phpapp02 (번역본)
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기
 
RHAMT 소개
RHAMT 소개RHAMT 소개
RHAMT 소개
 
[Partner TechShift 2017] AWS로 당신의 소프트웨어를 혁신하라
[Partner TechShift 2017] AWS로 당신의 소프트웨어를 혁신하라[Partner TechShift 2017] AWS로 당신의 소프트웨어를 혁신하라
[Partner TechShift 2017] AWS로 당신의 소프트웨어를 혁신하라
 
F5 프로그래밍 기능
F5 프로그래밍 기능F5 프로그래밍 기능
F5 프로그래밍 기능
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
designing, implementing and delivering microservices with event storming, spr...
designing, implementing and delivering microservices with event storming, spr...designing, implementing and delivering microservices with event storming, spr...
designing, implementing and delivering microservices with event storming, spr...
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
 
멀티클라우드 Service Mesh
멀티클라우드 Service Mesh멀티클라우드 Service Mesh
멀티클라우드 Service Mesh
 
마이크로서비스 아키텍처 기반의 의료정보시스템 고도화 전환사례.건국대학교병원.이제관
마이크로서비스 아키텍처 기반의 의료정보시스템 고도화 전환사례.건국대학교병원.이제관마이크로서비스 아키텍처 기반의 의료정보시스템 고도화 전환사례.건국대학교병원.이제관
마이크로서비스 아키텍처 기반의 의료정보시스템 고도화 전환사례.건국대학교병원.이제관
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
 
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
 
Opensource apm scouter in practice
Opensource apm scouter in practiceOpensource apm scouter in practice
Opensource apm scouter in practice
 

Hystrix소개

  • 1. Hystrix를 이용한 고가용성 어플리케이션 개발 MP사업부문 Platform 개발Unit Infra개발팀 조경태
  • 2. Agenda • Hystrix란? • Hystrix의 필요성 • Hystrix Command • Hystrix dashboard • Hystrix metrics • Hystrix plugin
  • 4. Hystrix?-Circuit breaker! • fail fast • resilience • fault tolerance • fallback • library
  • 5. Circuit breaker의 필요성 내부 Service A 내부 Service B 내부 Service C CACHE A CACHE B QUEUE 내부API 외부 API DB A DB B DB C 외부 ServiceB 외부 ServiceA 외부 ServiceC 외부 ServiceC 외부 API 내부 Service A 내부 Service C 외부 API 내부 Service B 내부 Service C
  • 6. Hystrix의 해법 내부 Service A 내부 Service B 내부 Service C 외부 API 외부 ServiceB 외부 ServiceA 외부 ServiceC Hystrix command 서비스 정상화 체크 fail fast 또는 대체 로직
  • 7. Hystrix Command public class HelloCommand extends HystrixCommand<String> { private boolean errorFlag = false; public HelloCommand(boolean errorFlag) { super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("TestGroup")) .andCommandKey(HystrixCommandKey.Factory.asKey("Hello")) .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("TestThread")) .andCommandPropertiesDefaults( HystrixCommandProperties.Setter().withCircuitBreakerErrorThresholdPercentage(70)) .andCommandPropertiesDefaults(HystrixCommandProperties.Setter() .withExecutionIsolationStrategy(ExecutionIsolationStrategy.THREAD))); this.errorFlag = errorFlag; } @Override protected String run() throws Exception { if(errorFlag) { throw new RuntimeException("오류 발생"); } return "정상 처리 결과"; } @Override protected String getFallback() { return "대체 로직 처리 결과"; } } public class HelloCommandTest { @Test public void normalProcessTest() { HelloCommand command = new HelloCommand(false); Assert.assertEquals("정상 처리 결과", command.execute()); } @Test public void abnormalProcessTest() { HelloCommand command = new HelloCommand(true); Assert.assertEquals("대체 로직 처리 결과", command.execute()); } }
  • 8. Hystrix PropertiesProperties구분 key default value Command Execution execution.isolation.strategy THREAD execution.isolation.thread.timeoutInMilliseconds 1000 execution.timeout.enabled true execution.isolation.thread.interruptOnTimeout true execution.isolation.semaphore.maxConcurrentRequests 10 Command Fallback fallback.isolation.semaphore.maxConcurrentRequests 10 fallback.enabled true Command Circuit Breaker circuitBreaker.enabled true circuitBreaker.requestVolumeThreshold 20 circuitBreaker.sleepWindowInMilliseconds 5000 circuitBreaker.errorThresholdPercentage 50 circuitBreaker.forceOpen false circuitBreaker.forceClosed false Command Metrics metrics.rollingStats.timeInMilliseconds 10000 metrics.rollingStats.numBuckets 10 metrics.rollingPercentile.enabled true metrics.rollingPercentile.timeInMilliseconds 60000 metrics.rollingPercentile.numBuckets 6
  • 9. Thread VS Semaphore • Thread • 별도 Thread pool의 thread로 HystrixCommand 수행 • 수행중인 thread의 수행시간 오버시 취소 가능 • semaphore에 비해 상대적으로 성능 오버헤드가 큼 • peak rps * 응답시간(sec) + 여유공간으로 thread pool core size 지정 필요 • Semaphore • 어플리케이션 워킹 thread가 HystrixCommand 수행 • 인스턴스당 초당 수백건 이상의 요청을 처리해야 하는 경우 선택
  • 10. 11번가는 어떻게? • 11번가에도 주요 연동 프로세스엔 스위치 기능 구현 • 자동 ON/OFF, 수동 ON/OFF 개별 구현 • Hystrix의 장점 • instance별 제어 • 스위치 반영 즉시성 • 요청 횟수와 수행시간등 부가적인 정보 제공 • Dashboard 제공
  • 14. Hystrix metrics 수집 Hystrix Dashboard (Proxy) Application (HystrixEventStrea m) Application (HystrixEventStrea m) Application (HystrixEventStrea m) Application (HystrixEventStrea m) Turbine Stream Aggregator text/event-stream text/event-stream text/event-stream
  • 15. Hystrix plugin • Dashboard의 아쉬운 점 • 현재 데이터만 모니터링 가능 • 문제 발생 인스턴스를 확인하기 힘듦 • 스위치 수동 제어기능이 없음 • 문제 발생시 자동 알림 기능 부재 • Plugin을 이용 입맛대로 수정 가능 • Event notifier • Metric Publisher • Properties Strategy • Concurrency Strategy
  • 16. 마치며 • 11번가 Hystrix 적용 현황 • 커스텀 Dashboard로 문제 발생 instance와 command만 별도 확인 및 과거 이력 조회 기능 제 공 • Client APP(Android)로 쉽게 스위치 컨트롤 기능 제공 • 실시간 Hystrix properties 변경 기능 제공 • 비동기 Queue에 적용. Cache등 적용 확대 중