경보 시스템 아키텍처


10

다양한 프로그램의 경고 메시지를 처리하고 전자 메일을 통해 소비자에게 바람을 불어 넣을 수있는 시스템을 만들고 싶습니다. 이것은 모두 하나의 내부 네트워크를 통해 포함됩니다.

기본 아키텍처가 다음과 같이 보이기를 원합니다.여기에 이미지 설명을 입력하십시오

내가 현재 가지고있는 주요 관심사는 "메시지 처리기"비트인데, 이는 "API 정렬"입니다. 이 시스템의 모든 구성 요소가 데이터베이스에 대한 모든 쓰기를 처리하는 API로 데이터를 보내길 원합니다. 이 접근 방식은 보안을 단순화하고 더 복잡한 DB 쿼리를 하나의 단일 프로그램에 포함시킬 수 있기 때문에 더 쉽다고 생각합니다.

문제는 이것이 언어에 무관심하기를 원한다는 것입니다. 즉, 모든 코드가 내 핸들러에 메시지를 보낼 수 있어야한다는 것을 의미합니다. JSON 플랫 파일 또는 프로그램에 대한 REST 호출 (다운 스트림 응용 프로그램에 유연성 제공)을 통해이 작업을 수행하려고합니다.

내 질문은

메시지 처리기를 귀찮게해야합니까, 아니면 다운 스트림 응용 프로그램과 다른 두 구성 요소 (Management Console 및 Alert Manager)에 직접 데이터베이스 액세스를 허용하는 단순성을 추가해야합니까?

이렇게하면 DB 테이블에 대한 INSERT가 유효한 한 원하는 경보를 삽입 할 수 있습니다.

나는 무역에 의해 소프트웨어 디자이너가 아니기 때문에 실례합니다 – 저는 단지 자유 시간에 프로젝트를하고 싶습니다.

답변:


4

AMQP (Advanced Message Queuing Protocol : https://www.rabbitmq.com/protocol.html ) 를 살펴 보셨습니까 ?

RabbitMQ는 이와 같은 멋진 도구입니다 .MSMQ, Azure / AWS 서비스 등도 있습니다. 하나의 언어에 구애받지 않는 메시지 처리기 (단순한 "json 데이터가있는 메시지 서버로 메시지 보내기")를 얻을뿐만 아니라 다운 스트림 메시지 처리를 분리하여 잘 격리시킵니다. 필요한 대기열에서 들어오는 메시지를 처리하는 메시지 서비스를 실행하고 알림을 내 보냅니다.

내가 AMQP를 사용하는 것을 정말로 좋아하는 이유 중 하나는 지금 집에서 구운 솔루션을 사용하는 것처럼 시작하지만 시간이 지나면 유형, 이동 해야하는 사람 등에 따라 메시지를 약간 다르게 처리해야한다는 것을 깨닫기 때문입니다. 따라서 결국 자체 AMQP 구현을 구축하게됩니다.

메시지를 5 명의 다른 수신자에게 보내야 할 경우 어떻게해야합니까? 여러 프로세서에 걸쳐 회전해야하는 메시지가있는 경우 (오래 실행되는 작업과 특정 유형의 메시지를 라운드 로빈 할 수있는 X 개의 동시 프로세서 수를 생각) 메시지를 한 사람에게 보내야하지만 온라인으로 사용할 수없는 경우 다른 사람에게 보내야합니까? AMQP는 매우 좋은 분류, 대기열, 채널, 내구성 지속성, 모든 종류의 기능으로 이미이 모든 것을 처리합니다.

여기가 처리 할 수있는 시나리오의 기본 개요입니다 (이 RabbitMQ 특정하지 않습니다 참고 : 그것은 AMQP 일이지만, RabbitMQ 잘 그것을 설명하는 일) - https://www.rabbitmq.com/getstarted.html


나는 전에 다른 소프트웨어에 대해 RabbitMQ를 구현 한 것을 보았습니다. 항상 흥미로워 보입니다 (조금 복잡하지는 않지만). 내가 살펴 볼게요! 데이터 발신자에게 제공 할 수있는 많은 유연성을 원했기 때문에 처음에는이 문제를 해결하지 못했다고 생각합니다. 따라서 기존 Powershell 또는 Javascript에 REST 호출을 구현하기 어렵거나 VB6 앱을 금지하는 경우 일반적으로 플랫 파일로 쉽게 출력 할 수 있습니다. 그러나 많은 메시지 처리를 대체 할 수 있으면 시간과 노력이 확실히 절약됩니다!
Christopher

2
나는 내가 처음 RabbitMQ에 갔을 때 조금 협박했지만, 연구의 주말 이후 같은했다 , 이것은 실제로 정말, 정말 좋은 와우, 그리고 지금 내가 찾고 있어요 무엇인지 이해하는 것이, 실제로 정말 간단합니다
jleach

AMQP의 아이디어가 마음에 들지만 RabbitMQ가 각 언어 종류에 대해 클라이언트 API를 처리하는 방식은 언어에 구애받지 않는 프로토콜을 사용한다는 전체 목적을 무효화합니다. 지원되는 API가없는 언어를 실행하는 클라이언트가있는 경우 어떻게합니까? 이러한 기능 중 일부는 정말 훌륭합니다 ...하지만 내가해야 할 모든 것은 A 사이에서 B 사이에 아무것도하지 않고 하나의 메시지를 얻는 것입니다.
Christopher

나는 그 위에 빠른 휴식 API를 두 드리려고 생각했는데, 이는 당신의 불가지론 적 관심사를 다룰 것입니다. 거위 추적 ...)
jleach

