전체 글

전체 글

    Spark Join 방식

    Spark 조인 수행 방식이 어떻게 진행되는 지 살펴보자. 우선, Spark 조인 수행 방식에 대해선 실행에 필요한 두 가지 핵심 전략을 알아야 한다. 노드간 네트워크 통신 전략이 어떤 방식인지 노드별 연산 전략이 어떤 식으로 진행되는 지 네트워크 통신 전략 스파크는 조인 연산 수행 시, 두 가지 클러스터 통신 방식을 활용한다. Shuffle Join (셔플 조인) -> 전체 노드간 통신을 유발 Broadcast Join (브로드 캐스트 조인) -> 전체 노드 간 통신을 유발 하지 않음. 참고로, 이후 스파크에서 최적화 기술은 비용 기반 옵티마이저(CBO) 가 개선된다면 더 나은 통신 전략이 도입되어 바뀔 수 있다 . 만약 조인하고자 하는 두 테이블의 크기를 가정해보고 어떤 식으로 조인이 수행되는 지 확..

    Kafka Partition Replication, ISR 그리고 Producer Acks

    Kafka Partition 복제 Kafka 에서는 가용성을 위해 replication 을 제공한다. 이 때 kafka 에서 replication은 각 Topic 의 partition 들을 다른 브로커들로 복제하는 것을 말한다. topic 생성 시, replication 수를 지정할 수 있으며, replication-factor option 값을 지정하여 설정 (default.replication.factor = 1) 이 때, replication-factor 의 경우, broker(node) 수를 넘지 못한다. ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3 --topic sample..

    7. 컨피그맵(ConfigMap) 및 컨테이너 환경 변수

    7.1 컨테이너화된 애플리케이션 설정 컨테이너화된 APP 에서 설정을 APP 에 전달할 때, 환경변수를 이용하는 방법도 있다. 그렇다면 왜 환경변수 사용이 컨테이너 환경에서 널리 사용되는 이유는 무엇일까? 도커 컨테이너 내부에는 설정 파일을 사용하는 것이 까다롭기 때문이다. 내부에서 사용한다고 가정하면 설정 파일을 만약 컨테이너 이미지 안에 포함 혹은 파일이 포함돼 있는 볼륨을 컨테이너에 마운트하는 행위이고, 이는 파일을 이미지 안에 넣고 빌드하는 것이 기 때문에 소스 코드에 설정 내용을 넣고 하드코딩하는 것과 비슷한 격이다. 또한 인증 정보 혹은 암호화 키와 같은 내용이 들어간다면, 해당 이미지에 접근하는 것으로 해당 내용들을 볼 수 있다. git Repo 를 볼륨 설정 소스로 사용하는 방법도 존재한다..

    2023 존민 회고록

    작성하고 있는 지금, 12월 30일. 연말을 맞아 하늘도 눈을 아주 펑펑 내려주고 있다. 2023년 올 한 해, 어떤 일들이 나를 지나갔고 돌이켜보며 간단하게 끄적여본다. 작년과 같이 두서는 없는 글일 예정이다. 또한 좇고자 했던 작은 하나하나의 목표들에 대해 얼마나 이루었는 지 다시 보자. 회사 정규 입사 기준 1년 7개월이 지났고, 자연스레 지난해 대비 난도있는 이슈들도 더욱 많이 헤쳐나갔다. 올해 메인 이슈로 기존 구 시스템을 신규 시스템으로 전환하는 작업을 성공적으로 마쳤다. 도메인 성격상 품질을 끌어올려야하기에 좋은 팀원분들과 함께 고뇌하고 노력하였고 결과적으로 유의미한 결과를 이루어냈다고 생각한다. 어쩌다보니 사내 엔지니어링 발표 세션도 발표할 수 있었다. 좋은 경험이었다 : ) 또한 3분기..

    6. 쿠버네티스 볼륨

    Kubernetes in Action 6장 읽고 정리한 내용만 기록. 6.1 Kubernetes Volume (볼륨) 파드 내부에는 프로세스가 실행되며, 리소스를 공유하는 논리적 호스트와 유사하다. 프로세스간에 디스크는 공유하지 않는다. 파드 내부의 각 컨테이너는 컨테이너 이미지에서 제공되는 고유한/분리된 FS를 가진다. 즉, 컨테이너가 시작할 때마다 컨테이너 이미지를 빌드할 때 추가한 파일들을 갖는 컨테이너로 시작 (새로 시작한 컨테이너는 기존 컨테이너와 다른 파일시스템 상태) 그렇다면 기존 컨테이너의 종료된 위치에서 새로운 컨테이너가 계속되길 원하는 시나리오가 있을 땐 어떻게 할까? 스토리지 볼륨은 파드의 일부분으로 정의되어 파드와 동일한 라이프사이클을 가짐 따라서 파드가 시작되면 볼륨이 생성되고, ..

    5.5 Readiness Probe

    파드의 레이블이 서비스의 파드 셀렉터와 일치하는 경우, 파드는 서비스의 엔드포인트로 포함된다. 하지만, 새 파드가 만들어지자마자 해당 파드가 즉시 요청 처리할 준비가 돼 있지 않을 수 있다. 다음과 같은 상황이 이에 해당한다. 파드 구성에 시간이 걸리거나, 데이터를 초기 로드하는데 시간이 필요한 경우 첫 번째 사용자 요청이 너무 오래걸리거나 사용자 경험에 영향을 미치는 것을 방지하고자 웜업 등의 절차가 필요한 경우 이러한 상황에 파드가 준비가 되어있는 지 레디니스 프로브(Readiness Probe) 를 통해 해당 파드가 요청을 수신할 준비가 되어있는 지 확인 가능하다. Readiness Probe 라이브니스 프로브(Liveness Probe)와 불안전한 컨테이너를 자동으로 다시 시작해 원활한 상태의 어..

    5.4 Ingress(인그레스)

    5.4 Ingress 를 통한 서비스 외부 노출 인그레스가 필요한 이유 로드밸런서 서비스는 자신의 public IP 주소를 가진 로드밸런서가 필요하지만, 인그레스는 한 IP 주소로 여러 서비스에 접근이 가능하도록 지원 client 가 HTTP 요청을 인그레스에 보낼 때, 요청한 호스트와 경로에 따라 요청을 전달할 서비스가 결정 인그레스(Ingress)란 ? 외부에서 들어온 HTTP / HTTPS 를 클러스터 내부 서비스로 라우팅 인그레스는 어플리케이션 계층(HTTP) 에서 동작하며, 서비스가 할 수 없는 쿠키 기반 세션 어피니티 등과 같은 기능을 제공 인그레스 컨트롤러 인그레스를 사용하기 위해서는 클러스터 내에 인그레스 컨트롤러가 실행되어야 한다. 현재 k8s 에서 공식 지원하는 Ingress Contr..

    도메인 주도 설계 첫걸음 - 9장 : 커뮤니케이션 패턴 (아웃박스 패턴 /사가 패턴 /프로세스 관리자 패턴)

    09. 커뮤니케이션 패턴 바운디드 컨텍스트 간 커뮤니케이션을 용이하게 애그리게이트 설계 원칙의 제한 사항 해결, 여러 시스템 컴포넌트에 걸쳐 비즈니스 프로세스 조율 역할 모델 변환 바운디드 컨텍스트 : 유비쿼터스 언어 모델의 경계 만약 다른 바운디드 컨텍스트가 협력할 의향이 있다면? 바운디드 컨텍스트를 파트너십을 통해 통합 가능 : 프로토콜 조정 및 팀간 커뮤니케이션으로 해결 가능 협력 기반 통합 방법 : 공유 커널 방법 사용 (제한된 부분을 공동으로 함께 발전시킴) 업스트림(제공자) / 다운스트림(사용자) 이 때 다운스트림이 업스트림의 바운디드 컨텍스트 모델을 따를 수 없을 때 처리 방법은 2가지 다운스트림 측에서 ACL(충돌방지계층) 사용하여 업스트림 모델을 조정하여 사용 업스트림 측에서 OHS(오픈..