마이크로 서비스 : MonolithFirst? 주제에 대한 Martin Fowler의 작업의 대부분은 마이크로

나는 모든 장단점,시기 및 이유에 대한 높은 수준의 개요를 얻으려고 노력하는 마이크로 서비스 아키텍처를 연구하고 있습니다. 제가 읽고 /보고있는 많은 정보는 ThoughtWorks (Martin Fowler, Neal Ford, et. al).

이 주제에 대한 Martin Fowler의 작업의 대부분은 마이크로 서비스 (일반적으로 실습은 아니지만 가정의 이름으로)가 아직 젊었을 때 몇 년이 지났으므로 소금 한 알을 많이 사용합니다.

특히 한 가지는 다음과 같습니다.

마이크로 서비스 아키텍처를 사용하는 팀에 대한 이야기를 들으면서 일반적인 패턴을 발견했습니다.

  • 거의 모든 성공적인 마이크로 서비스 사례는 너무 커져서 부서진 모놀리스로 시작되었습니다.
  • 처음부터 마이크로 서비스 시스템으로 구축 된 시스템에 대해 들어 본 거의 모든 경우에 심각한 문제가 발생했습니다.

이 패턴 덕분에 많은 동료들이 마이크로 서비스로 새로운 프로젝트를 시작해서는 안된다고 주장 했습니다. .

