나는 이것이 더 이론적으로 도움이 될 것이라고 생각합니다. 마이크로 서비스의 동기 부여 아이디어 중 하나는 아무것도없는 메시지 전달 프로세스입니다. 마이크로 서비스는 액터 모델의 액터와 같습니다. 즉, 각 프로세스는 자체 로컬 상태를 유지하며 한 프로세스가 다른 프로세스의 상태에 액세스하는 유일한 방법은 메시지를 보내는 것입니다 (그리고 다른 프로세스도 메시지를 좋아하지만 응답 할 수 있음). "모든 마이크로 서비스는 자체 데이터베이스를 가지고있다"는 것은 프로세스의 상태 (즉, 마이크로 서비스)가 로컬 및 프라이빗이라는 것을 의미 합니다. 대부분 "데이터베이스"를 함께 배치 해야 함을 나타냅니다."데이터베이스"는 마이크로 서비스와 함께 마이크로 서비스와 동일한 논리 노드에 저장되고 실행되어야합니다. 마이크로 서비스의 서로 다른 "인스턴스"는 별도의 프로세스이므로 각각 자체 "데이터베이스"를 가져야합니다.
마이크로 서비스 또는 마이크로 서비스 인스턴스간에 공유되는 글로벌 데이터베이스 또는 데이터베이스는 이러한 관점에서 공유 상태를 구성합니다. 마이크로 서비스 관점에서이를 처리하는 "적절한"방법은 공유 데이터베이스가 "데이터베이스"마이크로 서비스에 의해 조정되는 것입니다. 데이터베이스의 내용에 대해 알고 싶은 다른 마이크로 서비스는 해당 "데이터베이스 마이크로 서비스"에 메시지를 보냅니다. 일반적으로 원래 마이크로 서비스에 대한 로컬 상태 (마이크로 서비스 인스턴스 "데이터베이스")가 필요하지 않습니다! 변화하는 것은 그 지방 상태가 나타내는 것입니다. "User Sally는 관리자입니다"를 저장하는 대신 "데이터베이스 마이크로 서비스는 'User Sally는 관리자입니다'라는 메시지를 5 분 전에 저장했습니다." 다시 말해, 다른 마이크로 서비스 상태에 대해
이것의 장점은 각각의 마이크로 서비스가 독립적이라는 것입니다. 이로 인해 마이크로 서비스가 원자 단위의 고장이됩니다. 부분적으로 기능적인 상태의 마이크로 서비스에 대해 걱정할 필요가 없습니다. 물론 문제는 마이크로 서비스 네트워크로 옮겨졌다. 마이크로 서비스가 다른 마이크로 서비스에 접속할 수 없어서 원하는 기능을 수행하지 못할 수 있습니다. 그러나, 이점은 마이크로 서비스가 잘 정의 된 상태에 있고 예를 들어 오래된 신념을 해결함으로써 성능이 저하되거나 제한된 서비스를 제공 할 수 있다는 것입니다. 단점은 시스템 전체의 일관된 스냅 샷을 얻는 것이 매우 어렵고, 많은 (과도의) 중복 및 복제가있을 수 있다는 것입니다.
물론 오라클의 인스턴스를 모든 Docker 컨테이너에 고정시키는 것은 아닙니다. 첫째, 모든 마이크로 서비스에 "데이터베이스"가 필요한 것은 아닙니다. 일부 프로세스는 올바르게 작동하기 위해 지속적 상태가 필요하지 않습니다. 예를 들어, 두 프로토콜 간을 변환하는 마이크로 서비스에는 영구 상태가 반드시 필요한 것은 아닙니다. 지속 상태가 필요한 경우 "데이터베이스"라는 단어는 "지속적 상태"를 나타내는 단어 일뿐입니다. JSON이 있거나 Sqlite 데이터베이스 또는 로컬로 실행중인 Oracle의 사본 또는 로컬의 다른 방법이있는 파일 일 수 있습니다지속적으로 데이터 저장. "데이터베이스"가 로컬이 아닌 경우 순수한 마이크로 서비스 관점에서 별도의 마이크로 서비스처럼 취급해야합니다. 이를 위해 RDS 인스턴스를 마이크로 서비스의 "데이터베이스"로 만드는 것은 결코 의미가 없습니다. 다시, 관점은 "자체 RDS 데이터베이스가있는 다수의 마이크로 서비스"가 아니라 " RDS 데이터베이스 와 통신하는 다수의 마이크로 서비스 "입니다. 이 시점에서 데이터가 동일한 데이터베이스 인스턴스에 저장되는지 여부는 차이가 없습니다.
실제로 마이크로 서비스 아키텍처는 엄청난 복잡성을 추가합니다 . 이 복잡성은 부분 실패를 심각하게 처리하는 가격 일뿐입니다. 많은 사람들에게 혜택을받을 가치가없는 것은 과잉입니다. 가장 유익한 방식으로 시스템을 자유롭게 설계해야합니다. 단순성과 효율성에 대한 우려가 순수한 마이크로 서비스 아키텍처와의 편차로 이어질 가능성이 높습니다. 비용은 서비스 간의 보이지 않는 상호 작용 및 원하는대로 자유롭게 배포 및 확장 할 수있는 제한과 같은 고유 한 복잡성을 야기하는 추가 커플 링입니다.