분류 전체보기
-
io.kubernetes.client.openapi.ApiException configmaps is forbiddenDevOps/Kubernetes 2024. 4. 8. 17:53
io.kubernetes.client.openapi.ApiException: Message: HTTP response code: 403 HTTP response body: { "kind":"Status", "apiVersion":"v1", "metadata":{}, "status":"Failure", "message":"configmaps is forbidden: User \"system:serviceaccount:default:default\" cannot list resource \"configmaps\" in API group \"\" in the namespace \"default\"", "reason":"Forbidden", "details":{"kind":"configmaps"}, "code"..
-
Spring Cloud Kubernetes: ConfigMap 변경 시 전체 서비스 갱신Spring/Spring 2024. 1. 10. 00:01
Kubernetes 환경에서 Spring Cloud를 사용하면 ConfigMap 변경 시 전체 서비스가 갱신되는 기능을 제공한다. 이는 spring-cloud-starter-kubernetes-client-config 라이브러리를 통해 가능하다.ConfigMap 감지Spring Cloud Kubernetes는 Kubernetes API 서버와 통신하여 ConfigMap의 변경을 감지한다. 이를 위해 Kubernetes Watch API를 사용하여 ConfigMap 리소스를 모니터링한다. Watch API는 Kubernetes 리소스의 생성, 업데이트, 삭제 등의 이벤트를 실시간으로 스트리밍한다.이벤트 수신 및 트리거ConfigMap이 변경되면, Watch API는 해당 변경 이벤트를 Spring Clou..
-
Spring Batch에서 Job Completed 이후 종료되지 않을때Spring/Spring 2023. 9. 9. 19:14
Spring Batch를 사용하여 배치 작업을 처리할 때 Job이 Completed 된 후 어플리케이션이 종료되지 않는다면, TaskExecutor 를 사용하고 있지 않은지 확인해보자. batch 에서 병렬 처리를 통해 성능을 최적화하는 것은 매우 중요하다. 이를 위해 TaskExecutor를 사용하여 병렬 작업을 수행할 수 있다. 하지만 병렬 작업이 완료된 후 애플리케이션이 정상적으로 종료되지 않는 문제를 겪을 수 있다. TaskExecutor 를 설정했다면 Job이 완료된이후 shutdown 시켜주어야 한다.TaskExecutor 설정Spring Batch에서 병렬 작업을 위해 TaskExecutor를 설정하는데 ThreadPoolTaskExecutor를 사용하여 적절한 설정을 하는 방법은 다음과 같..
-
WebFlux에서의 이벤트 루프와 컨텍스트 스위칭, 그리고 코루틴??카테고리 없음 2023. 9. 5. 00:00
WebFlux와 이벤트 루프 스레드WebFlux는 비동기적이고 논블로킹 I/O를 지원하는 리액티브 프로그래밍 모델이다. 이 모델은 이벤트 루프를 사용하여 많은 수의 I/O 작업을 효율적으로 처리한다. 이벤트 루프 내의 스레드는 일반적으로 블로킹되지 않으며, 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속 수행한다. 그러나 이는 스레드가 절대 블로킹되지 않는다는 것을 의미하지는 않는다. 특정 상황에서는 블로킹이 발생할 수 있다.논블로킹 I/O의 한계와 이벤트 루프의 역할논블로킹 I/O를 사용하는 WebFlux는 스레드가 블로킹 없이 작업을 처리할 수 있게 한다. 그러나 요청 수가 급증하면 이벤트 루프 스레드가 처리해야 할 작업의 수가 증가하면서 처리 지연이 발생할 수 있다. 이는 일종의 블로킹 상황을..
-
Redis 메모리 파악과 redis cluster 메모리 계산카테고리 없음 2023. 9. 5. 00:00
Redis는 메모리 기반 데이터 저장소로, 메모리 사용량이 중요한 요소 중 하나이다. 특히, Redis 클러스터를 구성할 때는 각 노드의 메모리 사용량을 정확히 파악하고 전체 클러스터의 메모리 필요량을 계산하는 것이 필수적이다. 이 글에서는 Redis의 메모리 사용을 파악하는 방법과 클러스터 구성 시의 메모리 계산 방법을 설명한다.Redis 메모리 사용 파악Redis 서버의 메모리 사용량을 파악하려면 Redis CLI를 사용하여 INFO memory 명령어를 실행한다. 이 명령어는 Redis 서버의 메모리 사용에 대한 자세한 정보를 제공한다.redis-cli INFO memory이 명령어를 실행하면 다음과 같은 출력이 나타난다:# Memoryused_memory:39856620512used_memory_..
-
Reactor Resilience4J CircuitBreaker 알아보기카테고리 없음 2023. 8. 22. 17:53
CircuitBreaker 필요한 이유 : Circuit Breaker 는 누전차단기로 전류를 차단하는 장치를 의미한다. 누전 차단기의 역할로 사고가 발생하기 이전에 전류를 차단하여 사고를 미리 방지하는것과 같이 문제가 있는 마이크로서비스간의 트래픽을 차단하여 해당 서비스로 인한 전체 장애를 방지한다. 최소요청 횟수 몇 회 이후 통계건수 기반으로 몇건을 평가했을때, 실패율이 얼마정도 되는지에 따라 CircuitBreaker가 Open 되고 이 Open 되는 시간의 지속시간을 얼만큼 유지할 것인지 등의 설정이 가능하다. 서킷브레이커 동작원리 : Consumer와 Producer 사이에 Circuit Breaker 을 두고 통신하며 Circuit Breaker는 아래의 그림과 같은 3가지 상태를 가진다. C..
-
Redis 사용 시 동시성 문제를 해결할 수 있는 방법들카테고리 없음 2023. 8. 17. 14:53
Redis는 높은 성능과 편리한 데이터 구조를 제공하는 인메모리 데이터베이스로, 많은 애플리케이션에서 캐싱, 세션 관리, 실시간 데이터 처리 등에 사용되고 있다. 하지만 Redis를 사용하면서 동시성 문제를 마주칠때도 있는데 Redis의 동시성 문제를 해결하는 두 가지 방법인 Lua 스크립트와 분산락에 대해 설명하고, 각각의 장점을 살펴보자. 1. Lua ScriptLua Script를 이용한 동시성 문제 해결Lua 스크립트는 Redis 서버에서 직접 실행되며, 여러 Redis 명령어를 하나의 원자적 작업으로 묶어 실행할 수 있는 방법이다. 이를 통해 동시성 문제를 효과적으로 해결할 수 있다. Lua 스크립트를 사용하면 복잡한 로직을 단일 명령어로 처리할 수 있기 때문에, 중간에 다른 클라이언트의 접근을..
-
분산 시스템에서 2PC ( 2-Phase-Commit) 해결책과 한계책/데이터 중심 어플리케이션 설계 2023. 7. 30. 23:26
분산 시스템에서 2PC와 일관성 보장: 해결책과 한계 분산 시스템에서는 여러 노드가 협력하여 작업을 수행한다. 이러한 시스템에서 트랜잭션의 일관성을 보장하는 것은 매우 중요하다. 이를 위해 다양한 방법이 사용되는데, 그 중 하나가 2PC(2-Phase Commit) 프로토콜이다. 2PC는 분산 트랜잭션의 일관성을 보장하지만, 단점도 존재한다. 2PC(2-Phase Commit) 프로토콜2PC의 원리2PC는 두 단계로 구성된다: 준비 단계(Prepare Phase)와 커밋 단계(Commit Phase)이다.준비 단계 (Prepare Phase): 코디네이터는 모든 참가자에게 트랜잭션을 준비할 수 있는지 요청한다. 각 참가자는 준비가 되었는지 여부를 코디네이터에게 응답한다. 모든 참가자가 준비 상태임을 응..