목록[Infra & Server] (24)
쿼카러버의 기술 블로그
리더 선출이란 여러 대의 동일한 코드로 동작하는 어플리케이션 인스턴스들 중에서 특정 인스턴스를 '대표'로 선정하는 과정을 말한다. 리더 선출의 주된 목적은 시스템 내에서 중요한 결정이나 작업을 담당할 ‘리더’를 선정하는 것이다. 이 과정은 특히 분산 시스템이나 클러스터 환경에서 중요하다. 본 글에서는 그 중에서도 쿠버네티스에서의 리더 선출에 대해 다룬다. 다시 말해 쿠버네티스에 의해 조정되고 관리되는 리더 선출 메커니즘에 대해 다루려고 한다. 쿠버네티스는 Distributed Lock을 활용해 다수의 인스턴스 중 한 인스턴스를 리더로 선출할 수 있게 하여, 오직 그 인스턴스만이 특정 작업을 수행할 수 있도록 보장한다. 참고로 블록체인에서도 리더를 선출한다. 하지만 이 글에서 말할 리더 선출과는 다른 개념..
앞 글에서 prometheus의 기본 개념에 대해 알아보았다. 이미 솔루션들에서 제공해주는 exporter이 있는 경우에는 왠만하면 exporter에서 제공해주는 정보만으로 모니터링이 가능하지만, 직접 웹 어플리케이션을 동작하고, 이 어플리케이션에 대한 모니터링을 수행해야 하는 등의 경우에는 custom exporter를 구현해야한다. 기본으로 제공되는 exporter들을 활용할 때도 물론이지만, custom exporter를 구현하기 위해서는 prometheus에서 수집하고 있는 메트릭이 어떤 종류가 있는지에 대해 알아둘 필요가 있다. 따라서 본 글에서는 프로메테우스에서 수집할 수 있는 메트릭의 종류들에 대해 알아보고자 한다. 메트릭 종류 프로메테우스에서 제공하는 메트릭 종류는 크게 아래와 같다. (1..
prometheus는 오픈 소스 기반의 모니터링 시스템이다. (그리스 로마 신화에서 최초로 인간을 창조했다는 그 프로메테우스가 말고..ㅎ) SoundCloud사에서 만들었지만 지금은 독립형 오픈소스 프로젝트이고, 현재 필자가 속해 있는 회사는 prometheus를 사용하여 쿠버네티스 환경에 동작하는 어플리케이션들의 메트릭을 수집하고 있다. 모니터링은 로깅과는 성격이 약간 다르다. 로깅은 어플리케이션 로직 내에서 발생하는 일들에 대한 것이라면, 모니터링은 response latency, RPM, 컨넥션 갯수와 같은 모니터링 지표들을 수집하여 저장하고 검색하는 것을 의미한다. prometheus는 기본적으로 pull model을 사용해 메트릭을 수집한다. 이를 간단하게 설명하자면 메트릭 대상이 되는 타겟 서..
필자는 현재 API 서비스를 개발하고 있다. 회사에서 가장 많은 트래픽을 받는 서비스의 주요 로직들을 변경하게 됐는데, 변경된 로직을 검증하기 위해 production level과 비슷한 수준의 트래픽, 그리고 스트레스 테스트 등을 진행해야 했다. 따라서 변경된 로직의 서비스를 production 환경과 동일하게 셋업하고 부하테스트를 진행하기로 했다. 일반적인 서비스 개발 후에 부하테스트는 간단하게 로컬 서버 한 대에서, docker를 활용해 여러 worker를 띄운뒤 테스트해볼 수 있었지만, 이번에는 워낙 트래픽을 좀 받는 서비스기도 하고, 테스트해야 하는 로직들이 CPU-bound 태스크가 좀 많아서, 실제로 약 10개정도의 노드를 띄워 분산테스트를 진행해야 했다. 그리고 아래의 옵션들을 만족할 수 ..
Ansible 시리즈 1탄을 작성한다. 본 시리즈의 목적은 다음과 같다 (1) Ansible 기본 개념 및 설치 진행 (2) Ansible를 활용해 여러 노드들에 동시에 명령어 실행 (패키지 설치 등) (3) Ansible를 활용한 부하테스트 진행 (locust) 사실 시리즈 2탄 까지만 봐도 Ansible를 활용도가 충분하다. 예를 들어 여러 대의 노드에 카프카를 설치한다든지 할 때 각 서버에 ssh로 접근해서 동일한 커맨드를 계속 반복하는 것보다는 Ansible를 활용하면 한번에 여러 노드에 설치할 수 있고, 이후에도 동일한 세팅을 설정할 수 있기 때문이다. 하지만 필자는 이번에 10대의 노드를 활용해 부하테스트를 진행해보았고, Ansible를 활용하면 간단하게 부하테스트도 세팅할 수 있기 때문에, ..
쿠버네티스는 container orchestration, 즉 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 툴이다. 쿠버네티스를 활용하면 다수의 컨테이너화된 어플리케이션을 쉽게 배포할 수 있다. 쿠버네티스를 활용한 어플리케이션 배포에 가장 기본이 되는 것은 yaml파일이다. 쿠버네티스의 오브젝트를 정의하고 생성할 때 yaml파일 형식을 활용하기 때문이다. 쿠버네티스를 통해 어플리케이션을 배포하기 위해서는 많은 object들이 필요하다. 대표적인 예가 deployment, pod, configmap secret, service, persistent volume, persistent volume claim 등이 있다. 위와 같은 쿠버네티스 object(리소스)들을 정의하고 다루는데 활용되는 yam..
필자는 현재 API서버를 열심히 개발 하고 있다. 개발한 서비스가 트래픽을 많이 받다보니, 트래픽을 적절히 제한하지 않았을 때 장애가 발생했고, 그에 따라 API의 Rate Limit을 구현해야 했다. 공부하다보니 흥미가 생겨 나중에 내가 다시 챙겨보기 위해 글을 정리하려고 한다. Rate Limit시리즈의 목차는 다음과 같다. [Rate Limit - step 1] Rate Limit이란? (개념, Throttling, 분산환경에서의 구현) [Rate Limit - step 2] Leaky Bucket 알고리즘 구현 (rate limiting) (p.s. memory estimation 하는 법) [Rate Limit - step 3] Token Bucket 알고리즘 구현 (rate limiting) ..
필자는 현재 API서버를 열심히 개발 하고 있다. 개발한 서비스가 트래픽을 많이 받다보니, 트래픽을 적절히 제한하지 않았을 때 장애가 발생했고, 그에 따라 API의 Rate Limit을 구현해야 했다. 공부하다보니 흥미가 생겨 나중에 내가 다시 챙겨보기 위해 글을 정리하려고 한다. Rate Limit시리즈의 목차는 다음과 같다. [Rate Limit - step 1] Rate Limit이란? (개념, Throttling, 분산환경에서의 구현) [Rate Limit - step 2] Leaky Bucket 알고리즘 구현 (rate limiting) (p.s. memory estimation 하는 법) [Rate Limit - step 3] Token Bucket 알고리즘 구현 (rate limiting) ..