우리는 아주 오래된 학교 접근 방식으로 돌아가서 마이크로 서비스를 만났습니까?


9

소프트웨어 아키텍처 및 디자인 측면에서 마이크로 서비스는 미들웨어와 어떻게 "스택"됩니까? 나는 Java에서 왔으며 API로 straight REST에서 벗어나 다른 레이어와 연결 매개 변수를 추상화하면 적어도 Java에서는 거의 오래된 학교 아이디어로 돌아 왔습니다. . JVM이 이미 가상 인 경우 가상화로 돌아 왔습니다 .

불가피한 방식으로 RESTful API를 CORBA로 추상화하는 이점을 누릴 수 있습니다. 또는보다 자바 중심적인 방식으로 JMS 또는 MDB입니다.

한때 EJB는 Java에서 큰 문제 였지만, 약간의 클러스터 효과로 인식되었지만 이제는 처음으로 돌아왔습니까?

또는 마이크로 서비스가 CORBA 또는 더 나은 MDB에없는 것을 제공합니까? 마이크로 서비스를 설명하는 (TLDR) Martin Fowler를 읽을 때, 당신이 원한다면 나쁜 문제에 대한 좋은 해결책으로 생각납니다. 또는 문제를 해결하는 수준의 복잡성을 유발하는 폐쇄적 인 접근 방식입니다. 서비스가 실제로 미세하고 많으면 각각 서비스를 운영하고 유지하는 데 1 달러의 비용이 듭니다.

또한 많은 마이크로 서비스 중 하나 의 API가 API를 변경하면 해당 서비스에 따른 모든 것이 중단됩니다. 그것은하지 않는 그것은 느슨하게 결합 된 것 같다 민첩의 반대. 아니면 그 말을 잘못 사용하고 있습니까?

물론,이 극단들 사이에는 불확실한 양의 선택이 있습니다.

상어 대 고릴라 ... 가자! (페단 틱의 경우, 그것은 아이러니하고, 전혀 의도 된 것이 아닙니다. 질문은 액면가로 취해 져야합니다. 질문이 개선 될 수 있다면, 그렇게하거나 의견을 말하고 고칠 것입니다. )

도커에서 실행되는 여러 마이크로 서비스가 모두 한 대의 컴퓨터에서 서로 대화하고 광기를 상상하십시오. 유지 관리 또는 관리가 어렵고 변경 사항이 연속되어 예기치 않은 오류가 발생하기 때문에 변경이 불가능합니다. 이러한 서비스가 여러 시스템에 분산되어있는 것이 어떻게 더 좋습니까? 그리고 그것들이 분산되어 있다면, 아주 오래된 학교 기술이 적어도 어느 정도 분산 컴퓨팅을 해결했을 것입니다.

수평 스케일링이 왜 그렇게 널리 보급되어 있습니까?


4
마감 투표. 당신이 무엇을 요구하고 있는지 왜 명확하지 않습니다. 마이크로 서비스 아키텍처는 또 다른 아키텍처입니다. 더 이상 아무것도 없습니다.
davidk01


1
"이제 그들은 수백 개의 작은 인조 서비스를 가지고 있으며, 모놀리스 대신, 누군가가 그 서비스 중 하나의 계약을 변경하려고 할 때 어떤 일이 발생하는지에 대해 걱정해야합니다. 다른 이름의 원사. 코드가 변경되면 컴파일되는지, 실제로 실행 될지 궁금합니다. " - 멍청한 목 수염 면책 조항에 대한 마이크로 서비스 : 아니요, 나는 목 수염이 아니며 단지 유머 기사입니다.
Thufir

"코드가 컴파일 될지 궁금해하는 대신 ... 코드가 실행 될지 궁금하다 ..."사실 전혀 문제가되지 않는다. 개발자가 모든 관련 당사자에게 알리지 않고 계약을 변경하는 경우 해당 개발자를 매우 열심히 생각해야합니다. 말 그대로. 계약 조건을 사용하는 경우 이동 통신사가 귀하에게 묻거나 알리지 않고 계약 조건을 변경한다고 상상하십니까? 이것이 계약 인 이유-모든 관련 당사자는 계약 변경에 대해 알고 / 동의해야하며, 이러한 변경이 발생할 때 (적절한 개발 흐름이 가정 됨) 모두 테스트되고 원활하게 실행되어야합니다.
Alexey Kamenskiy

