모던 앱 개발 - 메시징
메시지 지향 응용 프로그램은 다양한 구조로 이루어집니다. 즉, 구성 요소 간 데이터 전송은 잘 정의된 분산 및 통합 처리 파이프라인의 일부일 수 있으며, 구성 요소는 독립적으로 진화하는 여러 독립적인 다운스트림 시스템에 메시지를 게시할 수 있습니다. 세 가지 공통의 최신 메시징 모델이 있습니다. 각 모델에는 공유 및 고유의 애플리케이션 요구사항이 있습니다.
이벤트 스트리밍
이벤트 스트리밍 애플리케이션은 실시간으로 처리되어야 하는 대량의 고속 데이터 스트림을 수집합니다. 원시 데이터를 처리하여 모니터링을 위해 다른 애플리케이션 구성요소에서 사용하거나 이후 분석을 위해 저장할 수 있는 인사이트를 추출해야 합니다.

maf-messaging-streaming.png 그림에 대한 설명
maf-messaging-streaming-oracle.zip
이 이벤트 스트리밍 애플리케이션 예에서는 Oracle Cloud Infrastructure Streaming 또는 Oracle Transactional Event Queues(TEQ)를 기본 메시징 솔루션으로, Oracle Cloud Infrastructure Functions를 실시간 처리로, Oracle Autonomous Database를 보조 저장소로 사용합니다.
등록-가입
게시-구독 또는 게시/제출은 데이터 생산자가 특정 토픽에 데이터를 게시하는 통신 패턴으로, 해당 토픽에 구독하여 원하는 수의 다운스트림 소비자가 사용할 수 있습니다. 생산자와 소비자 간의 결합은 매우 느슨하므로 소비자는 업스트림 생산자에게 영향을 주지 않고 독립적으로 발전할 수 있습니다.

그림 maf-messaging-publishers-subscribers.png에 대한 설명
maf-messaging-publishers-subscribers-oracle.zip
이 예에서는 Oracle Cloud Infrastructure Streaming 또는 Oracle TEQ를 사용하여 Pub/Sub 메시징 패턴을 구현하는 방법을 보여줍니다.
메시지 대기열
메시지 큐 처리는 업스트림 및 다운스트림 구성 요소가 긴밀하게 바인드되고 함께 응용 프로그램 워크플로우를 구현하는 분산된 Stateful 처리를 가능하게 합니다. 메시징 솔루션은 메시지가 소비되기 전에 손실되지 않도록 하기 위해 1회 이상의 전달과 같은 의미를 지원해야 합니다.

