수량이 5 미만인 모든 품목의 품목 세부 사항을 검색하도록 재고 서비스에 요청합니다. 그러면 사용자 ID를 포함한 목록이 리턴됩니다. 그런 다음 인벤토리 서비스에서 얻은 사용자 ID 목록에 대한 사용자 이름 및 연락처 세부 정보를 얻기 위해 사용자 서비스에 대한 별도의 요청이 이루어집니다.
그렇습니다.
물론, 모놀리스에서는 관련 항목을 쿼리하고이를 사용자 모델에 공급하고 동일한 데이터를 얻는 인벤토리 모델을 가질 수 있습니다.
또는 동일한 관계형 데이터베이스에 저장하고 SQL을 작성하면 데이터베이스가 인벤토리 테이블과 사용자 테이블을 가져 와서 마술을 수행하고 원하는 데이터를 얻을 수 있습니다.
에 관계없이 당신이 그것을 할 방법의 어딘가에 됩니다 본질적으로, 재고 시스템에서 사용자 ID 목록을 가져 오는 사용자 시스템에 그들을 공급 및 데이터의 목록을 컴파일 코드합니다.
대답해야 할 질문은 성능 및 유지 관리 및 기타 "부드러운"특성에 관한 것입니다.
마이크로 서비스의 주요 이점은 확장입니다. 한 시스템에 1 만 명의 사용자가 있고 약간 느린 경우 다른 시스템을 추가 할 수 있으며 시스템이 두 배 빠릅니다. 8을 더 추가하면 10 배 빠릅니다. (선형 스케일링은 아마 낙관적이지만, 이상과 아닌 그 희망에 불합리한.)
그리고 이것은 서비스 당 입니다. 인벤토리 시스템에 병목 현상이 발생하면 사용자에 대한 보고서 이상의 용도로 사용되며 해당 서비스에만 더 많은 시스템을 추가 할 수 있습니다 . 기계는 또한 전문화 될 수 있습니다; 이 서비스에는 많은 메모리가 필요합니다.이 서비스는 많은 계산을 수행하고 더 많은 CPU가 필요합니다.
스케일링이 필요하지 않은 경우 마이크로 서비스의 또 다른 이점 은 모듈 식 입니다. 물론 모 놀리 식 응용 프로그램은 모듈 식 일 수도 있으며 표준화 된 데이터베이스가 있으며 실제로 모듈 사이의 벽은 유리 벽과 같고 모래의 선은 최악입니다. 마이크로 서비스는 단단한 강철로 분리됩니다.
사용자 시스템이 문자 그대로 화재를 발견하더라도 인벤토리 시스템에는 영향을 미치지 않습니다. 누가 무엇을 구입했는지에 대한 예쁜 보고서를 인쇄 할 수는 없지만 고객은 재고가있는 품목이 있다는 사실을 알고 안전하게 주문할 수 있습니다.
그리고 관계형 데이터베이스 (*)에서 수행하는 것 이상 으로 마이크로 서비스 에서 데이터를 복제하지 않습니다 . 관계형 데이터베이스에서는 join을 수행 할 수 있으며, 이와 같이 목록에 설명 된 것과 같이 목록을 병합하는 것과 같습니다.
뷰를 추가 할 수도 있습니다. 이에 상응하는 것은 병합을 수행하는 새 서비스를 추가하는 것입니다. 세 가지 요청이 발생합니다. 하나는 새 서비스에 해당하는 서비스는 원래 두 가지를 수행합니다. 관계형 데이터베이스에는 서비스 수준에서 구현해야하는 뷰를 최적화하는 멋진 기능이 있습니다. 당신은 "무료"를 얻지 못합니다.
캐싱은 두 값이 일치하지 않으면 어떤 값이 잘못되었는지를 알고 있다는 점에서 데이터 복제와 다릅니다. 일관성을 희생하여 가용성을 높이기 위해 마이크로 서비스에서 종종 사용됩니다 (CAP 정리). 관계형 데이터베이스는 일관성의 제단에서 가용성을 완전히 도살하기 때문에 일반적이지 않습니다. 캐싱을 용이하게하는 마이크로 서비스에는 고유 한 것이 없지만 실제로 캐싱은 주요 관심사이며 마이크로 서비스에서 캐싱을보다 쉽게 만듭니다 .
(*) 마이크로 서비스 떼에서 데이터를 복제하는 것이 합리적이라면, 동등한 관계형 데이터베이스에서도 의미가있을 것입니다.