예-그것을 커버하는 빠른 REST API는 효과가있을 것입니다. 그러나 저는 제 자신 만의 REST API를 만들 수도 있습니다. 그리고 사과가 필요하지 않습니다. 훌륭한 기술이며 학습은 진보하는 데 필수적입니다. :) 지금이 아니라면-앞으로 유용 할 것입니다.
Christopher

3

잘 짜여진 질문!

따라서 모든 아키텍처 결정에는 장단점이 있습니다. 트레이드 오프에 대해 궁금한 점이 있으면 해당 방향으로 질문을 편집하십시오. 대신 질문은 입장을 요구하기 때문에 MessageHandler에 찬성하여 논쟁의 측면을 취할 것입니다. 최소한 SQL 데이터베이스가 아닌 데이터베이스를 포함하지 말고 시작하지 않도록 제안하는 단계를 더 진행하겠습니다. MessageHandler가 JSON을 파일 시스템에 저장하도록하고 (물론 볼륨에 따라) 시간당 디렉토리 경고 (예 : 볼륨에 따라 다름)하고 Alert Manager가 쿼리 할 때 API가 마지막 2 개의 디렉토리를 통과하도록합니다. 전달할 이메일을 결정하는 알림 (우선 순위에 따라)

이 문제에는 씹을만한 좋은 것들이 많이 있으며, 초기 단계에서 데이터베이스를 그림에서 벗어나면 많은 부수적 인 노이즈와 불필요한 문제 해결이 제거됩니다. 물론 관계형 데이터 모델을 작성하고 SQL 작성을 꿈꾸는 것을 좋아할 것입니다. 이 경우이 답변은 완전히 잘못되었습니다. 그러나 일반적으로 가장 민첩한 데이터베이스조차도 끔찍한 응용 프로그램 플랫폼이며 내구성과 인덱스 쿼리 전문가이기 때문에 시스템에만 포함됩니다.

행운을 빕니다!


1
관계형 데이터베이스 사용에 대한 전자 메일 그룹, 구성원 및 기타 여러 가지 유용한 기능을 제어 할 수있는 기능을 좋아합니다. 데이터베이스 디자인은 실제로 프로젝트에서 시작한 것이므로 제거 할 생각조차하지 않았습니다. 그 의견과 견해에 감사드립니다 !!
Christopher

알고 있었어! :) 당신이 정말로 무언가에서 벗어나고 자하는 것을 이해하는 것이 가장 중요합니다. 건배!
Jonah Benton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.