본문 바로가기

분류 전체보기

(5)
[aws] 고가용성 Multi AZs EKS 구성하기 - 맨땅에 헤딩 들어가며서버를 구성할 때 DR(Disaster Recovery), 고가용성의 목적으로 여러 IDC 에 분산하여 서버를 배치하는 모습을 많이 볼 수 있습니다.휴먼 에러로 인한 경우가 많지만, 특정 IDC 가 있는 지역에 지진, 화재 같은 자연재해나 outage 정전으로 IDC 전체가 정상적으로 가동될 수 없는 경우들이 종종 있습니다.AWS 에서 서버를 제대로 구축해본 경험이 없어서, AWS EKS 서비스를 통해 고가용성 Multi IDC(AZ) k8s cluster 를 어떻게 구성할 수 있는지 필요한 기본 개념들부터 살펴보면서 알아보고자 합니다. IDC 가 날아간 사례고가용성 전에 고려 사항First question, what’s the requirement?Is there a budget?What’s t..
[Java 21] Virtual Thread 의 원리 - Continuation 들어가며Java 21 에는 경량 스레드 모델인 Virtual Thread 가 추가되었습니다. 기존 Java 의 스레드는 커널의 스레드와 1 대 1 매칭이 되기 때문에, 다수의 스레드를 사용하여 프로그래밍 하기에는 컨텍스트 스위칭 비용이 많이 들었습니다. 이를 보완하기 위해 Spring Webflux 와 같은 Reactive Programing 이나 Kotlin 의 Coroutine 을 많은 곳에서 적용하고 있으며, Spring Webflux + Kotlin Coroutine 조합은 하나의 표준처럼 보여지기도 합니다. 하지만, Webflux 를 사용하기 위해서는 DB 등의 드라이버들이 Mono, Flux 를 사용하는 Reactive 방식을 지원해주어야 하며, 잘못하여 blocking 로직이 애플리케이션에 ..
Spring Webflux filter 로직 살펴보기 Problemspring webflux 에서 logging, exception handling 을 위해서 filter 로직을 넣고자 했습니다. 로깅은 분석을 위해서 request body 와 response body 를 같이 기록하고자 하였고, exception 같은 경우 exception filter 에서 잡아 약속된 error 응답 형식으로 내려주고자 하였습니다. 또한 exception filter 가 먼저 수행되도록 하여 exception 이 발생한 request 도 기록할 수 있도록 filter 의 순서도 고려 대상이었습니다. webflux 에는 controller annotation 방식, router 방식 두가지가 있으며, webfilter, handlerFilterFunction 등 두 방식..
spring webflux, kotlin coroutine 환경에서 aop 사용해보기 Background) Spring reactive cacheThis topic is still relatively new. At the time of writing this article, there was no fluent integration between @Cacheable and reactive frameworks. The primary issue is that there are no non-blocking cache implementations (JSR-107 cache API is blocking). Only Redis is providing a reactive driver.Despite the issue we mentioned in the previous paragraph, we can st..
[gRPC][java][k8s] client side load balancing 열심히 해보기 Problem) 왜 gRPC server 마다 부하가 다르지? k8s 클러스터 환경에서 공통 로직을 grpc server 로 분리하여 구동하고 각기 다른 애플리케이션 client 들이 k8s service 로 묶인 endpoint 를 사용하여 grpc server 에게 요청을 보내고 있었습니다. k8s service 로 묶여 있고 round-robin 으로 요청을 분배한다고 알고 있었기에 모든 grpc server 들이 동일한 부하를 받을 것이라 생각했습니다. 하지만, 각 grpc server 받는 부하는 달랐으며 client 와 맺은 connection 의 개수도 약간 다름을 metric 을 통해 확인했고 부하를 많이 받는 grpc server 에 연결되 애플리케이션 서버에서 지연이 발생하였습니다. W..