Defining APIs
(API 정의)

서비스의 API는 서비스와 Client 사이의 계약이다. 여러분이 어떤 IPC 메커니즘을 선택했느냐에 상관없이 서비스의 API가 어떤 종류의 IDL(Interface Definition Language)을 사용하도록 정확하게 정의되었느냐가 중요하다. 서비스를 정의하기 위해 API-first Approach를 사용하는데 대한 좋은 논쟁들이 있다.(https://www.programmableweb.com/news/how-to-design-great-apis-api-first-design-and-raml/how-to/2015/07/10)

여러분은 서비스의 인터페이스를 정의하고, Client 개발자들과 함께 그것을 리뷰하면서 서비스 개발을 시작한다. 그것은 여러분이 구현한 서비스의 API 정의를 반복하는 것이다. 먼저 이렇게 디자인함으로써, Client의 요구사항을 더 많이 만족시킬 수 있는 여러분의 서비스를 구현할 수 있다.

이번 article의 후반부에서 볼 수 있겠지만, API 정의의 본질적인 부분은 여러분이 사용한 IPC 메커니즘에 달려 있다. 여러분이 messaging을 사용했다면, API는 message channel과 message type으로 구성되어 있다. 만약 HTTP를 사용했다면, API는 URL과 request, response format으로 구성되어 있다. 나중에 IDL에 대해 더 자세히 정리할 것이다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/760

Interaction Styles
(상호작용 형태)

서비스에 대한 IPC 메커니즘을 고르느느 경우, 서비스가 어떻게 상호작용 하는지를 먼저 생각보면 유용하다. Client와 서비스간 상호 작용 형태는 다양하다. 2가지 관점에 따라 카테고리지어질 수 있다. 첫번째 관점은 상호작용이 one-to-one 인지, one-to-many 인지에 대한 것이다.
 
  - One-to-one : Client의 각 요청은 정확하게 하나의 서비스 인스턴스에 의해 처리된다.
  - One-to-many : 각 요청은 여러 서비스 인스턴스에 의해 처리된다.

두번째 관점은 상호작용이 Syncronous(동기)인지 Asynchronous(비동기)인지에 대한 것이다.

  - Synchronous : Client는 서비스로부터 시기적절한 응답을 기대하고, 기다리는 동안은 대기한다.
  - Asynchronous : Client는 응답을 기다리는 동안 대기하지 않는다. 그리고 만약에 있다면 즉시 응답을 보낼 필요가 없다.

다음 표는 다양한 상호작용 형태를 보여준다.

 One-to-OneOne-to-Many
SynchronousRequest/Response-
AsynchronousNotificationPublish/Subscribe
Request/Async ResponsePublish/Async Responses

One-to-One 상호작용에는 다음과 같은 종류가 있다.

  - Request/Response : Client는 서비스로 요청을 보내고, 응답을 기다린다. Client는 시기 적절하게 응답을 받을 수 있기를 기대한다. Thread기반 어플리케이션에서는 thread가 요청을 하고, 기다리는 동안 대기하고 있을 것이다.
  - Notification (단방향 요청으로도 알려짐): Client는 비동기적으로 응답하는 서비스로 요청을 보낸다. Client는 기다리는 동안 대기하지 않는다. 그리고 얼마 동안은 응답이 도착하지 않는다고 가정하고 설계된다.

One-to-Many 상호작용에는 다음과 같은 종류가 있다.

  - Publish/Subscribe : Client는 0개 이상의 관련된 서비스에서 소비되는 Notification message를 발행한다.
  - Publish/Async Responses : Client는 요청 메시지르르 발행하고, 관련된 서비스로부터의 응답을 정해진 시간 동안 기다린다.

각 서비스는 일반적으로 이러한 상호작용 형태를 조합하여 사용한다. 어떤 서비스들에 대해서는 하나의 IPC 메커니즘으로도 충분하다. 다른 서비스들은 IPC 메커니즘의 조합을 사용하는 것이 필요하다. 다음 다이어그램은 택시 호출 어플리케이션에서 사용자들이 이동을 요청했을 때, 어떻게 서비스들이 상호작용 하는지를 보여준다.

사용자 삽입 이미지


서비스들은 Notification, request/response, publish/subscribe를 조합하여 사용한다. 예를 들면, 승객의 스마트폰은 pickup을 요청하기 위해 Trip Management Service에 Notification을 보낸다. Trip Management Service는 Passenger Service를 호출하기 위해서 request/response를 사용하여 승객의 계정이 활성화되어 있는지 검증한다. 그리고 나서 Trip Management Service는 택시호출을 생성하고, Dispatcher(차량 배치 담당 서비스)를 포함하여 가용가능한 운전사 위치를 다른 서비스들에게 알리기 위해 publish/subscribe를 사용한다.

지금까지 우리는 상호작용 형태에 대해서 살펴보았는데, 이제 어떻게 API를 정의하는지에 대해서 알아보자.
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/759

Building Microservices: Inter-Process Communication in a Microservices Architecture

Introduction

Monolithic Application에서 컴포넌트들은 language-level method나 function call을 통해 서로를 호출한다. 반대로, microservice기반 application은 여러 대의 machine에서 동작하고 있는 분산 시스템이다. 각 서비스 인스턴스는 일반적으로 프로세스이다. 결과적으로 다음 다이어그램에서 보는 것처럼, 서비스들은 inter-process communication(IPC) 메커니즘을 사용하여 상호작용해야만 한다.

사용자 삽입 이미지




나중에 특정 IPC 기술들에 대해서 들여다보겠지만, 먼저 다양한 디자인 이슈에 대해서 먼저 분석해 보자.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/758