maf-messaging-queuing.png 그림에 대한 설명
maf-messaging-queuing-oracle.zip
이 예에서는 Oracle Cloud Infrastructure Queue 또는 Oracle TEQ를 사용하여 메시지 대기열 처리를 구현하는 방법을 보여줍니다.
설계 원칙
- REST API를 사용하여 통신하는 서비스 제품군으로 앱 구축
Kafka 및 JMS와 같은 산업 표준 API를 사용하여 애플리케이션 상호 운용성을 제공하고 하이브리드 및 멀티 클라우드 메시징 애플리케이션을 원활하게 구축합니다. Oracle Cloud Infrastructure(OCI) Streaming은 Kafka 호환성 API를 제공하며 Oracle Transaction Event Queues(TEQ)는 Kafka 및 JMS API를 모두 지원합니다. Kafka와 JMS 모두 타사 제품에서 널리 지원됩니다. 예를 들어, Confluent Kafka JMS Connector를 사용하여 Oracle TEQ와 Kafka 간에 메시지를 전송할 수 있습니다. Oracle Container Engine for Kubernetes 클러스터에 배포된 Kafka Connect를 사용하여 타사 제품과 연결할 수도 있습니다. Oracle Cloud Infrastructure Queue는 OpenAPI 사양과 함께 RESTful API 정의를 사용하거나 업계 표준 STOMP 프로토콜을 사용하여 호출할 수 있습니다.
- 관리형 서비스를 사용하여 앱 개발 및 운영의 복잡성 해소
OCI Streaming, OCI Queue, Oracle Autonomous Database(ADB)의 Oracle TEQ 및 AQ(Advanced Queuing) 기능과 같은 내장 인프라 유지보수 및 보안 패치와 함께 완전 관리형 서비스를 사용합니다. 이러한 서비스는 가용성 도메인 전체에서 자동 복제를 통해 고가용성을 제공하며 로드 변경에 대한 응답으로 크기 조정 자동화를 지원합니다.
- 앱 계층을 Stateless로 유지
메시지 대기열 위치와 같은 메시징 관련 상태는 앱이나 로컬 파일 시스템에 저장되지 않아야 합니다. 이렇게 하면 앱 인스턴스가 실패할 경우 데이터가 손실될 수 있기 때문입니다. 앱은 처리를 위해 메시지 콘텐츠를 캐시할 수 있지만 메시징 솔루션은 모든 메시징 데이터에 대한 단일 정보 소스로 유지되어야 합니다. 메시지 손실을 방지하고 idempotent 작업을 보장하기 위해 메시지 대기열 위치와 같은 관련 메타데이터는 데이터베이스 또는 오브젝트 스토리지에 저장해야 합니다. 이는 Failure Recovery를 통해 교정 손실 없이 쉽게 서비스를 확장하거나 축소할 수 있도록 해줍니다.
- 계기 포괄적인 모니터링 및 추적
애플리케이션의 상태, 성능 및 운영 상태에 대한 믿을 만한 이해를 유지합니다. Oracle Cloud Observability and Management Platform 서비스 포트폴리오를 사용하면 데이터 생산자와 소비자, 메시징 파이프라인에 이르기까지 애플리케이션 스택의 모든 계층에서 가시성과 실행 가능한 통찰력을 얻을 수 있습니다. 대기열 길이 및 처리 기간을 모니터링하여 오류 및 병목 현상을 파악하고 항목에 가입하는 서비스의 문제를 감지합니다.
- 자동화된 데이터 복제 및 장애 복구를 통해 단일 장애 지점 제거
메시징 데이터를 영구 스토리지에 백업하여 규정 및 규정 준수 요구 사항을 충족합니다. 재해 복구를 위해 영역 간 백업을 사용합니다. OCI 대기열에서 메시지 가시성 시간 초과를 사용하는 등 메시징 애플리케이션에 idempotency를 통합합니다. 기본 실행 파이프라인을 차단하지 않고 별도의 스트림, 전달되지 않은 메시지 대기열 또는 영구 스토리지에 복구할 수 없는 오류를 기록합니다.
- 자동화된 심층 방어 접근 방식을 구현하여 앱과 데이터 보호
권한이 부여된 사용자만 OCI 스트림 및 대기열에서 데이터를 생성, 전송 또는 수신할 수 있도록 Oracle Cloud Infrastructure Identity and Access Management(IAM) 정책을 구현합니다. 인터넷에서의 액세스를 제한하는 전용 끝점 및 서비스 게이트웨이를 사용하여 메시징 끝점에 대한 액세스를 보호함으로써 최소 접근성 원칙을 적용합니다. OCI 스트리밍, OCI 대기열 및 TEQ의 즉시 사용 가능한 기능을 사용하여 전송 중이거나 보관 중인 데이터를 암호화하여 데이터 기밀성을 달성합니다. 그러나 키 순환의 소유권을 늘려야 하는 경우 Oracle Cloud Infrastructure Vault 서비스를 사용하여 마스터 키를 안전하게 관리하십시오.
구조