1
@Thufir MS가 또 다른 접근 방식이라고 말했듯이 이점과 단점이 있습니다. 실제로 여러 프로젝트 에서이 접근법을 사용했습니다 (특별한 이름이 있다고 들기 전에도). 참고로-그것은 폭포가 아니며, 당신이 만드는 것입니다. 모바일 OS의 (팀 내) 부분을 개발하는 하나의 프로젝트에서 일한 것처럼이 접근법은 OS를 만들 수 없기 때문에 유일한 방법입니다. giant blob인터페이스가 있어야하므로 커널에서 시작하는 각 부분은 일종의 MS이며 코드를 작성하기 시작한 모든 팀은 사양 v0.0.1에 동의해야했습니다.
Alexey Kamenskiy 10

답변:


2

TL; DR. 나는 많은 마이크로 서버 맛의 Kool-Aid를 마시는 즐거움을 얻었으므로 그 이유에 대해 조금 말할 수 있습니다.

장점 :

  • 서비스는 종속성이 안정적이며 시간을 내야한다는 것을 알고 있습니다.
  • 새로운 버전의 롤링 배포 허용
  • 상위 레이어에 영향을주지 않고 구성 요소를 되돌릴 수 있습니다.

단점 :

  • 종속성의 새롭고 반짝이는 기능을 사용할 수 없습니다.
  • API 이전 버전과의 호환성을 깨뜨릴 수는 없습니다.

마이크로 서비스 아키텍처가 어떻게 작동하는지 근본적으로 오해한다고 생각합니다. 실행되는 방식은 모든 마이크로 서비스 (여기서는 MS라고 함)가 모든 클라이언트가 동의하는 견고한 API를 가지고 있다는 것입니다. MS는 API가 유지되는 한 원하는대로 변경할 수 있습니다. API가 유지되는 한 MS를 폐기하고 처음부터 다시 작성할 수 있습니다.

느슨한 결합을 돕기 위해 모든 MS는 버전 n-1의 종속성에 의존합니다. 이를 통해 현재 버전의 서비스가 덜 안정적이며 조금 더 위험 해집니다. 또한 버전이 파도에 나올 수 있습니다. 처음 1 개의 서버가 업그레이드 된 다음 절반이되고 나머지는 마지막으로 업그레이드됩니다. 현재 버전에서 심각한 문제가 발생하면 다른 계층의 기능 손실없이 MS를 이전 버전으로 롤백 할 수 있습니다.

API를 변경해야하는 경우 이전 버전과 호환되는 방식으로 변경해야합니다.


"API가 유지되는 한 MS를 폐기하고 처음부터 다시 작성할 수 있습니다." 새로운 것은 없지만 괜찮습니다. 성능 측면에서, 스펙트럼의 반대쪽 끝에서 이러한 모든 MS는 모 놀리 식 앱 / 서비스 / 시스템과 어떻게 비교됩니까? 배포 측면에서는 소리처럼 들리며 잘못된 경우 수정하십시오 .n 개의 MS를 단일 컴퓨터에 배치하면 잠재적 인 성능 향상이 있습니다 ... 메인 프레임에 가상화되어 있습니까? MS를 수평으로 확장할수록 수직으로 확장하는 것이 더 간단 해집니다 ...? 내 질문을 읽지 못했을 때의 보너스 포인트 :)
Thufir

1
간접적 인 레이어와 마찬가지로 큰 진흙 공에 비해 성능이 저하됩니다. MS의 경우 모든 통화에서 네트워크 왕복 여행을하기 때문에 특히 비쌉니다. 가상화 나 컨테이너를 사용하면 호출이 실제로 시스템을 떠나지 않기 때문에이 왕복이 상당히 짧아집니다. 또한 적은 하드웨어 비용으로 더 많은 격리를 얻습니다 (런 어웨이 서비스는 피어를 해칠 수 없음).
Konstantin Tarashchanskiy

