2017-02-25 3 views
1

node.js 프로젝트를 마이크로 서비스 접근 방식으로 이동하기 시작했으며 데이터를 공유하는 방식을 얻지 못하고 있습니다. 다음은 예입니다, 나는 다음과 같은 제한된 상황 있다고 가정 : Microservices : 한정된 컨텍스트간에 데이터가 필요할 때 시나리오를 처리하는 방법

  • 이미지 (사용자 계정, 권한, 로그인/로그 아웃, 프로파일 등을 관리하는 데 사용)

    • 계정 (예 : 업로드 파일을 관리하는 데 사용 주어진 계정과 연결된 프로필 사진, 이미지 갤러리 등)
    • 비디오 (특정 사용자와 관련된 다양한 형식)이 예에서

    에 비디오 업로드 및 트랜스 코딩을 관리하는 데 사용, 이미지 및 비디오 보인다 정해진 계좌에 자연스럽게 의존하는 것 ext 또는 microservice. 계정 데이터베이스를 이미지 및 비디오 데이터베이스에 복사하고 필요할 때만 계정 데이터를 저장할 수 있다고 가정하지만 계정 정보가 자주 업데이트되므로 언급하지 않아도 일관성 유지와 관련하여 악몽처럼 보입니다. 다른 마이크로 서비스에는 이와 동일한 종속성이 필요합니다. 세 개의 마이크로 서비스가 모두 동일한 데이터베이스를 사용할 수는 있지만 각 마이크로 서비스가 자체 데이터베이스에 연결된다는 권장 사항을 위반하게됩니다.

    이 시나리오를 처리하기 위해 권장되는 접근 방법은 무엇입니까? 나는 아직 계획 단계에 있으며 내가 올바른 방법으로 이것을하고 있는지 확인하고 싶다.

  • +0

    * ... 이미지와 비디오가 계정에 자연스럽게 종속되어있는 것처럼 보입니다 ... * - 이것은 사용자에게 명백하게 보일 수 있지만 왜 이것이이 경우인지 분명하지 않습니다. 이 종속성의 본질은 무엇입니까? –

    +0

    두 항목은 궁극적으로 사용자를 생성 한 항목에 속합니다. 따라서 사용자를 생성 한 외부 키가 사용자에게 연결되어 있어야합니다. – user1790300

    답변

    1

    계정 데이터를 비디오/이미지 서비스로 복사 할 필요가 없습니다. 비디오/그림을 저장할 때 accountID를 지정하십시오. 당신은 API 게이트웨이와 함께 작업하는 경우

    , 당신은 그것에서 서비스 2 개 비동기 병렬 통화를 할 수 있습니다 : 당신은 예를 들어 사용자를 얻을 필요하고 이미지를이되면

    , 당신은 데이터를 얻을 수있는 다른 옵션이 있습니다 , 두 데이터를 하나의 DTO로 결합하여이를 돌려 준다.

    사용자의 특정 데이터가 필요하기 때문에 처음에는 불가능하므로 계정 서비스에 전화를 걸면 해당 이미지 서비스로 전화를 걸어 데이터를 검색하고 전체를 보냅니다. 패키지 다시.

    가능한지 아닌지는 사용자에게 달려 있습니다.

    간단히 말해 각 동영상/이미지 엔티티에 계정 ID를 저장하십시오.

    1

    내가 계정으로 등 , 이미지에 걸쳐 계정 테이블을 복사 비디오 데이터베이스 만 필요한 계정 데이터를 저장하지만 이 유지 일관성의 측면에서 악몽처럼 보인다 수 있다고 가정 정보가 자주 업데이트됩니다. 다른 마이크로 서비스가 이와 동일한 종속성을 필요로한다면

    나는 확실히 과잉이라고 생각합니다. 실제로, 이러한 의존성의 정도는 비디오 및 이미지 서비스 모두가 자신의 엔티티를 연관시켜야하는 계정을 알 필요가있는 것처럼 보입니다. 두 경우 모두 단순히 엔티티에 대해 계정 ID를 저장하면됩니다.

    이렇게하면 계좌 변경에 따른 일관성 문제가 줄어들어 계정을 변경할 수 없게 될 수 있습니다. 이것이 의미하는 바는 일단 계정이 생성되면 절대로 제거 할 수 없다는 것입니다. 이렇게하면 더 이상 존재하지 않는 계정에 동영상 또는 이미지를 연결할 수 없습니다.