728x90

분류 전체보기 364

RabbitMQ, Apache Kafka, AWS SQS 비교

메시지 저장 및 전달 방식RabbitMQ와 SQS는 메시지를 큐에 안전하게 저장하고 전달하며, Kafka는 영속적으로 메시지를 저장하고 여러 소비자에게 전달한다. RabbitMQ메시지를 큐에 저장하고, 이를 소비자에게 전달한다. RabbitMQ는 메시지를 저장하는 역할을 중요하게 여긴다. 따라서 일시적인 네트워크 문제 또는 소비자가 메시지를 처리하지 못할 경우에도 안전하게 메시지를 보관한다.KafkaKafka는 메시지를 영속적으로 저장하고, 이를 여러 소비자 그룹에게 동시에 전달할 수 있다. 메시지는 토픽에 기록되며, 이를 구독하는 모든 소비자에게 전달된다. 또한, Kafka는 일반적으로 디스크에 메시지를 저장하여 데이터의 장기 보존이 가능하다.SQSSQS는 메시지를 보관하고, 메시지를 처리할 수 있는 ..

DevOps 2024.01.13

모니터링(Micrometer, Prometheus, Grafana)

Micrometer 애플리케이션의 메트릭 수집을 단순화하고, JVM 기반의 애플리케이션에서 사용하기 쉬운 메트릭 API를 제공하는 라이브러리이다. 특히 스프링 기반의 애플리케이션에서는 Micrometer가 스프링의 메트릭 제공에 통합되어 사용된다. 또한, 다양한 모니터링 시스템과의 통합을 지원하여 Prometheus, Grafana, InfluxDB, Datadog 등 다양한 백엔드로 메트릭을 전송할 수 있다. 여러 Micrometer의 기능 중 하나로 Timer가 있다. Timer는 특정 코드 블록이나 메서드의 실행 시간을 측정하고 해당 지표를 메트릭으로 수집한다. 호출 빈도와 지연 시간을 시계열로 기록하여 애플리케이션의 동작을 모니터링할 수 있다. @Timed 어노테이션은 Micrometer에서 제공..

JVM/SpringCloud 2024.01.03

Zipkin

ZipkinZipkin은 분산 시스템에서의 추적 및 모니터링을 위한 오픈 소스 소프트웨어이다. 주로 마이크로서비스 아키텍처에서 사용되며 서비스 간 통신과 연관된 각 단계의 지연 시간 및 성능을 추적하여 문제를 식별하고 해결하는 데 도움이 된다.SpanSpan은 하나의 요청에 사용되는 작업의 단위이다. 예를 들어, 서비스 간의 요청 또는 로컬 작업과 같은 작업 단위를 나타낼 수 있다. Span은 시작 시간, 종료 시간, 태그 등의 정보를 포함하여 특정 작업에 대한 세부 정보를 기록한다.TraceTrace는 관련된 여러 Span들의 모음으로, 전체 작업의 흐름을 나타낸다. 서비스 간의 요청이 발생하면, 해당 요청에 대한 Span이 생성되고, 이러한 Span들이 모여 Trace를 형성한다. Trace는 전체 ..

JVM/SpringCloud 2024.01.03

Resilience4J - CircuitBreaker

Circuit Breaker 서킷 브레이커는 연결의 성공/실패를 카운트하여 실패율이 임계치를 넘어섰을 때 자동적으로 접속을 차단하는 시스템이다. 마이크로서비스 아키텍처에서 서비스 간 통신에서 발생할 수 있는 장애와 지연으로부터 전체 시스템의 안정성을 유지하는데 도움이 되는 중요한 디자인 패턴이다. Sliding Window 서킷 브레이커는 슬라이딩 윈도우를 통해 호출 결과를 저장하고 집계한다. 슬라이딩 윈도우의 방식은 마지막 N개의 호출 결과를 집계하는 카운트 기반과 마지막 N초 간 일어난 호출 결과를 집계하는 시간 기반이 있다. Circuit Breaker State 닫힌(Closed) 상태 초기 상태로, 모든 호출이 허용된다. 서비스 호출 중 에러 비율이 설정된 임계값을 넘어가면 서킷 브레이커는 열린..

JVM/SpringCloud 2024.01.02

Kafka를 활용한 데이터 베이스 비동기 통신

