나는 최근에 마이크로 서비스에 대해 많은 것을 읽었으며 여기까지 내가 얻은 결론 중 일부가 있습니다 (어쨌든 틀렸다면 정정하십시오).
- 마이크로 서비스 아키텍처는 도메인 중심 디자인과 잘 어울립니다. 일반적으로 하나의 MS는 하나의 경계 컨텍스트를 나타냅니다.
- 마이크로 서비스 A 가 마이크로 서비스 B에 상주하는 기능을 필요로 하는 경우 , 내 모델이 잘못되었을 수 있으며 A 와 B 는 실제로 하나의 마이크로 서비스 / BC 여야합니다.
- 마이크로 서비스 (직접 HTTP 요청) 간의 동기 통신이 잘못되어 마이크로 서비스의 목적을 무시하고 구성 요소간에 커플 링이 발생합니다.
- 서비스 간의 비동기 통신이 바람직합니다. 서비스는 이벤트를 메시지 큐에 게시해야하므로 다른 서비스는 해당 이벤트의 일부를 구독하고 처리하거나 컨텍스트를 사용하여 필요한 일부 데이터를 복제 할 수 있습니다. 이런 식으로, 서비스는 다른 서비스가 다운 된 경우에도 요청을 처리 할 수 있으며 동기 통신에서는 그렇지 않습니다.
- 마이크로 서비스 A가 이벤트를 공개 하면 마이크로 서비스 B 가 해당 이벤트를 구독하고 결과로 새 이벤트를 생성하는 경우 마이크로 서비스 A 는 새로 작성된 이벤트를 처리 하는 것이 아니어야합니다. 원인은 순환 종속성입니다. 이 경우 세 번째 마이크로 서비스를 도입하거나 A 와 B 를 AB 마이크로 서비스 에 결합해야 합니다.
- 마이크로 서비스 는 실제로 잘못된 용어입니다. 우리는 작은 맥락을 위해 노력해야하지만, 반드시 그런 것은 아닙니다. 용어는 "마이크로 서비스"가 아니라 " 직업 서비스를 수행하기에 충분히 큰 "이어야합니다 .
- 마이크로 서비스를 사용하면 전체 시스템을 망칠 염려없이 새로운 기능을보다 쉽게 도입 할 수 있습니다. 새로운 서비스를 도입하거나 기존 서비스 중 하나를 리팩토링하여 수행 할 수 있습니다.
- 각 마이크로 서비스에는 자체 데이터 스토리지가 있어야합니다. 이 아키텍처에서는 데이터 복제 / 복제가 바람직합니다.
이 아키텍처에 대한 이해를 확인하는 것 외에, 질문의 다른 부분은 주로 서비스 검색과 관련이 있습니다. 서비스가 비동기식으로 통신하고 Amazon SQS와 같은 중앙 이벤트 큐를 사용하는 경우 서비스 검색이 아키텍처와 같은 위치에 있지 않습니까?
서비스는 시스템의 다른 서비스에 대한 지식이 없어야합니다. 그들은 게시하거나 구독해야하는 상황과 이벤트 만 알고 있습니까?