본문 바로가기

MSA9

Zipkin 활용 마이크로서비스들간의 통신에 있어서 속도 저하나 장애가 발생할 경우 해당 문제를 추적할 수 있어야한다. 이를 위해 Sleuth와 Zipkin을 활용하게된다. 먼저Sleuth는 분산된 마이크로서비스간에 트래픽의 흐름을 추적(Tracing)할 수 있도록 Trace기록을 로그에 자동 삽입해준다. Sleuth를 적용한 후 Log4j, Logback, SLF4J(Simple Logging Facade for Java)등을 사용하여 로깅하면 자동으로 로그에 서비스명, Trace id , span id 가 삽입된다. 동일한 트랙잰션에 해당하는 트래픽들에 동일한 TraceID를 부여되며 각 트래픽의 고유 id가 span id 이다. 이러한 Trace정보를 Zipkin과 같은 분산 트랜잭션 추적 시스템으로 발신하게되면 비.. 2023. 9. 12.
CircuitBreaker,Resilience4J 구현 user-service에서 사용자 주문정보를 가져오기 위해 order-service에 feignClient로 요청하게된다. 이때 만약 order-service가 매우 느려지거나 셧다운 된 상황 즉 장애가 발생한 상황이라고 가정한다면 user-service에서는 자기 서비스 에러가 아님에도 500에러를 도입하게된다. 장애가있는 마이크로서비스와의 통신을 사전 차단하여 장애가를 방지하는 역할이 바로 CircuitBreaker 이다. user-service와 order-service 통신간에 CircuitBreaker는 정상적인 응답이 올경우에는 계속 CLOSE상태에 있다가 일정횟수이상 비정상적인 응답이올경우 OPEN상태로 변경된다. CircuitBreaker 구현을 위해 Resilience4J를 사용하도록 한.. 2023. 9. 12.
FeignClient 마이크로서비스간의 통신을 함에있어서 RestTemplate을 대신해 가독성이 더좋은 방법인 FeignClient를 알아본다. 먼저 호출하는 곳(유저서비스)에 디펜던시를 추가한다. org.springframework.cloud spring-cloud-starter-openfeign 그후 메인클래스에 어노테이션을 추가해준다. @EnableFeignClients 인터페이스를 통해 다른 api를 호출하도록한다. @FeignClient에서 name 속성은 유레카서버에 등록된 애플리케이션 이름을 뜻한다. 그후 order-service의ㅣ 매핑 url을 세팅후 호출하도록한다. @FeignClient(name = "order-service") public interface OrderServiceClient { @Get.. 2023. 9. 4.
RestTemplate RestTemplate을 활용하여 별도로 구성된 User-serivce 와 Order-serivce의 간에 통신을 구현해보았다. 먼저 user-service에 RestTemplate을 @Bean으로 등록한다. 또한 유레카 서버에 등록된 어플리케이션네임으로 접근하여 통신할수 있도록 로드밸런스 어노테이션을 추가한다. @SpringBootApplication @EnableDiscoveryClient public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); } @Bean public BCryptPasswordEncoder p.. 2023. 9. 4.