마이크로 서비스 REST 또는 AMQP


15

마이크로 서비스 아키텍처에 관한 많은 기사를 읽었으며 AMQP 또는 REST를 언제 사용해야하는지 궁금했습니다.

서비스 간 느슨한 연결이 좋은 것이며 AMQP가 좋은 선택 인 것 같습니다. 그러나 AMQP를 사용하면 REST 엔드 포인트가 더 이상 필요하지 않다는 의미입니다 (그러나 HATEOAS 개념을 잃어버린 것입니다).

그러나 REST가 실제로 서비스를 구축하는 좋은 방법입니까? 원인 엔드 포인트를 사용하지 않습니다 ... 어떤 경우에 다른 엔드 포인트보다 낫습니까?

언제 하나를 사용해야합니까?

답변:


10

REST를 폐기하면 HATEOAS 이상의 기능을 잃게됩니다. 마이크로 서비스가 퍼블릭 (그리고 퍼블릭이거나 적어도 언젠가 퍼블릭하는 것이 좋습니다) ¹ 인 경우 REST 및 SOAP 이외의 다른 것을 사용하는 것이 문제가됩니다.

  • 일부 개발자는 AMQP를 사용한 적이 없습니다.

  • 일부는 AMQP를 사용했지만 종종 REST 및 SOAP에 훨씬 익숙합니다.

  • 일부 언어의 AMQP 라이브러리는 특히 간단하지 않습니다.

  • 서비스에 대한 수동 실험은 매우 제한적입니다. CURL을 사용하여 Amazon S3에 대한 요청을 수행 할 수 있습니다. SQ의 AMQP 변형을 사용하려면 컴퓨터에 무엇을 설치 해야 합니까?

  • REST 및 SOAP 디버깅은 쉽습니다. HTTP 교환을 추적하고 분석합니다. AMQP 교환을 디버깅하기 위해 어떤 도구를 사용해야하는지 잘 모르겠습니다.

AMQP는 훌륭하지만 이벤트를 기반으로 한 매우 구체적인 교환 목적으로 수행됩니다. 기술적으로 AMQP를 사용하여 RPC를 수행 할 수는 있지만 주요 목적은 아닙니다.

비동기 측면도 중요합니다. 때로는 이점이 있습니다 : 서버에 요청을하는 동안 앱의 사용자 인터페이스를 차단하고 싶지 않습니다. 때로는 필요 이상으로 힘들어 지기도합니다. 로컬 파일이 손상되어 Amazon S3에서 파일 백업을 복구 한 다음 백업을 복원해야하는 경우 계속 진행하기 전에 배치 파일에서 작업을 마치려면 반드시 CURL이 필요합니다. 동기화 작업 (특정 시간 초과)은 완벽하게 이해됩니다.

기본 작업을 위해 REST를 유지하십시오.

  • 제품 구하기

  • 송장 저장

메시징이 실제로 의미가있는 작업에 AMQP를 사용하십시오.

  • 9 월부터 모든 인보이스를 처리하고 보고서를 표시 할 준비가되면 앱에 알립니다 (일반적으로 2 ~ 10 분이 소요됨)

    AMQP의 이점은 비동기 적 측면입니다. 10 분 동안 보류중인 HTTP 요청은 시간 종료 및 기타 문제를 일으킬 가능성이 높습니다.

  • 지원 담당자, 데이터베이스 관리자, 모니터링 팀,이 데이터베이스를 사용하는 응용 프로그램 개발자 등 관심있는 모든 사람에게 백업이 손상되었다는 정보 전달

    AMQP의 이점은 무엇보다도 백업을 추적하고 손상된 것을 발견하면 경고를 트리거하는 응용 프로그램을 변경하지 않고 가입자를 추가 할 수 있다는 것입니다.


¹ 회사 외부의 사용자가 공개 웹 서비스를 반드시 사용할 필요는 없습니다. 대기업 또는 중소 기업에서 서비스는 종종 같은 회사의 다른 부서에서 사용되며 제 3자가 사용하는 것과 동일한 요구 사항을 갖습니다. 모든 전화를 불신해야합니다 ( 누가 같은 회사에서 서비스를 호출하는지에 대해 들었다고해서 보안 문제를 악용하지는 않을 것입니다.) 같은 인도인이 반드시 전화 번호를 알지 못하고 반드시 그런 것은 아니기 때문에 제대로 문서화해야합니다 영어를 알고) 등


AMQP를 사용하여 종속 객체를로드하는 것은 어떻습니까? (대규모 마이크로 서비스 아키텍처에서) 과금 서비스와 관련된 사용자와 마찬가지로, 비동기 성 VS REST 증오 (동기) 액세스를 위해 노력합니까?
토마스 토마스

