일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- crontab
- docker
- eclipse
- application 재기동
- Chat gpt
- 모니터링 및 경고 중앙화
- 메시지
- GIT
- 알림
- 도커
- sh
- chat API
- MAC
- 네이버클라우드플랫폼
- error
- AWS
- 네이버웍스
- ChatGPT
- 자바 정규식
- Catalina
- GitLab
- 가상머신 차이
- desktop
- 정규표현식
- 마이크로서비스 패턴
- 제어루프
- MSA
- 리눅스
- linux
- 분산추적
- Today
- Total
시간나는대로 틈틈히 정리 합시다~~!!!
[마이크로서비스 디자인 패턴] 리액티브 마이크로서비스 (Reactive Microservice) 본문
1. 문제점
- 보통 HTTP 기반의 Restful Json API와 같은 블로킹 I/O 모델을 사용해 동기식 통신을 구현해 왔다.
- 블로킹 I/O를 사용하면 요청을 처리하는 동안 운영체제의 스레드를 점유하게 된다.
- 동시 요청 수 혹은 요청과 관련된 컴포넌트가 증가하면 운영체제의 가용 스레드가 부족해
응답 시간이 늦거나 서버가 중단되는 문제가 발생할 수 있다.
- 블로킹 I/O를 과도하게 사용하면 마이크로서비스 시스템에 오류가 발생하기 쉽다.
- 연쇄 장애가 발생할 수 있다.
> 어떤 서비스의 지연 시간이 증가하면 가용 스레드가 부족해져서 클라이언트가 실패할 수 있다.
> 이런 상황은 클라이언트의 클라이언트에게도 동일한 유형의 문제를 유발하게 된다.
2. 해결책
논블로킹 I/O를 사용해 데이터베이스나 다른 마이크로서비스가 처리하길 기다리는동안 스레드가 할당되지 않게 한다.
- 가능하다면 비동기(asynchronous) 프로그래밍 모델을 사용한다.
즉 메시지를 보낸 후 수신자가 메시지를 처리하길 기다리지 않는다.
- 동기식 프로그래밍 모델을 선호한다면 리액티브 프레임워크를 사용한다.
> 리액티브 프레임워크 : 논블로킹 I/O를 사용해 응답을 기다리는 동안에도 스레드 할당 없이 동기식 요청을 실행한다.
- 마이크로서비스는 의존하는 서비스가 중단되더라도 응답할 수 있도록 탄력성 있게 설계돼야 하며,
중단된 서비스가 재개되면 클라이언트가 서비스를 다시 사용할 수 있어야 한다.
(자가치유[self-healing] 라고 한다.)
3. 구현된 오픈소스 도구
- 스프링부트 : Spring Reactor, Spring WebFlux
'IT' 카테고리의 다른 글
마이크로서비스 란? (0) | 2021.03.27 |
---|---|
[마이크로서비스 디자인 패턴] 구성 중앙화 (Central Configuration) (0) | 2021.03.27 |
[마이크로서비스 디자인 패턴] 에지 서버 (edge server) (0) | 2021.03.27 |
[마이크로서비스 디자인 패턴] 서비스 검색 (Service discovery) (1) | 2021.03.26 |
[Java] 정규표현식 문법 (0) | 2021.03.25 |