Open Feign 설정 설명 - Cake-ly/cake-ly-wiki GitHub Wiki
Open Feign 설정 정리
Feign 클라이언트?
- Spring Cloud 에서 제공하는 선언적 웹 서비스 클라이언트
- RESTful 웹 서비스 호출 간소화를 위해 등장 - 인터페이스 기반
원리
- 인터페이스에 정의된 메서드 시그니처를 분석해 - HTTP 요청을 동적으로 생성
설정
Feign
feign:
client:
config:
default:
connectTimeout: 10000 # 10초
readTimeout: 10000 # 10초
loggerLevel: basic # URL, 응답 코드, 시간만 로깅
compression:
request:
enabled: true
response:
enabled: true
- connectionTimeout
- 타겟 서버와 연결 시도하는 시간 최대 10초
- readTimeout
- 연결 후 응답을 기다리는 데 최대 시간 10초
- loggerLevel
- 요청 URL, 응답 코드, 소요 시간만 로깅처리
- compression
- 요청과 응답 본문 압축처리 네트워크 대역폭을 줄임
- 물론 압축 때문에 응답 시간이 늘어날 순 있음.
Resilience4j - 회복성 패턴
머임?
- MSA 환경에서 시스템 회복성 강화를 위해 등장하는 라이브러리임.
- 서킷 브레이커 (https://namu.wiki/w/%EC%84%9C%ED%82%B7%EB%B8%8C%EB%A0%88%EC%9D%B4%EC%BB%A4) - 회로 차단기
- 재시도
- 벌크헤드
- 타임리미터 등 패턴을 쉽게 사용할 수 있게 제공.
- 서비스 장애 감지
- 장애 영향 최소화 역할.
그래서 왜쓰는데.
- 만약 넷플릭스 에서 공통적으로 많이 사용되는 서비스가 하나가 장애가 발생했다고 생각해보자.
- 하나의 서비스의 장애가 연결된 1000개의 서버로 에러를 뱉을것이다.
- 만약 서킷브레이커가 존재하지 않는다면, 특정 스레드는 계속적으로 해당 api 를 호출하려고 시도를 하게 될 것이다.
- 또한 지속적으로 해당 api를 여러 서버에서 동시에 호출함으로
- 벌크헤드가 발생하게 되는데 이때 장애 서비스의 리소스 고갈을 유도하기도 한다.
설정
resilience4j:
circuitbreaker:
instances:
default:
slidingWindowSize: 20
minimumNumberOfCalls: 10
permittedNumberOfCallsInHalfOpenState: 5
waitDurationInOpenState: 10s
failureRateThreshold: 50
retry:
instances:
default:
maxAttempts: 3
waitDuration: 2s
retryExceptions:
- java.io.IOException
- java.net.ConnectException
- org.springframework.web.client.ResourceAccessException
bulkhead:
instances:
default:
maxConcurrentCalls: 30
timelimiter:
instances:
default:
timeoutDuration: 8s
cancelRunningFuture: true
서킷 브레이커
- slidingWindowSize
- 최근 20번의 호출을 기반으로 실패율을 계산하도록 한다.
- minimumNumberOfCalls
- 서킷 브레이커 동작을 위한 최소한의 호출 수를 정의한다.
- 너무 모수가 적으면 신뢰도가 낮기에 최소 N 개 이상으로 호출이 된 경우에만 서킷 브레이커가 동작하도록 하는 것이다.
- failureRateThreshold
-
실패율이 50% 가 넘는 경우 서킷이 열린다.
OPEN, HALF OPEN, CLOSED
- 열림
> - 서킷이 열린다는 것은
- 모든 호출이 차단된다는 의미이다.
- 반열림
> - 제한된 호출만 허용해서 서비스가 정상인지 확인하는 과정임
- 성공시 → 닫힘
- 실패시 → 열림
- 닫힘
> - 호출이 정상적으로 처리되는 상태
- slidingWindowSize 내에서 실패율이 N % 미만이면 해당 상태를 유지한다.
- 열림
> - 서킷이 열린다는 것은
-
- waitDurationInOpenState
- 열린 상태에서 10초 후 반열림으로 전환한다.
벌크헤드
- maxConcurrentCalls
- 동시 호출 수를 제한해 시스템 과부하를 방지한다.
- 최대 N 개의 동시 호출을 허용하는것이다.
타임리미터
- timeoutDuration
- N 초 내에 응답 없으면 종료처리
재시도
- maxAttempts
- 최대 N 회 시도
- waitDuration
- 재시도 간에 2초 동안 대기한다.
- retryException
- 특정 예외 발생 시 재시도함.