5

우리가 발명 한 모든 소프트웨어 개발 기술은 어떻게 든 복잡성을 관리하는 것입니다. 그것들의 상당 부분은 추상화, 캡슐화 및 느슨한 결합에 관한 것입니다. 마이크로 서비스는 이러한 일을 수행하는 또 다른 방법이기 때문에 이론적으로 높은 수준의 많은 오래된 기술과 유사하지만 유용성이나 관련성이 떨어지는 것은 아닙니다.

느슨한 결합에 관해서는, 당신이 목표를 약간 이해했다고 생각합니다. 작업 A가 작업 B를 호출해야하는 경우 A와 B를 100 % 분리 할 수있는 방법이 없습니다. 절대 일어나지 않을 것입니다. 태스크 B가 태스크 C를 호출하는 경우 태스크 C가 A의 변경에 대해 걱정할 필요가 없도록해야합니다.이 세 가지 태스크가 모두 하나의 큰 얼룩으로 서로 연결되어 있고 구조체를 서로 전달하는 경우 그들 중 하나라도 변한다면 그들 모두가 바뀌어야 할 중대한 기회입니다. 그러나 세 가지 모두 마이크로 서비스 인 경우 기본적으로 A로 변경하면 B 만 업데이트된다는 보장이 보장됩니다 (A의 핵심 기능이 크게 변경되어 새로운 서비스로 만들지 않은 경우 제외). 모든 마이크로 서비스 업데이트가 이전 버전과 호환되는 방식으로 수행되는 경우 특히 그렇습니다.

민첩한 의견과 관련하여 마이크로 서비스 -y 코드가 "큰 얼룩으로 연결된"코드보다 민첩하게 더 잘 재생된다는 개인적인 경험을 통해 알 수 있습니다. 후자는 누군가가 저수준 기능의 버그를 고칠 때마다 문자 그대로 전체 R & D 부서에 "작업을 다시 연결하십시오. 그렇지 않으면 금요일에 모두 충돌합니다"라는 전자 메일을 보내야합니다. 우리는 매주 몇 가지를 얻 습니다 . 그의 코드가 마이크로 서비스에 포함되어 있다면, 새로운 버전을 배포하자마자 우리는 자동으로 수정의 혜택을 누릴 것입니다.

COBRA와 MDB에 대한 의견을 완전히 이해하지 못했습니다. 소프트웨어 아키텍처가 아니라 하나의 구성 요소 인 것 같습니다. 내가 이해하기에 그들은 마이크로 서비스의 메시징 프로토콜을 정의하고 /하거나 마이크로 서비스를 대신하는 대안이 아니라 상기 마이크로 서비스를 구현하는 잠재적 인 방법이다.


1
"이 세 가지 작업이 모두 하나의 큰 얼룩으로 연결되어 있다면 ..."Java에 대한 관점 만 가지고 있지만 "아니오"라고 나쁜 생각은하지 마십시오. 라이브러리, API # 1, API # 2 등을 확인, 당신의 정확한 지점을 달성하기 위해 C는 B의 클라이언트이기 때문에 "C는 A와 변화에 대해 걱정할 필요가해서는 안 ..task" 아니라의 전혀 . 그런 점에서 나는 전혀 새로운 것으로 보지 않는다. 내가 묻는 질문이 희미하다는 것을 알고 있습니다. 나는 그것이 무엇에 관한 것인지 모호하기 때문에 퍼지 질문입니다. 각 어휘에 도움을 줄 수 있다면 각각의 모든 대답이 유용했습니다.
Thufir

1
@Thufir 라이브러리가 모두 동적으로 연결되어 있고 작업이 모두 정확히 동일한 시스템 세트에서 실행되는 경우 실제로는 별도의 롤아웃이 가능합니다. 그러나 디커플링으로 멀리 가고 싶다면 마이크로 서비스를 사용하면 이러한 가정조차 버릴 수 있습니다. 하지 않는 것이 전적으로 합리적입니다.
Ixrec