5

둘 다 사용하십시오.

REST 스타일 JSON 웹 서비스는 자바 스크립트, iOS 등과의 상호 운용성에 적합합니다.

AMQP는 장기 실행 프로세스, 이벤트 및 마이크로 서비스 오케스트레이션에 적합합니다.

그러나 둘 다 실제 서비스를위한 통신 래퍼 일 뿐이며 동일한 서비스를 여러 가지 방법으로 노출 할 수 있습니다.

AMPQ는 Websocket을 통해 잘 노출 될 수 있습니다. 웹 소켓을 보면 REST 엔드 포인트와 매우 비슷합니다.


1
"당신이 그것을 찡그린 경우"lol, 그거 좋았어.
Iain Duncan

0

REST는 특히 구성 요소 간의 상호 운용성에 적합한 표준 기술입니다. 이는 핵심 요소이며 다른 사람이 사용할 수있는 웹 서비스를 만드는 데 유용합니다. 그러나 이러한 상호 운용성의 일반적인 문제는 사용자 지정 프로토콜보다 비효율적이라는 점입니다.

서비스가 자신 만 사용하는 백엔드 아키텍처를 작성하는 경우 원하는 프로토콜을 사용할 수 있습니다. 더 이상 상호 운용 가능한 프로토콜을 사용하여 더 이상 제약을받지 않습니다. MQ 또는보다 밀접하게 결합되고 성능이 좋은 것을 사용할 수 있습니다. 사용하는 사례는 사용 사례에 따라 다르며, 메시지 버스는 클라이언트가 누가 보낸 메시지를 받는지 신경 쓰지 않는 데이터를 처리하는 분산 서비스 세트에 매우 적합합니다.


2
나는 그들이 목적이 교차하는 것에 대해 우려하는 한, 동의하지 않습니다. 귀하는 (일반적으로) 공공 인터넷을 통해 AMQP를 노출해서는 안됩니다. 한 가지에 대한 인증 기능이 훨씬 적으며 일반적으로 공용 인터넷 사용자는 활동의 응답을 원합니다. REST는 이러한 이유로 공용 인터넷 사용에 이상적입니다. 그러나 가장 큰 차이점은 AMQP는 비동기 적이며 ( 동작이 가능한 것처럼 동기식 이지만 MQ가 아닌 동기식) REST는 동 기적입니다 (예 : 리턴 202하면 비동기 성을 지시하지만 REST를 사용한 이유는 무엇입니까? 아마도 공개이기 때문에).
Jimmy Hoffa

참고로, 웹 소켓 사용을 위해 AMQP를 노출하여 사용자가 폴링하지 않고 실시간으로 실시간 푸시를받을 수 있기 때문에 실제로 AMQP를 공개해야합니다. 그러나 다시 : 교차 목적으로, REST를 수행하지 않아 소비자가 푸시를받을 수 있습니다. 이것은 REST가 할 수없는 일에 AMQP를 사용하는 또 다른 시나리오입니다.
Jimmy Hoffa

@JimmyHoffa 나는 웹이 아닌 내부 LAN의 웹 서버 또는 클라이언트 또는 마이크로 시어 비서에 무엇이든 연결하는 데 무엇을 요구하는지 알았습니다. 따라서 REST가 좋은 점이지만, 사용중인 모든 것이 원하는대로 사용할 수 있습니다.
gbjbaanb

네, 그건 말이됩니다. 나는 그의 질문을 다르게 읽습니다. 마이크로 서비스에 대한 아이디어를 읽은 것으로 보이며 AMQP 대 REST를 선택 해야하는 관련 이유를 이해하지 못합니다. 내부적으로 원하는 것을 사용할 수 있지만 내부적으로 AMQP와 REST를 사용해야하는 특정 이유가 있습니다. 비동기를 원하는 서비스는 내부적으로 AMQP를 사용해야하며, 동기식 서비스 (순수한 처리 서비스 : 원시 데이터 입력-> 처리 된 데이터 출력 생각)는 REST 여야합니다. 두 IPC 기술에는 서로 다른 장단점이 있습니다. IPC 기술을 알고 답에 나열해야합니다! :)
Jimmy Hoffa

0

AMQP는 지점 간 통신도 지원합니다 (예 : python-qpid-proton자습서 참조 ). REST !=HTTP 부터이를 사용하여 RESTful 인터페이스를 구현할 수 있습니다.

AMQP는 HTTP보다 성능이 훨씬 뛰어납니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.