Data Engineering 42

Zookeeper Cli & java API 사용하기

Zookeeper Cli zookeeper 폴더 안 bin폴더를 찾아 아래 명령어로 우선 cli 실행한다. ./bin/zkCli.sh -server $host:$clientPort 우선 간단한 실습을 위해 로컬호스트로 띄웠다. Create Get Set ( Update) Delete Watch -m 로 level을 조정할 수 있다. persistent는 해당 노드 자신만, persistent_recursive는 해당 노드 + 자식 노드까지 알려준다. Java API Setting 우선 zookeeper 연결을 위해 build.gradle에 depedency를 추가한다. dependencies { implementation 'org.apache.zookeeper:zookeeper:3.7.2' } 클래스를 ..

Zookeeper 여러 기능 알아보기 및 설치

Zookeeper의 여러 기능들 Data model zookeeper는 파일 시스템처럼 '/'로 구분하여 경로를 표기하고 데이터를 저장한다. zookeeper는 중간 경로 예를들면 위의 이미지에서 app1이나 app2, root 도 데이터를 가질 수 있다. 그리고 자식 노드들의 데이터도 접근 가능하다. 그렇기에 수bytes ~ KB 이하로 유지하는 것이 좋다. 보통은 설정 정보나, 작은 메타데이터 정보 등의 빠른 동기화 용도 위주로 사용된다. Versioning Znode는 데이터나 ACL 변경할 때 versioning이 되며, version number를 갖고있다 client에게 응답할 때 이 버전 번호도 항상 같이 전달한다. ACL은 엑세스 제어 목록으로 read할 때는 연결된 모든 데이터를 가져오고..

Zookeeper 소개와 작동 프로세스

Zookeeper 란 분산 어플리케이션을 위한 분산 코디네이션 서비스이다. 분산 어플리케이션을 만들기 위해서 필요한 동기화나 설정 등 다양한 기능의 API 제공해준다. 그리고 무엇보다 높은 수준의 구현이 필요한 coordination 기능을 제공해줘서 더 쉽게 분산 어플리케이션을 구현할 수 있다. Zookeeper 주요 기능 & 특징 ZNodes 주키퍼는 shared hierachical namespace를 통해 분산 프로세스가 서로 상호작용한다. 이 namespace는 znodes라고 불리는 데이터 레지스터로 구성되어 있다. 이 znode로 메모리에서 데이터를 처리하기 때문에 높은 throughput과 낮은 latency를 제공한다. 높은 performance 높은 available strcitly o..

분산 시스템 이해하기 - BASE 원칙, CAP, PACELC

분산 시스템 개요 데이터 엔지니어링하면 분산 시스템은 항상 나오는 주제이다. 그만큼 많은 소프트웨어에서 분산 시스템이 필요하다는 것인데, 그렇다면 분산 시스템이 필요한 이유는 무엇일까? 그것은 하드웨어 성능의 발전 속도로부터 나온다. '무어의 법칙'은 하드웨어 성능의 발전은 선형적이라는 것이다. 하지만 컴퓨터에서의 트래픽과 데이터는 기하 급수적으로 늘어났다. 이에 하드웨어를 scale-up이 아닌 scale-out 전략을 생각하게 된다. 상태를 공유하지 않으면 scale out이 쉽게 가능했지만 Database가 중요해지면서 대량의 데이터가 공유 가능해야했다. 따라서 Database를 중심으로 상태와 데이터가 공유 가능하면서 scale-out하여 많은 데이터와 트래픽이 처리 가능한 소프트웨어가 필요해졌다..

[Observability] - 5. 자신의 Application Monitoring 해보기!!

이전에는 node의 모니터링을 했다면 이번에는 자신이 만든 앱의 모니터링을 해보았다. 아래와 같은 구조로 진행해볼 예정이다. App은 Spring boot로 매우 간단하게 만들었으며, Prometheus Simple Client java로 Prometheus 형식의 메트릭을 노출한다. 여기서 Prometheus Simple Client란 Prometheus는 각 언어별로 client library를 제공한다. Prometheus 포맷으로 노출할 수 있는 설정, 각 언어별로 기본 모니터링 시스템을 이용해 메트릭 정보를 추출, custom metric을 남기는 기능 등을 할 수 있다. 한마디로 Prometheus가 알아들을 수 있도록 데이터를 남길 수 있도록 해주는 라이브러리이다. Java App 생성 우선..