그림 maf-messaging.png에 대한 설명
OCI Streaming을 사용하여 이벤트 스트리밍 및 Pub/Sub 메시징 패턴을 구현하고 Oracle Cloud Infrastructure Queue를 사용하여 메시지 대기열을 구현합니다. Oracle Autonomous Database를 사용하여 처리된 이벤트 데이터를 유지합니다. OCI 함수는 다운스트림 애플리케이션 구성요소에 의해 소비되거나 데이터베이스에 지속되기 전에 이벤트 데이터를 처리하는 데 사용할 수 있습니다.
애플리케이션 및 데이터베이스용 전용 서브넷과 메시징 서비스를 사용하여 네트워크 격리를 구현합니다. 전용 끝점을 사용하여 스트림에 대한 액세스를 보호합니다. Oracle Cloud Infrastructure Identity and Access Management(IAM) 정책을 사용하여 대기열에 대한 액세스 제한
장기 메시지 보존을 위해 Oracle Cloud Infrastructure Object Storage를 사용합니다. 서비스 커넥터와 같은 서버를 사용하지 않는 서비스를 사용하여 OCI 스트리밍에서 오브젝트 스토리지로 데이터를 원활하게 이동하고 오브젝트 스토리지의 영역 간 백업을 사용하여 다중 영역 백업을 수행할 수 있습니다. 내결함성 Oracle Container Engine for Kubernetes(OKE) 환경에 배포된 Kafka MirrorMaker 2.0을 사용하여 여러 지역 간 재해 복구 전략을 구현하여 스트림 간 데이터를 비동기적으로 복제합니다. 이 설정을 통해 RTO(복구 시간 목표) 및 RPO(복구 지점 목표)를 분 단위로 사용할 수 있습니다. 원격 VCN 피어링을 사용하여 데이터 전송 중 대기시간을 최소화합니다.
전달되지 않은 메시지 대기열을 사용하여 문제가 있는 메시지를 격리합니다. 전달되지 않은 메시지 대기열은 대기열을 만들 때 자동으로 생성됩니다. 전달되지 않은 메시지 대기열은 실패 메시지가 기본 실행 파이프라인을 차단하는 것을 방지하는 데 도움이 됩니다. 그런 다음 전달되지 않은 메시지 대기열의 메시지를 분석하여 실패한 이유를 확인할 수 있습니다.
처리된 메시지의 오프셋을 오브젝트 스토리지와 같은 외부 스토리지에 저장하여 애플리케이션으로 idempotency를 통합합니다. 외부 저장소를 질의하여 중복을 감지하고 폐기합니다. 쉽게 복구할 수 있는 오류를 분류하고 메시지 재생을 허용합니다.
이 구조는 다음 서비스와 기술을 사용합니다.
- 스트리밍
Oracle Cloud Infrastructure 스트리밍은 실시간으로 소비하고 처리할 수 있는 대용량의 연속 데이터 스트림을 입수하기 위한 확장 가능하며 내구성 있는 완전 관리형 스토리지 솔루션을 제공합니다. 스트리밍을 사용하여 애플리케이션 로그, 운영 원격 측정, 웹 클릭-스트림 데이터 같은 대용량 데이터를 입수하거나, 발행-구독 메시징 모델에서 데이터가 연속적으로 생성되고 처리되는 다른 사용 사례에 사용할 수 있습니다.
- 대기열
Oracle Cloud Infrastructure Queue는 일회성 보장 처리, 추적, 클라이언트 격리 등의 복잡한 관리 작업을 처리하면서 메시지를 처리할 수 있는 확장 가능한 시스템을 제공합니다. 이 중앙 집중식 서비스는 상태 비저장 클라이언트 프로세스가 커서 추적을 오프로드할 수 있도록 메시지 순서 지정 및 처리 상태도 관리합니다.
- 함수
Oracle Cloud Infrastructure Functions는 확장성이 뛰어난 완전 관리형 멀티테넌트 온디맨드 서비스형 Functions(FaaS) 플랫폼입니다. Fn Project 오픈 소스 엔진에 의해 구동됩니다. Functions를 사용하면 코드를 배치하고 직접 호출하거나 이벤트에 대한 응답으로 트리거할 수 있습니다. Oracle Functions는 Oracle Cloud Infrastructure Registry에서 호스팅되는 Docker 컨테이너를 사용합니다.
- 서비스 커넥터
Oracle Cloud Infrastructure Service Connector Hub는 OCI의 서비스 간 데이터 이동을 조정하는 클라우드 메시지 버스 플랫폼입니다. 서비스 커넥터를 사용하여 소스 서비스에서 대상 서비스로 데이터를 이동할 수 있습니다. 서비스 커넥터를 사용하여 선택적으로 대상 서비스로 전달되기 전에 데이터에 대해 수행할 작업(예: 함수)을 지정할 수도 있습니다.
Oracle Cloud Infrastructure Service Connector Hub를 사용하면 SIEM(보안 정보 및 이벤트 관리) 시스템에 대한 로깅 집계 프레임워크를 신속하게 구축할 수 있습니다.
데이터베이스 중심의 대체 구조
이 구조는 TQ(트랜잭션 이벤트 대기열)를 사용하여 최신 애플리케이션에서 메시징 패턴을 구현합니다. TEQ는 Oracle Autonomous Database의 내장 기능입니다.

