Enterprise Integration Patterns
모든 통합 솔루션은 다음과 같은 몇 가지 근본적인 문제를 해결해야합니다.
네트워크는 신뢰할 수 없습니다. 통합 솔루션은 네트워크를 통해 한 컴퓨터에서 다른 컴퓨터로 데이터를 전송해야합니다.
단일 컴퓨터에서 실행되는 프로세스와 비교하여 분산 컴퓨팅은 훨씬 더 많은 가능한 문제를 처리 할 수 있도록 준비되어야합니다.
종종 통합 될 두 시스템은 대륙별로 분리되어 있으며 그 사이의 데이터는 전화선, LAN 세그먼트, 라우터, 스위치, 공용 네트워크 및 위성 링크를 통해 이동해야합니다.
이러한 각 단계는 지연 또는 중단을 일으킬 수 있습니다.
네트워크 속도가 느립니다.
네트워크를 통한 데이터 전송은 로컬 메소드 호출보다 몇 배나 느립니다.
단일 응용 프로그램에 접근하는 것과 같은 방식으로 광범위하게 분산 된 솔루션을 설계하면 성능이 크게 저하 될 수 있습니다.
두 응용 프로그램은 다릅니다.
통합 솔루션은 다른 프로그래밍 언어, 운영 플랫폼 및 데이터 형식을 사용하는 시스템간에 정보를 전송해야합니다.
통합 솔루션은 이러한 모든 다른 기술과 인터페이스 할 수 있어야합니다.
변화는 불가피하다.
시간이 지남에 따라 응용 프로그램이 변경됩니다.
통합 솔루션은 연결되는 애플리케이션의 변화에 발 맞춰야합니다.
통합 솔루션은 변경으로 인한 눈사태 효과에 쉽게 걸릴 수 있습니다.
한 시스템이 변경되면 다른 모든 시스템에 영향을 줄 수 있습니다.
통합 솔루션 은 애플리케이션 간 느슨한 결합 을 사용하여 한 시스템에서 다른 시스템으로의 종속성을 최소화해야 합니다.
시간이 지남에 따라 개발자는 다음과 같은 네 가지 주요 접근 방식으로 이러한 과제를 극복했습니다.
파일 전송 — 한 응용 프로그램은 다른 응용 프로그램이 나중에 읽는 파일을 씁니다.
응용 프로그램은 파일 이름과 위치, 파일 형식, 파일을 쓰고 읽을시기 및 파일을 삭제할 사람에 동의해야합니다.공유 데이터베이스 — 여러 응용 프로그램이 단일 실제 데이터베이스에있는 동일한 데이터베이스 스키마를 공유합니다.
중복 데이터 스토리지가 없으므로 한 애플리케이션에서 다른 애플리케이션으로 데이터를 전송할 필요가 없습니다.원격 프로 시저 호출 — 한 응용 프로그램은 일부 기능을 노출하여 다른 응용 프로그램이 원격 프로 시저로 원격으로 액세스 할 수 있도록합니다.
통신은 실시간으로 동기적으로 발생합니다.메시징 — 한 응용 프로그램이 공통 메시지 채널에 메시지를 게시합니다.
다른 응용 프로그램은 나중에 채널에서 메시지를 읽을 수 있습니다.
응용 프로그램은 메시지 형식뿐만 아니라 채널에서도 동의해야합니다.
통신이 비동기 적입니다.
네 가지 방법 모두 본질적으로 동일한 문제를 해결하지만 각 스타일에는 고유 한 장단점이 있습니다.
실제로, 각 통합 지점이 가장 적합한 스타일을 활용할 수 있도록 응용 프로그램이 여러 스타일을 사용하여 통합 될 수 있습니다.
메시징이란?
Enterprise Integration Patterns 에서는 메시징을 사용하여 응용 프로그램을 통합하는 방법에 대해 설명합니다.
메시징의 기능을 이해하는 간단한 방법은 전화 시스템을 고려하는 것입니다.
전화 통화는 동기식 통신 형식입니다.
전화를 걸 때 상대방이 사용 가능한 경우에만 상대방과 통신 할 수 있습니다.
반면 음성 메일은 비동기 통신을 허용합니다.
음성 메일을 사용하면 수신자가 응답하지 않으면 발신자가 메시지를 남길 수 있습니다.
나중에 수신자는 자신의 편의에 따라 사서함에 대기중인 메시지를들을 수 있습니다.
음성 메일을 사용하면 발신자가 메시지를 남길 수 있으므로 나중에 수신자가 메시지를들을 수 있으므로 발신자와 수신자를 동시에 전화로받는 것보다 훨씬 쉽습니다.
음성 메일은 (통화의 일부) 전화를 메시지에 묶고 나중에 사용할 수 있도록 대기시킵니다.
메시징 은 안정적인 비동기식으로 프로그램 간 고속 비동기 통신을 가능하게하는 기술입니다.
프로그램은 message 라는 데이터 패킷 을 서로에게 전송하여 통신합니다.
대기열이라고도하는 채널 은 프로그램을 연결하고 메시지를 전달하는 논리적 경로입니다.
채널은 메시지 모음 또는 메시지 배열처럼 작동하지만 여러 컴퓨터에서 마술처럼 공유되고 여러 응용 프로그램에서 동시에 사용할 수있는 채널입니다.
발신자 또는 제조자는 채널로 메시지를 작성하여 메시지를 전송하는 프로그램이다.
수신기 또는 소비자 채널에서이를 판독 (및 삭제)가 메시지를 수신하는 프로그램이다.
메시지 자체는 단순히 문자열, 바이트 배열, 레코드 또는 객체와 같은 일종의 데이터 구조입니다.
수신자에서 호출 할 명령에 대한 설명 또는 송신자에서 발생한 이벤트에 대한 설명으로 간단히 데이터로 해석 될 수 있습니다.
메시지에는 실제로 헤더와 본문의 두 부분이 있습니다.
헤더는 메시지-을 보내, 그것은 일어나고, 등에 대한 메타 정보를 포함하고; 이 정보는 메시징 시스템에서 사용되며 메시지를 사용하는 응용 프로그램에서는 항상 (항상 그런 것은 아님) 무시됩니다.
바디는 전송중인 데이터를 포함하며 메시징 시스템에서 무시합니다.
대화에서 메시징을 사용하는 응용 프로그램 개발자가 메시지에 대해 이야기 할 때 일반적으로 메시지 본문의 데이터를 참조합니다.
비동기 메시징 아키텍처는 강력하지만 개발 방식을 재고해야합니다.
다른 세 가지 통합 접근 방식과 비교할 때 메시징 및 메시지 시스템에 노출 된 개발자는 상대적으로 적습니다.
결과적으로 응용 프로그램 개발자는 일반적으로이 통신 플랫폼의 관용구와 특성에 익숙하지 않습니다.
메시징 시스템이란 무엇입니까?
메시징 기능은 일반적으로 메시징 시스템 또는 메시지 지향 미들웨어 (MOM) 라는 별도의 소프트웨어 시스템에 의해 제공됩니다.
메시징 시스템은 데이터베이스 시스템이 데이터 지속성을 관리하는 방식으로 메시징을 관리합니다.
관리자가 응용 프로그램 데이터의 스키마로 데이터베이스를 채워야하는 것처럼 관리자는 응용 프로그램 간의 통신 경로를 정의하는 채널로 메시징 시스템을 구성해야합니다.
그러면 메시징 시스템은 메시지 송수신을 조정하고 관리합니다.
데이터베이스의 기본 목적은 각 데이터 레코드가 안전하게 유지되도록하는 것입니다.
마찬가지로 메시징 시스템의 주요 작업은 신뢰할 수있는 방식으로 발신자의 컴퓨터에서 수신자의 컴퓨터로 메시지를 이동하는 것입니다.
한 컴퓨터에서 다른 컴퓨터로 메시지를 이동하기 위해 메시징 시스템이 필요한 이유는 컴퓨터와 메시지를 연결하는 네트워크가 본질적으로 신뢰할 수 없기 때문입니다.
한 응용 프로그램이 통신을 보낼 준비가되었다고해서 다른 응용 프로그램이 통신을받을 준비가 된 것은 아닙니다.
두 응용 프로그램이 모두 준비 되었더라도 네트워크가 작동하지 않거나 데이터를 제대로 전송하지 못할 수 있습니다.
메시징 시스템은 메시지가 성공할 때까지 메시지를 반복적으로 전송하여 이러한 제한을 극복합니다.
이상적인 상황에서 메시지는 첫 번째 시도에서 성공적으로 전송되지만 상황이 이상적인 것은 아닙니다.
본질적으로 메시지는 5 단계로 전송됩니다.
- 작성 — 발신자가 메시지를 작성하고 데이터로 채 웁니다.
- 보내기 — 발신자가 메시지를 채널에 추가합니다.
- 배달 — 메시징 시스템이 메시지를 발신자의 컴퓨터에서 수신자의 컴퓨터로 이동시켜 수신자가 사용할 수있게합니다.
- 수신 — 수신자는 채널에서 메시지를 읽습니다.
- 프로세스 — 수신자가 메시지에서 데이터를 추출합니다.
두 가지 중요한 메시징 개념을 보여줍니다.
보내기 및 잊어 버림 — 2 단계에서 보내는 응용 프로그램은 메시지를 메시지 채널로 보냅니다.
전송이 완료되면 발신자가 다른 작업을 계속할 수 있으며 메시징 시스템은 백그라운드에서 메시지를 전송합니다.
발신자는 수신자가 결국 메시지를 수신 할 것이라고 확신 할 수 있으며 그 때까지 기다릴 필요가 없습니다.저장 및 전달 — 2 단계에서 보내는 응용 프로그램이 메시지를 메시지 채널로 보낼 때 메시징 시스템은 메시지를 보낸 사람의 컴퓨터에 메모리 나 디스크에 저장합니다.
3 단계에서 메시징 시스템은 메시지를 발신자의 컴퓨터에서 수신자의 컴퓨터로 전달하여 메시지를 전달한 다음 메시지를 다시 수신자의 컴퓨터에 저장합니다.
이 저장 후 전달 프로세스는 메시지가 수신자의 컴퓨터에 도달 할 때까지 한 컴퓨터에서 다른 컴퓨터로 이동함에 따라 여러 번 반복 될 수 있습니다.
작성, 전송, 수신 및 프로세스 단계는 불필요한 오버 헤드처럼 보일 수 있습니다.
왜 단순히 데이터를 수신자에게 전달하지 않습니까?
애플리케이션은 데이터를 메시지로 랩핑하고 메시징 시스템에 저장함으로써 데이터를 전달할 책임을 메시징 시스템에 위임합니다.
데이터는 원 자성 메시지로 랩핑되므로 성공할 때까지 전달을 재 시도 할 수 있으며 수신자는 정확히 하나의 데이터 사본을 안정적으로 수신 할 수 있습니다.