[Observability] - 4. Node Monitoring 해보기!!

우선 여기서 말하는 노드란, 컴퓨터 네트워크를 구성하는 하나의 기기를 의미한다. 흔히 컴퓨터 1대가 노드가 될 수 있다. Node 정보를 가져오기 위해서는 Node Exporter가 필요하다. Node Exporter 설치하기 링크 wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz tar xvfz node_exporter-1.5.0.linux-amd64.tar.gz mv node_exporter-1.5.0.linux-amd64 node_exporter cd node_exporter/ export NODE_EXPORTER_HOME=$(pwd) echo $N..

[Observability] - 3. Grafana로 대시보드 구성하고 메일로 Alert 받기

Grafana Grafana는 모니터링을 위한 대시보드 도구이다. OSS 버전은 무료이면서도 기능이 좋다. web UI 성능도 좋으며 다양한 integration과 alert 설정의 고도화 variable을 이용한 재사용성 등 장점이 많다. Grafana 설치 prometheus 설치한 서버와 같은 곳에 했지만 다른데 해도 괜찮다. wget https://dl.grafana.com/oss/release/grafana-9.3.1.linux-amd64.tar.gz tar -zxvf grafana-9.3.1.linux-amd64.tar.gz mv grafana-9.3.1 grafana cd grafana export GRAFANA_HOME=$(pwd) SMTP 설치 Alert할 때 구글 메일로 받기 위해 SM..

[Observability] - 2.Prometheus & Prometheus Push gateway 로 데이터 Polling

데이터 수집 아키텍처 위의 구조를 목표로 이번에는 Prometheus로 데이터 polling하고 Grafana로 시각화 하는 것을 목표로 하였다. Prometheus Prometheus 아키텍처이다. Prometheus Server Metric을 여러 노드에서 scraping(polling) 방식으로 수집하고 Local storage에 저장한다. Metric 대상은 static하게 설정해서 IP:Port 로 찾을 수도 있고, Sevice Discovery 도구와 연동하면 dynamic하게 대상을 찾을 수 있다. Push Gateway scrap 대상으로 지정할 수 없는 경우 직접 Push할 수 있는 기능이다. Push된 metric은 pushgateway가 보관하고 prometheus는 pushgatew..

[Observability] - 1. Observability란 & 도구

좋은 서비스를 만드는 것도 중요하지만제대로 운영하는 것도 매우 중요하다.서비스를 정상적으로 운영하기 위해서는Observability가 중요하다.Observability에 대해서 이해하기 쉽게 설명하기 위해서Tracing, Monitoring과 함께 얘기하려고 한다.Observability가 무엇일까Tracingtracing은 프로그램 실행 과정들을 상세히 남기는 것이다.옛날부터 APM(Application Performance Monitoring) 분야에서 많이 활용해왔다.하나의 서비스를 위해 많은 인프라와 app이 상호작용을 하기 때문에 Distributed tracing이 중요해지고 있다.대표적인 Distributed tracing 오픈 소스로는 Zipkin과 Jaeger가 있다.Monitoring비..

GSLB - Route53으로 여러 라우팅정책 구현해보기

GSLB란? GSLB는 Global Server Load Balancing으로 로드밸런서가 아니라 전세계 어디에서든지 빠르고 신뢰성 있는 응답을 제공하기 위한 지능적인 DNS이다. 대부분으로 글로벌 DNS 브랜드는 GSLB를 제공하고있다. 통상적으로 아래와 같은 기능들을 제공한다. Performance : 클라이언트의 요청을 네트워크상 가까운 서버로 연결할 수 있다. 트래픽을 지역에 맞게 분산해서 연결할 수 있다. Customized Content : 지역/언어별로 커스텀한 콘텐츠를 자동으로 제공할 수 있다. Disaster Recovery : 장애가 발생했을 때 다른 지역의 서버로 redirect해서 HA(고가용성) 구성이 가능하다. Maintenance : 연결 규칙이나 구성이 변경 가능해야한다. C..