
Circuit Breaker - Hystrix 분산 시스템에서의 Latency Tolerance and Fault Tolerance Hystrix 적용하기 @HystrixCommand public String anyMethodWithExternalDependency() { URI uri = URI.create("http://172.32.1.22:8090/recommended"); String result = this.restTemplate.getForObject(uri, String.class); return result; } 위의 메소드를 호출할 때 벌어지는 일 이 메소드 호출을 “Intercept” 하여 “대신” 실행 실행된 결과의 성공 / 실패 (Exception) 여부를 기록하고 “통계”를 낸다...

Netflix OSS 플랫폼(AWS) 안의 여러 컴포넌트와 자동화 도구를 사용하면서 파악한 패턴과 해결 방법을 블로그, 오픈 소스로 공개. Spring Cloud Spring Cloud는 Spring boot를 기반으로 MSA 구축에 특화된 라이브러리들의 집합 Spring Cloud에는 Eureka, Hystrix, Ribbon, Zuul 등 많은 넷플릭스 OSS가 통합되어 있음. 모놀리틱에서의 의존성 호출 모놀리틱에서의 의존성 호출은 100% 신뢰! Failure as a First Class Citizen (Failure -> 가장 중요하게 고려해야하는 요소) 분산 시스템, 특히 클라우드 환경에선 실패는 일반적인 표준이다. 모놀리틱엔 없던 장애 유형 한 서비스의 가동율 최대 99.99% 10억 요청 ..

Cloud Native 정의 '클라우드 네이티브'는 클라우드 컴퓨팅 모델을 사용하는 것을 전제로 설계된 시스템과 서비스를 의미함. '클라우드 네이티브'의 핵심은 애플리케이션을 어떻게 만들고 배포하는지에 있으며 위치는 중요하지 않음. 클라우드 서비스를 활용한다는 것은 컨테이너와 같이 민첩하고 확장 가능한 구성 요소를 사용해서 재사용 가능한 개별적인 기능을 제공하는 것을 의미한다. 이러한 기능은 멀티 클라우드와 같은 여러 기술 경계 간에 매끄럽게 통합되므로 제공 팀이 반복 가능한 자동화와 오케스트레이션을 사용해서 빠르게 작업 과정을 반복할 수 있다 - 앤디 맨, Chief Technology Advocate at Splunk Cloud Native의 특징 신축성 (Resiliecy) 민첩성 (Agility)..

MSA 정의 MSA란 시스템을 여러개의 독립된 서비스로 나눠서, 이 서비스를 조합함으로서 기능을 제공하는 아키텍처 디자인 패턴. 아마존의 선택 (2002년경 제프 베조스 메일) 1. 모든 팀들은 데이터와 기능들을 서비스 인터페이스로 연결시켜라. 2. 팀들은 이 인터페이스를 통해서만 연락해야 한다. 3. 다른 어떤 커뮤니케이션 방법도 허용되지 않는다. 직접 링크를 보내거나 다른 팀의 스토리지에 직접 억세스 해서도 안 되며, 공유 메모리나 백도어 같은 것도 안 된다. 모든 커뮤니케이션은 네트워크를 통한 서비스 인터페이스로 이루어져야 한다. 4. 어떤 기술을 쓰든 상관없다. HTTP, Cobra, Pubsub, 독자 프로토콜...그건 상관없다. 베조스는 그런데 관심 없다. 5. 모든 서비스 인터페이스는 예외 ..

모놀리틱 아키텍처 예시 주문 ↔ 상품 간 서로 정보를 가져다 쓰기 위해서 Share.jar를 두고, 공유해서 사용. 대부분의 개발은 Share.jar에 개발하게 됨. Share.jar의 전체적인 싱크를 맞춰야하므로, 배포작업이 커지게 됨. 버저닝할 때 SNAPSHOT으로 넣어둠. (SNAPSHOT이란 고정된 버전이 아님. SNAPSHOT이면 계속 원격 레포지토리에서 새로 받아오게 됨.) 하나의 DB 소스 코드만 100MB 이상 (수백만 라인의 공통 코드) 모놀리틱 아키텍처 정리 대부분 IT 회사의 시작은 모놀리틱 장점 개발이 단순함 (repository 하나 체크아웃 받아서 띄우면 되니까) 배포가 단순함 (war 하나만 배포하면 되니까) Scale-out이 단순함 (서버 하나 복사하면 되니까) 하지만 D..
5.1 필터링 5.1.1 프레디케이트로 필터링 스트림 인터페이스는 filter 메서드를 지원함. filter 메서드는 프레디케이트를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환함. // 프레디케이트 필터링 List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(Collectors.toList()); 5.1.2 고유 요소 필터링 스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드도 지원함. // 고유 요소 필터링 List numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4); numbers.stream().filter(i -> i % 2 == 0).disti..
4.1 스트림이란 무엇인가? 스트림은 자바 8 API에 새로 추가된 기능 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있음. 또한 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있음. // 자바 7 기준 List lowCaloricDishes = new ArrayList(); for (Dish dish : Dish.menu) { if (dish.getCalories() < 400) { lowCaloricDishes.add(dish); } } // 칼로리 적은 순으로 정렬 Collections.sort(lowCaloricDishes, new Comparator() { @Override public int compare(Dish o1, Dish o2) { return Int..
3.1 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있음. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있음. 람다의 특징 익명 : 보통의 메서드와 달리 이름이 없음 함수 : 특정 클래스에 종속되지 않으므로 함수라고 부름. 전달 : 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있음 간결성 : 익명 클래스처럼 많은 코드를 작성할 필요 없음 람다는 세 부분으로 이루어짐. // (파라미터 리스트) -> 람다 바디 (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) 파라미터 리스트 화살표 람다 바디 람다는 표현하는 방식이 ..
- Total
- Today
- Yesterday
- Handler Interceptor
- Filter
- 프로그래머스 Level 3
- blocking
- 필터
- 해시
- a
- 인터셉터
- 스택/큐
- 비동기
- Asynchronous
- 프로그래머스 Level 1
- http://www.nextree.co.kr/p6960/
- 핸들러 인터셉터
- 프로그래머스
- 동기
- Synchronous
- 코딩테스트 고득점 Kit
- non-blocking
- 논블로킹
- 프로그래머스 Level 2
- 블로킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |