Weblogic ~ OHS plugin parameter들에는 ConnectRetrySecs, ConnectionTimeoutSecs, WLIOTimeoutSecs 등의 시간과 관련된 유형들이 존재한다.
이들에 대한 이해
ConnectRetrySecs 테스트 !!!!
1. Application에 Thread.sleep()을 걸어보았다. 만약 이 sleep 시간이 ConnectRetrySecs와 동일하거나 적은 경우
sleep이 5초이며
ConnectRetrySecs가 5초로 동일하면
sleep 시간 이후 application이 잘 호출된다 (호출 시간 약 5초)
2. Thread.sleep() 시간이 ConnectRetrySecs 보다 큰 경우
sleep이 6초로 위의 ConnectRetrySecs 5초보다 크다.
동일하게 Sleep 6초 이후 application이 잘 호출됨
============================================================================
## 테스트에 대한 고찰
=> ConnectRetrySecs는 '재시도'에 관련된 옵션이기에 WEB~WAS 연동에 대한 첫번째 시도에 대해 영향을 주지 않는다.
============================================================================
WLIOTimeoutSecs 테스트 !!!!
1. Application에 Thread.sleep()을 걸어보았다. WLIOTimeoutSecs가 sleep 시간보다 크거나 같은 경우
WLIOTimeoutSecs 10초
+ Idempotent 는 따로 설정을 하지 않았기에 default 값인 ON 이다.
Sleep 시간과 WLIOTimeoutSecs 시간이 같다.
WebLogic 첫번째 인스턴스가 기동중이기에 10초 이후 호출이 된다.
1. Application의 Thread.sleep()가 WLIOTimeoutSecs보다 큰 경우
Thread.sleep 11초
최초 호출에 대한 WLIOTimeoutSecs가 application 호출 시간보다 적기 때문에 Web Server Bridge 에러가 나타난다.
============================================================================
## 테스트에 대한 고찰
WLIOTimeoutSecs는 Servlet 수행 시간보다 크게 설정해야 한다.
============================================================================
Idempotent 테스트 !!!!
1. Idempotent가 OFF 일 때
위 상황이면 Idempotent 가 OFF이기 때문에 WLIOTimeoutSecs까지만 연결을 시도해보고 application이 연결이 안되면 web server bridge error를 나타낸다.
2. Idempotent가 ON일 때
WebLogic 인스턴스는 3개, Idempotent는 ON, WLIOTimeoutSecs는 10초인 상황이다.
Application이 호출이 안되는 상황에서 (Thread.sleep을 11초를 설정해놓았다), Web Server Bridge error가 40초가 걸려 호출되는 결과를 얻었다.
#### 결과에 대한 분석
- 총 소요 시간 : 40초
=>
WLIOTimeoutSecs으로 인한 첫번째 시도 (10초)
~ Idempotent ON
+ 첫번째 Weblogic instance 시도 (10초)
~ Idempotent ON
+ 두번째 Weblogic instance 시도 (10초)
~ Idempotent ON
+ 세번째 Weblogic instance 시도 (10초)
## HTTP session flow에 입각한 분석 1. Plugin이 web server로부터 request 받음
2. WebLogic session ID가 request에 없음
3. Header와 post data를 WebLogic으로 보냄
4. WLIOTimeoutSecs(10초)동안 응답 대기
5. 서버가 응답하지 않았고 Idempotent가 ON
6. Dynamic server list에 해당 server를 ‘bad’로 인식 (여기까지 10초 소요됨)
7. 첫번째 failover이기에 다시 1~6 과정 거침
8. 두번째 failover부터는 request(sleep 11초)가 ConnectionTimeoutSecs(15초)를 넘는지 확인
9. 8번이 false이기 때문에 WebLogicCluster나 Dynamic server list의 다음 server로 시도
10. WLSocketTimeoutSecs(default 2) 안에 연결이 되었는지 확인
11. 3~10 과정 거침 (각 10초씩 소요(WLIOTimeoutSecs)
12.I dempotent가 알고리즘에 의해 더 이상 가용한 서버를 찾을 수 없을 때까지 반복 (instance 3회)
13. 총 최초 시도 10초 + 각 3회씩 10초 대기 = 40초 대기 이후 Web Server Bridge error
|
### Idempotent가 ON일때 생길 수 있는 issue
=> Thread.sleep 시간과 WLIOTimeoutSecs 시간이 동일할 경우, Idempotent가 ON일 때 다음과 같인 이슈가 발생할 수 있다.
호출 시간이 40초가 찍히는 경우 확인
4번째 시도에서 READ_TIMEOUT이 걸리지 않고 application이 호출됐다.
==============================================================================
## 원인 분석
Servlet 수행 시관과 WLIOTimeoutSecs가 근접할 경우 서버는 application을 호출하지 않았다고 판단하고 넘어가지만,
실제 application은 호출이 되는 경우가 발생할 수 있다.
ex > 결제 시스템에서 Idempotent가 ON이라서 이중결제가 되는 경우가 발생할 수도 있음
===> 따라서 Idempotent를 OFF로 권장한다.
'WAS & WEB' 카테고리의 다른 글
CORS (0) | 2023.03.20 |
---|---|
Eclipse MAT (0) | 2022.12.14 |
파일 업로드 용량 제한 (0) | 2022.09.30 |
Sticky Session & Cluster (0) | 2022.09.13 |
mod_wl_ohs.conf 테스트 (0) | 2022.07.21 |