본문 바로가기

전체 글

(23)
[Event Sourcing & CQRS ] 이론 Event-Driven MSA를 공부하기 위해 핵심이라 할 수 있는 Event Sourcing 및 CQRS 이론 부분을 https://www.youtube.com/watch?v=Yd7TXUdcaUQ&t=5807s 의 Youtube 동영상 보고 정리 Event Sourcing 개념 RDS를 사용하여 상태를 저장하는 시스템에서, 사용자가 장바구니에 특정 상품을 넣을 수 있는 애플리케이션을 생각해봅시다. 이런 상태에서 장바구니에서 사용자가 아이템을 빼면 상태를 기반으로 하는 시스템에서는 상태의 일부가 삭제됩니다. (장바구니 항목 삭제) 이런 방법은 사용자나 개발자한테 딱히 나쁘지 않음. 그런데 비즈니스 담당자 입장에서는 C라는 아이템을 사용자가 장바구니를에서 뺐다는 사실을 알고 싶은 경우가 있을 수 있음. (..
[Go MSA with Docker Swarm] 11-Hystrix&Resilience 이번 블로그 포스트에서는, 서비스간 통신이 이뤄질 때 통신이 좀 더 resilient하도록 circuit breaker 패턴을 사용해보겠습니다 Overview 아래 그림과 같은 아키텍처를 한번 생각해보죠 서비스 Y에서 장애가 발생하면 무슨 일이 일어날까요? 예를 들어 서비스 Y가 request들을 계속해서 받지만 response를 주지 않고 계속 기다린다고 합시다. 해당 서비스의 클라이언트 (service N, service A)들은 결국 타임아웃으로 처리 할 것입니다. 그런데 당신의 서비스가 일 초에 100~1000개의 요청을 처리하는 시스템이라면 thread pool이 계속 꽉차게 될것이고, 메모리 사용량이 엄청나게 올라갈 것입니다 + end 클라이언트들은 계속 기다릴 것이고요. 마이크로서비스에서는 ..
[Go MSA with Docker Swarm] 09-AMQP 이번 블로그 포스트에서는 go microservice간 RabbitMQ을 사용하여 AMQP 기반 통신을 해보겠습니다. Intro MSA는 애플리케이션의 비즈니스 도메인들을 bounded context기준으로 나누고 서로의 도메인들이 다른 도메인들에게 의존하지 않게 구성합니다. 이방식은 ACID와 달리 데이터들이 eventual consistency합니다. MSA에서 서비스들이 loosely coupled 구성되게 위해 서비스 들간의 통신을 http같은 strict request/response 방식 대신 message queue를 이용하는 방법입니다. 이번 블로그에서는 우리의 "accountservice"가 RabbitMQ를 통해 새로운 서비스로 통신하는 방법을 실습해보겠습니다. 메시지 전송 아주 심플한..