이벤트 중심 아키텍처 JDBC 또는 JPA를 사용하여 DB에 직접 접속하는 경우, 애플리케이션과 DB 간의 동기 상태로 인해 서비스 지연 및 다른 서비스에 대한 영향이 발생할 수 있다. 또한, 트래픽이 증가하거나 DB Locking이 발생할 경우 성능 문제가 발생할 수 있다. 이러한 문제를 해결하기 위해 Kafka Sink Connector를 사용하면 비동기 방식의 데이터 처리, 데이터 전달의 효율적인 관리, 안정적인 클러스터 구성, 서비스 간의 느슨한 결합, 이벤트 중심 아키텍처 등 다양한 이점을 얻을 수 있습니다. 특히 대용량 및 다중 서비스 환경에서는 MQ와 같은 서비스의 도입이 유용할 수 있다. Dto data class KafkaOrderDto( val schema: Schema, val pay..

JVM/SpringCloud 2024.01.01

Kafka를 활용한 마이크로 서비스간 비동기 통신

라이브러리 implementation("org.springframework.kafka:spring-kafka") kafka Consumer 설정 @Configuration @EnableKafka class KafkaConsumerConfig { // 토픽에 접속하기 위한 설정 정보 @Bean fun consumerFactory(): ConsumerFactory { val properties = mapOf( ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG to "127.0.0.1:9092", ConsumerConfig.GROUP_ID_CONFIG to "consumerGroupId", ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG to StringD..

JVM/SpringCloud 2024.01.01

Apache Kafka

Kafka 카프카는 분산 스트리밍 플랫폼으로, 대량의 데이터를 높은 처리량으로 실시간으로 처리할 수 있도록 설계된 오픈 소스 메시지 브로커이다. Jay Kreps, Neha Narkhede, 그리고 Jun Rao가 LinkedIn에서 개발한 후에 Apache 소프트웨어 재단에 기증되어 오픈 소스 프로젝트로 진화했다. 카프카는 대용량의 데이터 스트림을 효율적으로 수집, 저장, 처리 및 전달하는 데 사용되며 이벤트 주도 아키텍처 구축에 적합하다. 주로 로그 및 이벤트 스트리밍, 데이터 파이프라인, 실시간 데이터 분석 등의 분야에서 활용된다. 분산 아키텍처 및 확장성: Kafka는 분산 아키텍처로 설계되어 있어 수평 확장이 용이하며, 새로운 브로커를 추가하여 클러스터를 쉽게 확장할 수 있다. 내구성 및 복제:..

DevOps 2023.12.30

마이크로서비스간 동기 통신

동기식 HTTP 통신 클라이언트가 요청을 보내고, 서버는 해당 요청에 대한 응답을 즉시 반환하는 방식으로 요청에 대한 응답이 필요한 경우 사용된다. 간단하며 직관적인 구조로 에러 처리가 상대적으로 쉬운 장점이 있지만 클라이언트는 응답을 기다려야 하므로, 블로킹이 발생할 수 있으며 서비스의 의존성이 높아질 가능성이 있다. Spring Boot의 RestTemplate을 이용하는 방식과 Spring Cloud의 Feign Client를 이용한 방식이 있다. RestTemplate RestTemplate 빈 등록 Spring Boot를 사용한다면, RestTemplate은 기본적으로 빈으로 등록되어 있다. 따라서 별도의 설정 없이 주입하여 사용할 수 있다. 그러나 Spring Boot를 사용하지 않는다면, R..

JVM/SpringCloud 2023.12.30

Spring Cloud Config Server의 암호화

Config Server의 암호화설정 정보를 평문으로 관리하는 것은 보안 문제를 일으킬 우려가 있다. Spring Cloud Config Server는 암호화된 프로퍼티 값을 제공하기 위해 대칭 키 또는 비대칭 키를 사용할 수 있다. 대칭키를 이용한 암호화 동일한 키를 암호화와 복호화에 사용하는 방식으로 처리 속도가 빠르다는 장점이 있지만 키 교환의 어려움과 키 관리의 문제가 있다. 라이브러리 implementation("org.springframework.cloud:spring-cloud-starter-bootstrap") bootstrap.ymlencrypt: key: abcdefghijklmnopqrstuexyz1234567890 bootstrap.yml 이란? 부트스트랩 단계에서 사용되는 설정 파..

JVM/SpringCloud 2023.12.30

Spring Cloud Bus

Spring Cloud Bus Spring Cloud Bus는 분산 시스템에서 구성 변경 및 이벤트 전파를 지원하는 도구이다. 이를 통해 여러 서비스 인스턴스 간에 구성 변경을 효율적으로 전파하고, 런타임 중에 애플리케이션 상태를 모니터링하고 관리할 수 있다. 이벤트 버스: Spring Cloud Bus는 이벤트 버스를 사용하여 분산된 서비스 간에 이벤트를 전파한다. 이를 통해 구성 변경, 애플리케이션 이벤트 등을 브로드캐스트할 수 있습니다. 구성 변경 전파: Spring Cloud Config와 통합하여 구성 서버에서 가져온 구성 정보를 변경할 때 이를 모든 서비스 인스턴스에 효과적으로 전파할 수 있다. 애플리케이션 상태 모니터링: 애플리케이션의 상태 변경, 이벤트, 구성 변경 등을 모니터링하고 이를 ..

JVM/SpringCloud 2023.12.28
728x90