문제가 있습니다. 마이크로 서비스를 사용하자! 이제 13 개의 분산 문제가 있습니다.
시스템을 캡슐화, 응집 및 분리 된 구성 요소로 나누는 것이 좋습니다. 다른 문제를 개별적으로 해결할 수 있습니다. 그러나 모 놀리 식 배포에서는 완벽하게 수행 할 수 있습니다 ( Fowler : Microservice Premium 참조 ). 결국, 이것은 OOP가 수십 년 동안 가르쳐 온 것입니다! 구성 요소를 마이크로 서비스로 전환하기로 결정한 경우 아키텍처상의 이점이 없습니다. 기술 선택과 관련하여 약간의 유연성과 확장 성이있을 수 있습니다 (그러나 반드시 그런 것은 아닙니다!). 그러나 (a) 시스템의 분산 특성 및 (b) 구성 요소 간의 통신으로 인해 두통이 발생합니다. 마이크로 서비스를 선택한다는 것은 이러한 문제에도 불구하고 마이크로 서비스를 기꺼이 사용할 수있는 다른 문제가 있다는 것을 의미합니다.
구성 요소로 깔끔하게 분할 된 단일체를 설계 할 수없는 경우 마이크로 서비스 시스템도 설계 할 수 없습니다. 모 놀리 식 코드베이스에서 고통은 분명합니다. 이상적으로 코드는 끔찍하게 손상되면 컴파일되지 않습니다. 그러나 마이크로 서비스를 사용하면 각 서비스를 다른 언어로도 개별적으로 개발할 수 있습니다. 구성 요소를 통합 할 때까지 구성 요소의 상호 작용에 문제가 발생하지 않으며, 그 시점에서 이미 전체 아키텍처를 수정하기에는 너무 늦었습니다.
버그의 1 번 원인은 인터페이스 불일치입니다. 누락 된 매개 변수와 같은 눈에 띄는 실수가 있거나 오류 코드 확인을 잊어 버리거나 메소드를 호출하기 전에 전제 조건을 잊어 버리는 등의 미묘한 예가있을 수 있습니다. 정적 타이핑은 코드가 실행 되기 전에 IDE 및 컴파일러에서 가능한 빨리 이러한 문제를 감지 합니다. 다이나믹 시스템에는이 사치품이 없습니다. 결함이있는 코드가 실행될 때까지 폭발하지 않습니다.
마이크로 서비스에 대한 시사점은 무섭습니다. 마이크로 서비스는 본질적으로 역동적입니다. 공식적인 서비스 설명 언어로 이동하지 않으면 인터페이스 사용법의 정확성을 확인할 수 없습니다. 당신은 테스트, 테스트, 테스트해야합니다! 그러나 테스트는 비용이 많이 들고 철저하지는 않으므로 프로덕션 환경에서 여전히 문제가 발생할 수 있습니다. 그 문제는 언제 명백해 집니까? 프로덕션에서 해당 경로가 잘못된 경우에만 실행됩니다. 자극 문제가 더 빠른 피드백으로 이어질 것이라는 생각은유쾌하게 데이터 손실 가능성에 만족하지 않는 한 위험합니다.