(참조 : https://martinfowler.com/bliki/MonolithFirst.html- 강조)

이제 3 년 후 마이크로 서비스를보다 보편적으로 사용하는 것은 일반적으로 새로운 서비스가 더 큰 (마이크로 서비스보다 작지만 모노 로닉스보다 작은) 서비스 청크를 가지고 더 나은 서비스를 제공한다는 것이 일반적으로 동의 하는가? 진화론 적 측정의 일부로 더 세분화되어 있습니까?

또는 위의 설명과 달리 세분화 된 마이크로 서비스 아키텍처로 프로젝트를 처음부터 시작하는 표준이 있습니까?

제정신의 일반적인 접근 방법처럼 보이지만 커뮤니티의 생각에는 궁금합니다.



답변

회사에서 마이크로 서비스를 한동안 수행 한 경우 일부 조각이 이미 구축되어 있으므로이를 통합하기 만하면됩니다. 서비스 인증 또는 Blob 데이터 저장 등의 예가있을 수 있습니다. 이 경우 이미 경계를 정의했으며 새 응용 프로그램에서 코드를 재사용하고 있습니다. 좋은 일입니다.

경계가 어디에 있는지 확실하지 않은 새 코드의 경우 하나의 서비스로 빌드하십시오. 모듈 형으로 유지하면 필요에 따라 마이크로 서비스를 분리 할 수 ​​있습니다. 특히 다른 서비스와 다르게 확장해야하는 서비스를 찾을 때.

마이크로 서비스의 이점은 인스턴스를 추가하여 필요에 따라 수행되는 작업을 확장 할 수 있다는 것입니다. 일부 작업이 갑자기 발생하는 경우 자체 마이크로 서비스로 분리하는 것이 좋습니다.

일반적으로 :

  • 이미 마이크로 서비스를 구축 한 경우 재사용하십시오
  • 새로운 것을 만들고 있다면 아이디어가 먼저 작동하도록하십시오
  • 구축 할 때 일부 서비스를 쉽게 분리 할 수 ​​있도록 모듈 식으로 유지하십시오.
  • 구축 할 때 서비스의 일부를 다른 요율로 주문형 확장 할 수 있어야하는 경우이를 자체 서비스로 분리

너무나 자주, 우리 는 Martin Fowler와 같은 좋은 평판을 가진 똑똑한 사람들로부터 유용한 지침을 들은 후 어떤 식 으로든 흔들리지 않는 어려운 교리로 바꿉니다.

당신은 그런 진술을해야 정신에 그들이 의미하는 방법. Martin Fowler는 분석을 통해 사람들을 마비로부터 구하기 위해 노력하고 있으며 먼저 효과가있는 것을 만들라고 말합니다. 응용 프로그램의 실제 작동 방식에 대한 자세한 내용은 나중에 나중에 분리 할 수 ​​있습니다.


답변

간단한 코드 모듈화를 통해 마이크로 서비스의 가장 중요한 이점을 얻을 수 있습니다. 보유하고있는 모듈 시스템 (maven, npm, nuget 등)을 사용하여 기능 그룹을 모듈로 분리 할 수 ​​있습니다. 각 모듈은 단일 목적을 수행하고 자체 저장소를 저장하고 자체 DB 스키마를 사용하며 자체 구성을 관리하고 자체 기능 백 로그 및 릴리스 일정을 가질 수 있습니다. 그것들은 여전히 ​​모놀리스에 함께 배치 될 수 있습니다. 이는 매우 관리하기 쉬운 오버 헤드이며 몇 가지 좋은 이점을 제공합니다. 더 큰 오버 헤드는 배포를 분리 할 때 발생합니다. 배포를 필요로 할만큼 충분한 규모가 확보 된 경우에만 가치가 있습니다. 코드가 이미 모듈식이라면 시간이 다가 오면 더 쉽게 마이그레이션 할 수 있습니다.


답변

제 생각에는 모놀리스를 먼저 개발하는 것이 좋습니다 (또는 더 나은 방법 : 모놀리스로 응용 프로그램의 일부를 개발하는 것).

도메인과 문제의 경계에 대해 잘 모르는 경우가 있습니다 (예 : 선박 관리 사이트를 구축하거나 선박 서비스와 함대 서비스가 필요합니까, 아니면 선박 서비스로 충분합니까?). 모놀리스는 개발하기가 더 쉬울 수 있습니다.

다른 기술을 혼합 해야하는 경우 (예 : 기존 부분은 C #으로 작성되지만 yoyur 새로운 문제에는 기계 학습이 필요하며 Python으로 가장 잘 수행됨)이 작업을 중지해야합니다. 예를 들어, 모든 사람들이이 모놀리스를 구축하고 별도의 서비스 개념을 과시합니다.


답변

MF의 정확한 기사에 대해 몇 가지 질문이 있다고 확신합니다.

내 취향은 이것입니다 :

유지 관리 또는 확장 성 문제가있는 Monolith는 마이크로 서비스로 세분화하여 향상됩니다. 이러한 프로젝트는 작은 섹션을 분해하더라도 측정 가능한 이득을 얻을 수 있고 행복 할 때 그 아래에 선을 그릴 수 있으므로 거의 항상 ‘성공적’입니다.

절반의 단일체 + 메시지 대기열 및 몇 개의 작업자 프로세스가 ‘마이크로 서비스 아키텍처’로 간주되는 것은 술집을 낮추는 논쟁이지만 , 프로젝트에 대해 이야기 할 때 분명히 호출 할 것입니다.

반면, 선택한 아키텍처에 관계없이 새로운 프로젝트는 기대치를 충족하지 못할 위험이 있으므로 당연히 성공률이 낮아질 것입니다. 또한 모든 것을 ‘최상의 실습 마이크로 서비스 아키텍처’를 처음부터 목표로 삼기 시작했다면, 새로운 기술과 더 어려운 마이크로 서비스에 집중할 수 있습니다.

또한 우리는 MF가 큰 OOP 관점에서 작성한다는 것을 기억해야합니다. 그는 자연스럽게보다 현대적인 분산 접근법에 회의적입니다.

요즘 나는 대기업 솔루션이 마이크로 서비스 요소를 통합 할 것으로 예상하고 단일 데스크탑 스타일의 응용 프로그램을 배포하지 않는 한 어리석은 사람이 하나의 거대한 단일 응용 프로그램을 만드는 것이 좋습니다.


답변

제 경험은 기술 문제보다는 사람 문제로 인해 더 많은 프로젝트가 실패하는 것을 목격했습니다. 불행히도 사람들은 실패를 좋아하지 않으므로 실패 이유를 잘못보고하고 기술을 비난하는 경향이 있습니다.

필자의 영역에서, 금융 분야에서 오늘날 대부분의 새 프로젝트는 마이크로 서비스 아키텍처를 따르고 있으며 TCO (총 소유 비용) 관점에서이기는 아키텍처 인 것 같습니다. 이러한 프로젝트는 자주 실패하지 않는 것으로 보이며 주어진 이유로 인해 응용 프로그램 아키텍처를 문제로 자주 나열하지는 않습니다.