본문 바로가기
728x90
반응형

분류 전체보기82

local cache vs global cache 캐시란자주 사용되지만 업데이트는 없는 데이터의 경우, 매번 메인 DB에서 가져오는 것보다는 key value로 이루어진 캐시 메모리에서 조회해오는 것이 속도가 빠르다. 인덱싱이 되지 않은 조인을 통한 쿼리 응답 데이터를 키 value로 캐싱하게 되면 성능 상의 이점이 있다.캐시에 적합한 데이터자주 사용되는 데이터입력에 대해 출력이 항상 동일한 데이터업데이트가 캐시 기간동안 일어나지 않는 데이터local과 global 차이local cache서버마다 캐시를 저장한다.서버 내에서 작동하기에 속도가 빠르다.다른 서버의 캐시를 참조하기 어렵다.참조하기 위해서는 개발자가 직접 API를 만들어야 함.was 인스턴스의 resource를 사용(memory, disk)외부에서 참조하기가 힘들기 때문에 인스턴스가 여러 개.. 2024. 3. 30.
배치에서 socket was closed by server가 터진 후 원인 파악 목적 대개체 작업을 진행 한 후, 여러 배치에서 SQLNonTransientConnectionException이 터졌는데, 문제가 되었던 배치가 있었다. 그러나 해당 배치와 동일한 DB를 사용하는데도 커넥션 문제가 없이 작동하여 DB 상의 문제가 아닌지 혼선을 주었다. 따라서 이에 대한 원인 파악 후, 팀원 분들과 논의해보고 찾아본 것들을 기록하고자 작성한다. 문제 이유 풀 설정이 잡혀있고, quartz 등으로 프로세스가 늘 떠있다가 스케줄링 설정이 돼있는데, 배치서버 혹은 was 서버 중 사용자가 새벽 시간에 아무도 접속하지 않다가 아침에 접속하는 등 query 요청을 장시간 하지 않는 경우에 빈번하게 발생된다. 이런 경우 connection 시간 설정과 DB 연결 시간 설정을 맞춰줘야 한다. 배경 M.. 2024. 3. 30.
scdf kafka 리밸런싱 이슈로 둔갑한 레디스 블로킹 이슈 개요 팀 내 DB에 추가된 데이터를 지속적으로 폴링하여 레디스에 캐싱하는 scdf 프로젝트가 있다. 설정된대로 데이터가 노출되지 않는다는 CS가 발생하여 원인을 분석하다 로그를 추적했다. 최근 여러가지 프로젝트 확장으로 인해, 추가되는 스트림 객체가 그만큼 늘었고, 그에 따라 데이터 양 대비 캐싱 처리가 느려졌을 것을 인지하고 있었다. 로그 속 kafka 리밸런싱 이슈 group sync scdf에서 메세지 큐로 사용하던 kafka 쪽에서 폴링이 poll interval ms를 넘기는 이슈로 인해 컨슈머 리밸런싱이 일어났고, offset 커밋이 제대로 되지 않아 과거 데이터를 계속 컨슘했다. 따라서 최신 데이터로 캐싱되는 것이 아니라 과거 데이터로 캐싱되는 이슈가 있었다. 컨슈머 그룹 리밸런싱 완료되었고.. 2024. 3. 30.
RabbitMQ 네트워크 파티션 발생으로 인한 데이터 큐잉 중단 이슈 개요팀에서 RabbitMQ에 추가된 데이터를 컨슘하여 레디스에 캐싱하는 scdf 프로젝트가 있었다.설정된대로 데이터가 노출되지 않는다는 CS가 발생하여 원인을 분석하던 중 rabbitMQ 쪽을 확인해봤고, 데이터 큐잉이 중단되어 있었다.큐잉이 중단되었기 때문에, 설정된대로 데이터가 노출되지 않았을 것이다.아래의 명령어를 통해 확인해봤더니,$ rabbitmqctl cluster_status기존에는 RabbitMQ에 구성된 노드는 3개였는데rabbitMQ 클러스터를 구성하던 노드 중 하나에서 네트워크 파티션이 발생했다는 것을 확인했다.그리고, 또 다른 노드는 rabbitMQ 클러스터 구성에서 탈퇴되었음을 확인했다.이것이 데이터 큐잉 중단과 관련이 있을 거 같아서 추적해봤다.이슈 1: s.. 2024. 3. 30.
[RabbitMQ] RabbitMQ ACK Producer Confirm Producer가 RabbitMQ에게 Message를 전송한 후 RabbitMQ로부터 ACK를 받는 기법 Producer는 설정에 따라 RabbitMQ의 ACK를 기다리지 않을 수도 있음. Producer는 RabbitMQ에게 메세지 전송 RabbitMQ는 수신한 메세지를 Exchange에게 전달 Exchange는 Exchange에 설정된 규칙에 따라 수신한 메세지를 버리거나, Queue 혹은 다른 Exchange에게 전달한다. (1) Queue가 Mirroring되어 있을 경우 메세지는 미러링된 모든 큐에 복사된 이후 producer에게 ACK를 보낸다. (2) 그렇지 않은 경우 메세지가 버려진다면 RabbitMQ는 Producer에게 바로 ACK를 전송한다. 메세지가 큐.. 2022. 5. 17.
[Java] JVM 구조 2021.05.25 - [Java] - [Java] JDK & JRE & JVM JVM 개요 데이터 영역의 메모리 레이아웃이나 GC에 사용되는 알고리즘, JVM 명령어 실행과 관련된 내부의 최적화(e.g. 기계어로 번역하는 과정) 개발자 재량 JVM 구조 Class loader JVM 내로 클래스파일을 로드하고 연결하는 작업을 수행하는 역할을 한다. 사실 JRE에 속해있지 JVM에 속해있지는 않는다. Execution engine(실행 엔진) 클래스를 실행시키는 역할을 한다. 자바 바이트 코드를 실제로 JVM 내부에서 기계가 실행할 수 있는 형태로 변경한다. JIT(Just In Time) 인터프리터 방식의 단점을 보완하기 위해 도입된 컴파일러다. 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 .. 2022. 5. 2.
728x90
반응형