본문 바로가기

소프트웨어-이야기/인프라

카프카 컨슈머가 배포될 때 발생할 수 있는 문제 — 리밸런싱과 CooperativeStickyAssignor Kafka Consumer 애플리케이션을 배포할 때, 단순히 새 버전을 올리는 것만으로도 이벤트 처리가 수 초에서 수십 초간 중단될 수 있다. 배포 중인 인스턴스뿐 아니라 나머지 컨슈머까지 영향을 받아 전체 파티션의 처리가 멈추는 것이 문제다. 원인은 리밸런싱(Rebalancing)이다. 이 글에서는 배포 시 발생하는 순단의 원인을 분석하고, 이를 최소화하는 실질적인 방법을 정리한다.배포 시 발생할 수 있는 문제들Kafka Consumer를 배포하면 다양한 문제가 발생할 수 있다. 대표적으로는 다음과 같다.리밸런싱으로 인한 이벤트 처리 지연: 컨슈머가 내려갔다 올라오면서 파티션 소유권이 재분배되고, 그동안 메시지 처리가 중단된다.메시지 중복 처리: 종료 시점에 커밋되지 않은 오프셋 이후의 메시지가 재처리..
프로메테우스로 이상 트래픽 감지하기 - 이동평균선, Z-Score, 표준편차 서비스를 운영하다 보면 API 트래픽이 갑자기 튀거나 급감하는 상황을 종종 만나게 된다.하지만 단순히 “현재 트래픽이 어느 기준보다 크다/작다”로만 알림을 울리면, 서비스는 노이즈성 알럿에 시달리게 되고 운영자는 금세 피로에 빠진다.이 문제를 해결하기 위한 대표적인 방법이 바로 이동평균선(Moving Average)과 표준편차 기반 (Z-Score 방식) 을 활용한 알럿 설정이다. 1. 트래픽은 “요동치는 값”API 요청 수, 초당 호출 수(rate), 에러율 등은 초 단위로 흐름이 급격히 변한다.예를 들어 어떤 순간에는 갑자기 요청이 쏟아지고, 어떤 때는 잠깐 줄어든다.이런 “순간값”에 바로 알럿을 걸면 아래 문제가 생긴다.순간 피크 → 불필요한 알럿 폭탄순간 감소 → 실제 장애가 아닌데 알럿 발생일..
kodekloud: devops 온라인 실습 툴 유데미 강의에 실습 링크가 있어서 사용해봤다. 터미널에서 쿠버네티스 명령어를 실행하고, 퀴즈에 답하는 방식으로 해봤는데, 재밌다. 예전에 AWS / Google Cloud hands-on labs는 실습 시간동안 서버를 부여받고, 직접 클라우드 시스템을 설정해보는 방법이었다. 그런데 이건 웹 콘솔이 진짜 콘솔인 것처럼 느껴지게 만든, 가상의 학습 환경이다. AWS / Google Cloud hands-on labs + leetcode가 섞인 실습도구인 것 같다.
개발자를 위한 최소한의 모니터링 지식: spring actuator + prometheus + grafana prometheus이란?prometheus은 시스템 모니터링 시스템이다. prometheus은 시스템의 매트릭을 주기적으로 수집한다. 그래서 시스템에 문제가 발생했을 때, 이를 인지하고 디버깅할 수 있는 기준이 되는 지표를 제공해준다. prometheus를 사용하는 기본 아키텍처는 다음과 같다. spring actuator이란?spring actuator은 실행중인 애플리케이션의 내부 매트릭을 api으로 제공하는 역할을 담당한다.prometheus에서 spring의 매트릭을 수집할 수 있게 하려면, 두 개의 의존성을 추가해야한다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implem..
HTTP KeepAlive와 Spring Tomcat과 Netty ConnectionPool의 관계 persistent connection이란? 클라이언트에서 매번 커넥션을 새로 맺는 비용을 줄이기 위해, 커넥션을 일정기간 유지하는 것을 말한다. KeepAlive이란? persistent connection을 맺는 방법 중 하나이다. HTTP 1.0부터 지원하기 시작했다. HTTP 1.0에서는 기본값은 비활성화이다. HTTP 1.1부터는 KeepAlive가 기본 설정이다. 서버의 커넥션 최대 유휴 시간 클라이언트에서 커넥션을 맺어두기만 해놓고, 사용하지는 않는다면 서버 입장에서는 불필요한 리소스를 낭비하게 된다. 그래서 서버 애플리케이션에서는 서버 최대 유휴 시간을 설정할 수 있다. 즉, 커넥션을 맺은 이후 특정 기간동안 사용되지 않았다면, 커넥션을 강제로 끊어버리는 행위를 말한다. Spring > T..
개발자를 위한 최소한의 DNS 지식 (2): 쿠버네티스 응용편 개발자를 위한 최소한의 DNS 지식 (1): 기초편에 이어서, 쿠버네티스를 통해 DNS을 살펴보자. 쿠버네티스 컨테이너의 DNS 설정 확인해보기 dnsutils를 설치해서, 테스트를 해보자. kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml 그다음 resolv.conf 설정을 살펴보자. kubectl exec -i -t dnsutils -- cat /etc/resolv.conf dnsutils 컨테이너를 실행하여, resolv.conf 기본값을 살펴보자. resolv.conf 파일에 search option이 설정되어있다. 쿠버네티스에서 올라간 애플리케이션에서 PQDN으로 도메인을 호출했을 때, 알아서 주소를 찾아가는 이유는 이 설정 덕분..
[Kubernetes] readiness/liveness probe 쿠버네티스는 두가지 유형의 상태 체크 기능을 가지고 있다. Readiness Readiness Probe는 애플리케이션이 트래픽을 받을 준비가 되었다는 것을 쿠버네티스에 알리는 역할을 한다. 쿠버네티스는 트래픽을 받기 전에 Readiness Probe를 통과했는지 확인한다. Readiness Probe에 실패하면, 쿠버네티스는 Readiness Probe을 통과할 때까지 파드로 트래픽 전송을 중단한다. Liveness Liveness Probe는 애플리케이션이 살았는지, 죽었는지 알려주는 역할을 한다. 파드가 살아있으면 쿠버네티스는 별도의 조치를 하지 않는다. 그러나 파드가 죽어있다면, 쿠버네티스는 파드를 제거하고 새로운 파드를 시작한다. 두가지 시나리오를 통해, 두 차이점을 이해해보자. Readines..
개발자를 위한 최소한의 네트워크 지식 방화벽 방화벽은 미리 정의해둔 보안 규칙에 의해서 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 역할을 한다. VIP 가상 IP (Virtual IP)의 약자이다. NAT 사설 네트워크에 속한 여러 호스트가 하나의 공인 IP으로 인터넷에 접속하기 위해 사용하는 기술을 말한다. NAT은 제한된 공인 IP을 여러 호스트가 공유해서 사용하기 위해 나온 기술이다. 그래서 공인 IP를 NAT IP이라고 부르기도 한다. 인바운드 트래픽 인바운드 트래픽은 외부에서 서버 내부로 들어오는 요청을 말한다. 인바운드 트래픽 IP 제한은 서버를 호출할 수 있는 외부 서버 IP를 관리하는 것을 말한다. 아웃바운드 트래픽 아웃바운드 트래픽은 서버에서 외부로 나가는 요청을 말한다. 즉, 서버에서 다른 외부 서버를 호출하는..