maf-messaging-alternate.png 그림에 대한 설명
maf-messaging-alternate-oracle.zip
이 아키텍처는 외부 스트리밍 또는 대기열 서비스를 활용하지 않아도 되므로 단순성을 제공하고 공통 마이크로서비스 패턴을 단순화하는 트랜잭션 메시징 기능을 제공합니다.
TEQ는 확장 가능한 인프라에서 데이터 및 메시지 처리를 결합하여 수명 주기 관리, 보안 및 재해 복구를 단순화하는 동시에 고성능을 제공합니다. TEQ는 스트리밍, 대기 및 펍/서브를 포함한 일반적인 메시징 패턴을 지원합니다. TEQ를 사용하여 메시징 및 데이터베이스 운영 전반에 걸쳐 트랜잭션을 구현하고 추가 코드가 거의 또는 전혀 필요 없는 트랜잭션 아웃박스 및 정확히 한 번의 메시징과 같은 메시징 패턴을 쉽게 구현할 수 있습니다. Oracle TEQ는 데이터베이스에서 실행되는 애플리케이션에 대해 정확히 한 번의 메시징을 제공합니다. 즉, 중복 메시지를 확인하거나 응용 프로그램 레벨에서 멱등 소비자를 생성하기 위해 메시지 ID를 유지 관리할 필요가 없습니다. TEQ는 이벤트 처리에서 일반적으로 사용되는 작은 메시지와 비즈니스 워크플로와 관련된 더 큰 페이로드를 모두 지원하며, 보안 이벤트 메시 역할을 할 수도 있습니다.
외부 스트리밍 또는 대기열 관리 서비스를 제거하면 상태 관리가 간소화됩니다. 이벤트와 메시지는 응용 프로그램에서 사용하는 데이터베이스와 동일한 데이터베이스에 저장됩니다. 이를 통해 이벤트, 메시지 및 애플리케이션 변경 사항 간의 일관성을 쉽게 달성하고 유지할 수 있습니다. Point-in-time Recovery가 필요한 Failure가 있는 경우 모든 항목(이벤트, 메시지 및 응용 프로그램 데이터)이 자동으로 일관된 상태로 Recovery됩니다.
TEQ는 Autonomous Database의 고가용성을 통해 이점을 누릴 수 있습니다. TEQ의 메시징 데이터는 Autonomous Data Guard를 사용하여 ADB의 영역 간 복제로 자동 백업 및 보호됩니다. Oracle Real Application Clusters 및 Oracle Active Data Guard를 사용하여 고가용성 방식으로 Oracle TEQ를 배포할 수 있습니다. 두 기능 모두 Oracle Autonomous Database의 내장 기능입니다. Oracle Real Application Clusters는 지역 내에서 가용성을 제공하고 Oracle Active Data Guard는 지역 간 재해 복구 보호를 제공합니다.
응용 프로그램이 다음 중 하나를 수행하는 경우 이 구조를 사용합니다.
- 메시지 대기열을 구현해야 하며 트랜잭션 발신함 같은 의미 필요
- 데이터베이스 및 메시징 기질의 독립적인 확장이 필요하지 않음
이 구조는 다음과 같은 서비스와 기술을 사용합니다.
- 트랜잭션 이벤트 큐(TEQ) 및 고급 큐(AQ)
TQ(트랜잭션 이벤트 대기열) 및 AQ(고급 대기열 처리)는 Oracle Database와 통합된 강력하고 기능이 풍부한 메시지 대기열 시스템입니다. TQ(트랜잭션 이벤트 대기열)는 대기열당 여러 이벤트 스트림이 있는 고성능 분할 인메모리 구현입니다. AQ(Advanced Queuing)는 보다 간단한 워크플로우 사용 사례에 적합합니다. 이러한 기능은 Oracle Database를 활용하여 메시지를 지속하고 높은 처리량과 확장성을 제공합니다.
- 함수
Oracle Cloud Infrastructure Functions는 확장성이 뛰어난 완전 관리형 멀티테넌트 온디맨드 서비스형 Functions(FaaS) 플랫폼입니다. Fn Project 오픈 소스 엔진에 의해 구동됩니다. Functions를 사용하면 코드를 배치하고 직접 호출하거나 이벤트에 대한 응답으로 트리거할 수 있습니다. Oracle Functions는 Oracle Cloud Infrastructure Registry에서 호스팅되는 Docker 컨테이너를 사용합니다.
권장되지 않는 구조
-
모놀리식 메시지 및 Service Bus 애플리케이션
RabbitMQ와 같은 메시징 솔루션은 개방형 표준 및 API를 통해 다른 구성요소와의 통합을 지원할 수 있습니다. 그러나 이러한 솔루션에는 상당한 SME 관리 노력이 필요하며 자체 관리되는 복잡한 토폴로지 없이는 분산된 이중화 및 고가용성을 제공하지 않을 수 있습니다.
-
자가 관리 클라우드 또는 온프레미스 환경의 Kafka 클러스터
이 솔루션은 확장성 및 고가용성을 제공하지만 상당한 전문 개발자 지식과 광범위한 SME 운영 관리 부담이 필요합니다. 리드 타임과 총소유비용(TCO)의 위험으로 인해 이 옵션을 선택하기 전에 주의해야 합니다.
고려 사항
메시징 설계 패턴을 구현할 때는 다음 구현 옵션을 고려하십시오.
애플리케이션 요구사항에 따라 적절한 메시징 플랫폼 선택
기본 플랫폼과 서비스는 유사하게 나타나고 공통 기능을 공유할 수 있습니다. 그러나 각 플랫폼에는 애플리케이션 요구 사항에 더 잘 부합할 수 있는 고유한 기능과 강점이 있습니다. 예:
- 애플리케이션에 메시지 리플레이 및 게시 기능을 제공하는 실시간 고성능 메시징 플랫폼이 필요한 경우 OCI 스트리밍 또는 트랜잭션 이벤트 대기열을 사용합니다.
- 비동기적으로 데이터를 이동하기 위해 확장 가능하고 신뢰할 수 있는 지점 간 버퍼가 필요한 경우 트랜잭션 이벤트 대기열을 사용합니다.
- SCH(서비스 커넥터 허브)를 사용하여 인프라 리소스와의 통합을 사용으로 설정합니다.
- Oracle Autonomous Database와 통합된 메시징을 사용하여 새 마이크로서비스를 설계할 때 데이터베이스에서 TQ(트랜잭션 이벤트 대기열)를 사용합니다.
공공 사례 연구
Oracle Streaming 기반 구조
Tango Eye는 보안 비디오를 소매 산업에 대한 실행 가능한 통찰력으로 변환합니다.
- Oracle Cloud Infrastructure(OCI) 스트리밍&n 다양한 마이크로서비스에 대한 낮은 유지 관리 게시-구독 메시징 시스템으로 예약합니다.
- Oracle Cloud Infrastructure Functions는 엔지니어링 감독 없이 서버리스 작업을 실행합니다.
- Oracle Cloud Infrastructure Object Storage의 라이프사이클 정책을 사용하여 자동으로 데이터를 아카이브하고 비우므로 Tango Eye의 AI 기반 애널리틱스의 가치를 그대로 유지하면서 비용을 절감할 수 있습니다.
Oracle TEQ 기반 구조
FedEx는 Oracle E-Business Suite 및 Oracle TEQ로 구축된 비즈니스 이벤트 관리자를 사용하여 매일 제공되는 1,500만 개 패키지의 미수금에 대해 설명합니다.
- FedEx는 Exadata Cloud Service를 사용하여 E-Business Suite를 Oracle Cloud Infrastructure Object Storage로 이동했습니다. E-Business Suite 워크플로우 및 비즈니스 이벤트 시스템은 AQ(Oracle Advanced Queuing) 메시징을 기반으로 완전히 구축됩니다.
- Oracle AQ는 사용이 간편하고 워크플로우 통합관리에 적합합니다. 처리량이 많은 이벤트의 경우, Oracle TEQ는 apache Kafka와 상호 운용되는 대기열당 여러 이벤트 스트림으로 고성능 드롭인 대체 솔루션입니다.
배치
- GitHub으로 이동합니다.
- 저장소를 로컬 컴퓨터로 복제하거나 다운로드합니다.
README
문서의 지침을 따릅니다.
변경 로그
이 로그에는 중요한 변경 사항이 나열됩니다.
2023년 9월 21일 |
|
2023년 4월 27일 |
|
2022년 7월 12일 |
|