본문 바로가기

Computer Engineering16

신뢰성 없는 네트워크, GC 이야기 데이터 중심 애플리케이션 설계 8장 '분산 시스템의 골칫거리' 에서 GC 이야기가 나온다. 원격 노드가 일시적으로 응답하기를 멈췄지만(가비지 컬렉션 휴지가 길어졌을 수 있다), 나중에는 다시 응답하기 시작할 수 있다(p278). 심지어는 I/O 중단과 GC 중단이 공모해서 지연을 결합하기도 한다(p297). 원문: I/O pauses and GC pauses may even conspire to combine their delays cf) conspire 는 실제로 공모(직역)했다기 보다 두 가지 독립적인 요소가 서로 의도적으로 협력하는 것처럼(비유적 표현) 보이는 상황을 설명하는 데 사용됐다고 보는게 맞을거 같다. 두 가지 지연 요소가 어떻게 시스템의 전반적인 성능에 더 큰 부정적 영향을 미치는지 강조.. 2024. 1. 7.
DB mid 정리 logical data independence 에 대한 설명으로 적합하지 않는 것은? 1 1) Concerned with internal schema (v) 2) Concerned with conceptual schema 3) It is mainly concerned with the structure or changing the data definition 4) Modification at the logical levels is significant whenever the logical structures of the database are changed Conceptual schema 에 대한 설명으로 적절하지 않는 것은? 4 1) 전체적으로 통합된 데이터 구조이다. 2) 해당 기관이 필요로 하는 모든.. 2023. 4. 16.
DB Connection Storm 1. DB Connection 일반적으로 DB 서버와 애플리케이션 서버는 물리적으로 분리해 운영한다. 그래서 네트워크 통신을 해야하고 서로 Connection을 맺어야 한다. 2. DB Connection Pool TCP 기반 네트워크 통신으로 Connection을 맺어야 하는데 연결을 맺을때는 3 way handshake, 연결을 끊을 때는 4 way handshake 가 필요하다. 즉 연결을 맺고 끊는데 시간이 걸린다. 사용자 요청마다 Connection 을 맺고 끊는 작업을 하게 되면 비효율적이다. 그래서 DB Connection Pool 을 이용해 애플리케이션 서버가 배포될 때 미리 DB 서버와 통신할 때 사용할 Connection 들을 만들어 놓는다. 그리고 사용자 요청이 오면 Pool 에 있는.. 2023. 2. 11.
네이버페이 주문/결제 DB 전환 이슈 우리팀은 네이버페이 주문/결제에 사용중인 Oracle DB 를 nBase-T 라는 분산 DB(사내 솔루션)로 전환 하고 있다. 1. DB 전환이란? 기존 애플리케이션 서버는 Oracle DB 를 사용하고 있다. 새로운 애플리케이션 서버와 nBase-T DB 로 문제없이 전환하기 위해선 실시간 DB 복제가 이뤄져야 한다. cf) 기존 데이터 마이그레이션은 당연히 되어 있다는 전제 cf) DB 전환할 때 꼭 새로운 애플리케이션 서버가 필요한건 아니다. 우리팀은 DB 전환 뿐만 아니라 애플리케이션도 새롭게 개발하고 있다. 새로운 애플리케이션 서버와 nBase-T DB 가 준비되면 사용자 요청을 스위칭해서 전환을 시작한다. 이때 역동기화 복제를 해주는데 롤백을 대비한 조치다. 만약 신규 서버에 문제가 생기면 기.. 2023. 1. 23.
DB 장애로 인한 EDA 기반 이벤트 보정처리 지난주 갑자기 모든 애플리케이션 서버들이 DB 서버와의 네트워크 연결을 실패했다. 전면장애인 상황이다. DB 에 문제가 생기면 내가 담당하는 주문서 서버는 어떤 문제가 발생하고 왜 보정처리가 필요한지 알아보자. // api 응답 에러 메세지 Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Cannot get a connection, pool error Timeout waiting for idle object 사용자가 주문서 화면에서 결제 버튼을 누르면 유효성 검사를 거쳐 결제가 진행되고 최종적으로 주문완료 작업을 수행한다. 만약 결제가 수행되기 전에 DB 문제가 생긴다면 사용자는 불편함을 겪.. 2023. 1. 15.
주문 동시성 이슈 정리 상황 설명 주문서 서버는 이벤트 기반으로 동작한다. 주문서를 만들고 결제 프로세스를 진행하면 '주문 완료 이벤트'를 발행한다. 그러면 해당 이벤트를 consume 해서 아래 그림 1번 작업이 수행된다. 문제는 1번 작업에서 API 를 호출해, 주문/결제 서버로 요청을 보냈는데 Read Timeout 에러가 발생했다. 2번 주문 완료 요청중 에러가 발생하면 주문 실패 이벤트가 발행되고, consumer 가 4번 작업을 수행하면서 새롭게 API 를 호출한다. 여기서 기존 2번 작업과 동시성 이슈가 발생하면서 실제로는 주문이 완료 처리 됐지만 완료 되지 않았다는 결과를 받게 된다. 그래서 주문서 서버는 주문이 이미 완료 됐는지 확인하는 방어로직이 있음에도 불구하고 롤백 프로세스가 진행됐다. 주문서 서버 입장에.. 2022. 11. 14.