CORBA는 분산 아키텍처를 정의하기 위해 널리 퍼져있는 이름이 없었을 때 (1990 년 후반) 분산 아키텍처를 가능하게하는 분산 기술입니다. 나중에 SOA 또는 마이크로 서비스라고하는 대략적인 또는 세분화 된 CORBA 기반 시스템을 자유롭게 구현할 수있었습니다. CORBA는 살아남지 못했지만 다른 기술로 다시하고 있습니다. 그러나 문제는 기술이 아니 었습니다. 그렇습니다, 우리는 완전한 원을 가고 있습니다. 우리는 그 과정에서 무언가를 배웠기를 바랍니다.
xtian

4

이러한 서비스가 여러 시스템에 분산되어있는 것이 어떻게 더 좋습니까?

구름 때문에.

아직 웃었습니까? 그럼에도 불구하고 많은 비즈니스에서 소프트웨어의 가장 큰 비용은 더 이상 소프트웨어가 아닙니다. 대역폭, 하드웨어, CDN 비용 등입니다. 이제 모든 사람이 모바일 장치를 사용하므로 훨씬 더 많은 트래픽이 발생합니다. 토스터가 인터넷에 연결되어 있으면 더 나빠질 수 있습니다.

따라서 기업은 이러한 비용을 관리하려고합니다. 구체적으로, 그들은 "이 문제가 발생하면 수백만의 사람들이 내 소프트웨어를 얻거나 사용하도록 서버에 미리 미리 지불하지 않고 어떻게 수백만의 사람들이 내 소프트웨어를 사용 / 사용하도록 할 수 있는가?"라는 비즈니스 문제를 처리하려고합니다. ? ".

왜 수평 스케일링이 그렇게 널리 보급되어 있습니까?

그것은 (거대한 증가하는) 비즈니스 문제에 답하기 때문입니다.

12 명의 사용자가 있으면 모든 서비스를 한 상자에 버릴 수 있습니다. 한 상자에 대해서만 지불하고 싶기 때문에 이것은 좋습니다. 또한 비즈니스 규모에 따라 다양한 서비스를 분할하기 위해 앱 변경에 대한 비용을 지불하고 싶지 않습니다. 요즘에는 고객의 폭도들이 서버에 불을 붙이기 전에 그렇게 할 시간이 없습니다.

또한 서버 할당을 저글링하여 다음을 수행 할 수 있기 때문에 좋습니다.

  1. "폐기물"을 거의 남기지 않고 보유한 대부분의 서버를 사용하십시오.
  2. 소프트웨어의 성능 개별 요소를 측정하십시오.
  3. 릴리스로 인한 배포 / 종료 시간을 줄입니다.

매우 세부적인 배포를 통해 문제를보다 효과적으로 분리 할 수있을뿐만 아니라이 두 가지 작업을 더 쉽고 효율적으로 수행 할 수 있습니다.


좋아, 장점을 볼 수 있습니다. 진입 장벽은 낮지 만 확장 할 수 있습니다 . 루프를 위해 나를 던지는 것은 가로로 n 개의 MS를 확장 할 때 발생한다고 가정합니다. 매우 ... 레트로? 어떤 것. 나는 왜 그것이 틀린 같은지 말을 할 수 없습니다 .
Thufir

애플리케이션 스케일링은 마이크로 서비스가 필요하지 않은 문제입니다. AWS에서 (요청시에도) VM을 매우 쉽게 향상 시키거나 전통적인 아키텍처에서로드 밸런서 뒤에 VM을 추가 할 수 있습니다.
xtian

@ xtian-물론, 그러나 종종 잘못된 것을 확장하여 필요한 것보다 더 많은 돈을 소비합니다. 마이크로 서비스의 기본 개념은 필요한 것 (CPU, 메모리, 디스크, 처리량, GPU) 만 확장한다는 것입니다.
Telastyn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.