Open skarltjr opened 2 years ago
앞서 말했듯이 서비스의 규모가 커지면 복잡도 또한 증가한다고한다.
spring cloud는 이러한 부분을 지원해주는데
- 분산 시스템에서 공통적인 패턴(구성 관리, 서비스 검색, 라우팅 등..)을 구축할 수 있는 라이브러리 제공
- 이를 통해 개발자는 분산 시스템에서 공통적으로 필요한 설정을 보다 쉽게 구축가능하며
- 따라서 서비스의 기능 구현에 집중할 수 있다.
1. spring config :
여기서 잠깐! 처음에는 단순히 비동기로 처리할 수 있는 부분을 비동기로 처리함으로써 빠른 응답시간을 가져올 수 있어서 까지만! 생각해볼 수 있었는데 scale-out에 따른 데이터베이스 정합도 문제와도 관련된 얘기를 찾아볼 수 있었다.
★msa는 각 서비스별로 scale-out이 가능하다. 예를 들어 주문 서비스가 존재한다고 생각해보자 이 때 아래 그림에서 a,b,c라는 데이터가 들어오면 어디에 저장될까? -> 분산되어 저장되는 경우 이벤트를 통해 동기화 -> 추가로 데이터베이스 다중화의 경우 master db가 command를 처리하고 이벤트로 다른 slave db와 동기화 시킨 후 조회를 slave에서 처리하기도 한닥 그러면 여기서 정합성 문제가 생기는데 이 때 아래 그림과 같은 방식으로 mq를 사용하면 정합성문제를 해결할 수 있다고한다.
- <img width="378" alt="스크린샷 2022-03-16 오후 5 36 27" src="https://user-images.githubusercontent.com/62214428/158549484-764b80a0-c847-4096-9f0a-9eeefaccbbcb.png">
eureka server
- 유레카 서버는 유레카 클라이언트에 해당하는 마이크로서비스들의 상태 정보가 등록되어있는 레지스트리를 갖는다
- client는 서비스가 시작될 때 자신의 정보를 등록
- heartbeat를 통해 클라이언트는 30초마다 레지스트리에 ping을 전송하여 자신이 가용 상태임을 알린다
- 레지스트리의 정보는 모든 유레카 클라이언트에 복제되어 있어 필요할 때마다 가용 상태인 모든 서비스 목록 확인이 가능
등장 배경
MSA
MSA의 장점
MSA의 단점