비동기 메시징(특히 게시/구독 스타일 메시징)이 도메인 서비스 아키텍처로 실행 가능합니까, 아니면 SOA 중심 환경에서만 실행 가능합니까?

StackOverflow https://stackoverflow.com/questions/72895

  •  09-06-2019
  •  | 
  •  

문제

저는 비동기 메시징을 연구해 왔으며 특정 도메인 내의 일부 문제를 우아하게 처리하는 방식과 도메인 개념을 보다 명확하게 만드는 방식을 좋아합니다.그러나 이것이 일반적인 도메인 중심 개발(적어도 서비스/애플리케이션/컨트롤러 계층에서)에 실행 가능한 패턴입니까, 아니면 원격 서비스 및 분산 처리와 같은 SOA 기반 시나리오로 제한되어야 하는 설계 오버헤드입니까?

도움이 되었습니까?

해결책

좋은 질문입니다 :).비동기 메시징의 주요 문제점은 사람들이 절차적 또는 객체 지향 언어를 사용할 때 비동기식 또는 이벤트 기반 방식으로 작업하는 것이 종종 매우 까다롭고 복잡하며 프로그래머가 읽고 이해하기 어렵다는 것입니다.비즈니스 로직은 메소드를 호출하고 즉시 결과를 얻는 등 동기식으로 구축되면 훨씬 더 간단해지는 경우가 많습니다. :)

내 경험 법칙은 일반적으로 비즈니스 로직을 위해 미시적 수준에서 더 간단한 동기 프로그래밍 모델을 사용해 보는 것입니다.그런 다음 매크로 수준에서 비동기 및 SEDA를 사용하십시오.

예를 들어 구매 주문을 제출하면 메시지 대기열에 메시지를 쓸 수도 있습니다.그러나 구매 주문을 처리하려면 개별 단계를 병렬로 처리하는 많은 동시 프로세스 및 스레드가 있는 고성능 분산 시스템에서 모두 비동기식 및 병렬인 10개의 서로 다른 단계가 필요할 수 있습니다.따라서 매크로 레벨 배선은 SEDA 종류의 접근 방식을 기반으로 하지만 마이크로 레벨에서는 개별 10단계에 대한 코드가 대부분 동기식 프로그래밍 스타일로 작성될 수 있습니다.

다른 팁

많은 아키텍처 및 디자인 질문과 마찬가지로 대답은 "상황에 따라 다릅니다"입니다.

내 경험에 따르면 비동기 메시징의 강점은 디자인에 느슨한 결합을 가져온다는 것입니다.커플 링은 다음과 같습니다.

  • 시간 - 요청을 비동기식으로 처리할 수 있어 전반적인 확장성에 도움이 됩니다.
  • 공간 - 지적했듯이 많은 동기식 설계보다 더 강력한 방식으로 분산 처리가 가능합니다.
  • 기술 - 메시지와 대기열은 기술 차이를 연결하는 한 가지 방법입니다.

메시지와 대기열은 다양한 구현이 가능한 추상화라는 점을 기억하세요.JMS 호환, 트랜잭션, 고성능 메시징 프레임워크를 반드시 사용할 필요는 없습니다.올바르게 구현되면 관계형 데이터베이스의 테이블은 행이 메시지인 대기열 역할을 할 수 있습니다.나는 두 가지 접근 방식이 모두 큰 효과를 거두는 것을 보았습니다.

나도 @BradS에 동의한다.

지금 비즈니스 로직에서 미들웨어를 숨기는 방법은 다음과 같습니다. 여전히 느슨한 결합 및 SEDA의 이점을 누리면서 - 메모리 SEDA에서 JMS, AMQP, JavaSpaces, 데이터베이스, 파일 또는 FTP 등 다양한 미들웨어 기술 사이를 쉽게 전환할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top