마이크로 서비스 아키텍처에서 공유 개념을 어떻게 처리합니까?


39

개발중인 응용 프로그램의 아키텍처 패턴을 연구 중이며 마이크로 서비스 접근 방식이 좋은 선택 인 것처럼 보이지만 서비스 간의 상호 작용을 처리하는 방법을 잘 모르겠습니다.

이 응용 프로그램은 주로 사용자, 사용자가 소유 한 프로필, 사진 및 사진에서 일대 다 프로필을 나타내는 태그를 처리합니다. 사용자가 업로드 한 사진을 반환하고 태그가 지정된 특정 프로필이 포함 된 사진을 반환하는 방법 등이있을 수 있습니다.

이것은 마이크로 서비스 기반 아키텍처를 설계 할 때 처음으로 사용 된 것으로, 모 놀리 식으로 구성된 도메인 모델에서 영감을 얻은 역사 에서 나왔습니다 . 그 세계에서 컨트롤러는 이러한 도메인 객체를 함께 연결하지만 마이크로 서비스 방식으로 작동하는 방식으로 머리를 감싸는 데 어려움을 겪고 있습니다.

답변:


34

일반적으로 서비스는 데이터에 액세스해야 할 때 다른 서비스를 호출합니다. 각 데이터는 특정 서비스에 속해야하며이 서비스는이 데이터에 액세스하고 수정하는 유일한 진입 점이됩니다. 일부 서비스는 단순하며 일반적으로 도메인 모델 (예 : 사용자 처리 서비스)과 밀접하게 일치하는 반면, 다른 서비스는 고급 서비스이며 다른 서비스의 데이터를 사용합니다 (예 : 업로드 한 사용자에 대한 정보와 함께 사진 목록 표시) ).

유스 케이스에서는 외부에서 시작하여 API를 통해 사용자에게 제공 할 오퍼레이션 (백엔드 서비스 인 경우) 또는 GUI (웹 애플리케이션 인 경우)에서 사용할 수있는 오퍼레이션을 생각해야합니다. GUI 부분은 종종 자체 컨트롤러가있는 일반 응용 프로그램입니다. AngularJS와 같이 REST를 통해 작업을 호출 할 수 있지만 이러한 엔드 포인트는 GUI 응용 프로그램의 용도로만 사용되며 일반적인 의미로는 마이크로 서비스가 아닙니다.

업 로더에 대한 정보와 함께 사진을 표시한다고 가정합니다. 사용자 ID가 주어진 사용자에 대한 정보와 사진을 나열 할 수있는 사진 서비스 (예 : 일부 기준으로 검색)를 반환하는 사용자 서비스가있을 수 있습니다. 사진 목록에는 각 사진마다 업로드하는 사용자의 ID가 포함됩니다. 이러한 방식으로이 두 서비스는 서로 연결되지 않습니다. 사진 서비스는 사용자 ID 만 알고 있으며 사용자 데이터 자체는 아는 것이 없습니다. 이 두 가지 서비스 외에 "업 로더에 대한 정보가 포함 된 사진 목록"과 같은 작업을 통해 세 번째 서비스를 만들어 다른 두 서비스를 호출하고 이들이 반환하는 데이터를 결합 할 수 있습니다. 또는이 작업은 서비스 대신 웹 응용 프로그램에서 수행 할 수 있습니다.


1
이것은 나에게 큰 도움이되었습니다. 스택을 실행하는 UI 사용 사례를 작성하는 것으로 시작했으며 모든 것이 제자리에 떨어졌습니다.
anjunatl

1
이 특정한 예에서, 우리는 예를 들어해야합니다. 목록에 10 장의 사진이있는 경우 사용자 데이터를 얻기 위해 10 번의 사용자 서비스 호출? 많은 오버 헤드가 추가되지 않습니까?
Ricardo Souza

1
@rcdmk 여러 ID 목록을 입력으로 가져오고 여러 사진을 출력으로 반환하는 REST 엔드 포인트를 추가 할 수 있습니다. 이것은 종종 성능상의 이유로 실제로 수행됩니다. 때로는 API 디자인이 순도와 실제 고려 사항 사이의 절충입니다.
Michał Kosmulski

@ MichałKosmulski 토론을 시작해야하지만 StackExchange 디자인은 권장하지 않습니다.)이 특정 예에서 마이크로 서비스 접근 방식에 대해 싫어하는 점은 기본 데이터베이스 (사용자 및 이미지가 저장된 위치)에 대한 직접 쿼리가 훨씬 효율적일 수 있다는 것입니다. 이러한 업스트림 서비스가 다른 업스트림 서비스 등에 의존하는지 상상해보십시오. 데이터 저장소에 대한 직접 쿼리가 훨씬 안전합니다. 내 5 센트 밖에 안 돼 다시 한 번 주제에 대해 생산적인 토론을하고 싶지만 StackExachange는 그에 대한 좋은 장소가 아닙니다 (마이크로 서비스 토론 포럼을 추천 할 수 있습니까?)
ajukraine

@ajukraine 나는 stackexchange에 대화가있어 토론하기에 좋은 장소라고 생각합니다. 성능과 관련하여 : 1. 마이크로 서비스에는 성능 비용이 부과되며, 2. 마이크로 서비스는 일부 상황에는 적합하지만 다른 상황에는 적합하지 않습니다. 종속성과 관련하여 : 마이크로 서비스 아키텍처에서는 종종 종속성 수를 줄이기 위해 로컬 데이터 사본을 작성하고 비동기 메시징을 사용합니다. 응용 프로그램의 각 모듈을 별도의 응용 프로그램으로 자동 변경하는 것이 아니라 실제 아키텍처 변경입니다.
Michał Kosmulski

4

이 응용 프로그램은 주로 사용자, 사용자가 소유 한 프로필, 사진 및 사진에서 일대 다 프로필을 나타내는 태그를 처리합니다. 사용자가 업로드 한 사진을 반환하고 태그가 지정된 특정 프로필이 포함 된 사진을 반환하는 방법 등이있을 수 있습니다.

글쎄, 프로필 서비스는 사용자 객체와 함께 작동해서는 안됩니다. 더 이상 데이터를 반환하도록 요청 된 사용자의 ID 만 알 수 있습니다. 이 방법으로 사용자 서비스와 프로필 서비스 간의 상호 작용이 필요하지 않습니다.

그래도 문제가 해결되지 않으면 처리중인 정확한 상황을 설명하여 명확하게 설명해 주시겠습니까?


이것과 Michal의 대답은 그것을 이해하는 데 도움이되었지만 그의 제안은 내가 필요한 서비스를 찾는 데 도움이되었습니다. 객체에 대한 참조 (사용자 객체 대 사용자 ID) 대신 전체 객체를 나타내야한다는 사고 방식에 갇혔습니다. 감사합니다!
anjunatl

@anjunatl Welcome;)
Vladislav Rastrusny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.