다중 계층 이기종 시스템의 REST 또는 메시지 큐?


9

Client application-> Front-end API cloud server-> 와 같은 3 계층 시스템을위한 REST API를 설계하고 user's home API server (Home)있습니다.

Home는 가정용 기기이며 Front-endWebsocket 또는 긴 설문 조사 를 통해 연결을 유지해야합니다 (이것은 우리가 REST를 위반하는 첫 번째 장소입니다. 나중에 더 악화됩니다) . Front-end대부분 연결 Client요청을 터널링 Home하고 일부 호출 자체를 처리합니다. 때때로에 Home알림을 보냅니다 Client.

Front-endHome기본적으로 동일한 API를 가지고; LAN을 통해 직접 Client연결되었을 수 있습니다 Home. 이 경우 자체 에 Home일부 Client작업 을 등록해야 Front-end합니다.

이 시스템에서 REST의 장점은 다음과 같습니다.

  • REST는 사람이 읽을 수 있습니다.
  • REST에는 CRUD와 같은 동사, 명사 및 응답 코드가 프로토콜 오브젝트에 올바르게 정의되어 있습니다.
  • HTTP를 통해 작동하며 가능한 모든 프록시를 전달합니다.

REST 대조는 다음과 같습니다.

  • 요청-응답 커뮤니케이션 스타일뿐만 아니라 발행-구독도 필요합니다.
  • 3 계층 통신 오류를 처리하기에는 HTTP 오류 코드가 충분하지 않을 수 있습니다. 필요한 연결이 끊어 졌어 야한다는 것을 알기 위해 비동기 호출로 Front-end돌아갈 수 있습니다 .202 AcceptedHome503
  • Home에 메시지를 보내야합니다 Client. Client폴링 Front-end하거나 연결을 유지해야합니다.

Websocket을 통한 WAMP / Autobahn 을 고려 하여 발행 / 구독 기능을 얻을 수 있습니다. 이미 메시지 대기열처럼 보입니다.

일종의 메시징 큐를 전송으로 평가할 가치가 있습니까?

메시지 대기열 대조는 다음과 같습니다.

  • 메시지 수준에서 CRUD 동사와 오류 코드를 직접 정의해야합니다.
  • "높은 유지 보수 비용"에 대한 내용을 읽었지만 그 의미는 무엇입니까?

이러한 고려 사항은 얼마나 심각합니까?


1
왜 클라우드 서버가 혼합되어 있습니까? 홈 서버와 같은 머신에서 그럴듯하게 살아야한다고 생각하게하는 방향 전환이라고 생각합니다.
Jimmy Hoffa

3
메시지 대기열을 분석 할 때는 대부분 대기 시간이 짧고 제어 된 클라이언트, 보호 된 네트워크 등 개인 LAN에 최적화되어 있으며 대기열을 인터넷에 노출시키는 것은 보안 문제 가 될 수 있습니다 .
Javier

@Jimmy Hoffa유효한 포인트, 감사합니다. 맞습니다 만 완전히는 아닙니다. 일반적인 데이터베이스, 스토리지 등입니다. @Javier감사합니다. 대답의 좋은 부분입니다.
Victor Sergienko

홈 서버는 일부 사용자의 집과 클라우드의 프런트 엔드에서 실행되어야합니까? 집은 프런트 엔드에 연결되고 클라이언트는 프런트 엔드를 통해 집으로 메시지를 보냅니다. 내가 당신의 디자인을 올바르게 이해한다면, 나는 신의 대답을 줄 수 있습니다.
Michael Brown

@Mike Brown바로 그거죠. 제발.
Victor Sergienko

답변:


5

연결 상태 인 경우 특정 구조와 형식의 메시지를 보내려면 자체 프로토콜 (어려운 작업이 아님)을 정의해야하지만 메시지 대기열을 사용하십시오.

유지 보수의 문제점은 일반적으로 클라이언트와 서버가 개별적으로 빌드되므로 동일한 메시지 정의를 사용하여 양쪽 끝을 유지하도록주의해야하지만 충분히 구성되지 않은 경우 REST에서 사용하는 것과 동일한 XML을 사용하는 것입니다. 서비스.

인터넷을 통해 포트 80 및 http 만 있고 '단방향'통신으로 연결 문제가있는 경우 REST 스타일 시스템이 가장 좋습니다. 콜백 데이터를 보내거나 폴링하거나 웹 소켓을 가져 오지만 일반적으로 시스템을 클라이언트 / 서버로 설계하십시오. 연결을 할 수 있다면 메시징 시스템이 좋습니다.

내가 함께 갈 것 ZeroMQ 메시징 시스템을 위해, 그 구성에 충분한 내결함성을 포함한 시나리오의 모든 방식으로 비틀 수 있습니다. 그래도 http를 통해 작동 하는지 확실하지 않습니다 .


감사. 내가 후 발견 @Javier: 코멘트하기 : ØMQ는 기압 암호화를 지원 자체에없는 것 같다 zeromq.org/area:faq#toc8 RabbitMQ는 않습니다 불구하고 : rabbitmq.com/ssl.html
빅터 Sergienko

연결이되어 있는지 모르겠습니다. Home사용자 홈 기기이며 ClientWi-Fi 또는 3G를 통한 스마트 폰입니다. 질문의 큰 부분은 NAT 통과 방법에 대한 저의 무지입니다.
Victor Sergienko

5

아우토반이 당신이하려는 일에 잘 맞는 것 같습니다. 사용 가능한 다른 도구도 있습니다. 아웃 확인 윈도우 Azure 서비스 버스 (자바, .NET, PHP, 파이썬, NodeJS, 루비에 대한 클라이언트 프레임 워크가 있습니다).

내장 된 휴식 메시지가 유용하지만. 응용 프로그램이 기본 CRUD 작업을 능가 할 것입니다. 예를 들어 응용 프로그램이 은행 시스템 인 경우를 예로들 수 있습니다. 대신에

계정 업데이트 54321 잔액 = 잔액-20.00 업데이트 계정 98765 잔액 = 잔액 + 20.00

아마도 하나의 메시지를 원할 것입니다.

계정 54321에서 계정 98765로 20.00 전송

나중에 지금이 아니라 REST로이 장애를 발견하는 것이 가장 좋습니다. 애플리케이션 내에서 메시징을위한 더 풍부한 모델을 작성하는 방법에 대해 설명하는 Greg Young의 이벤트 중심 을 확인하십시오 .


고마워 실제로 우리는 CRUD를 능가 할 수 있지만, 머지 않아 도메인은 매우 간단합니다. BTW 그 책은 아직 출판되지 않았지만 Greg의 블로그에서 일부 수학을 찾으려고 노력하고 있습니다. Microsoft 기술을 사용할 필요가 없다고 생각합니다.
Victor Sergienko

그의 책이 아직 나오지 않을 때까지 기다리십시오 ... 그는 너무 오랫동안 이야기하고 있습니다 ... 내가 아는 다른 기술 저자처럼 들립니다. : ">
Michael Brown

1
레코드의 경우 REST 접근법은 사용자가 작성하는 전송 자원을 갖는 것입니다. 또는 전달할 수있는 TransferRequest도 있습니다. 어떤 경우에는 REST가 까다로워 지지만 이는 그중 하나가 아닙니다.
Jacek Gorgoń
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.