Chciałbym stworzyć system, który obsługuje wiadomości alarmowe z różnych programów i może przetwarzać te alarmy do mniej wymagających klientów za pośrednictwem poczty elektronicznej. Wszystko to byłoby zawarte w jednej sieci wewnętrznej.
Myślę, że chcę, aby podstawowa architektura wyglądała mniej więcej tak:
Główny problem, który mam obecnie, to bit „modułu obsługi komunikatów”, który będzie moim „rodzajem API”. Chcę, aby wszystkie komponenty tego systemu wysyłały dane do interfejsu API, który obsługuje wszystkie zapisy do bazy danych. Myślę, że takie podejście jest łatwiejsze, ponieważ upraszcza bezpieczeństwo i pozwala mi zawrzeć wiele bardziej skomplikowanych zapytań DB w jednym programie.
Chodzi o to, że chcę, aby była to niezależna od języka - co oznacza, że każdy kod powinien móc wysyłać wiadomości do mojego modułu obsługi - który je interpretuje. Mam nadzieję, że zrobię to za pomocą plików płaskich JSON - lub poprzez wywołania REST do programu (zapewniając elastyczność aplikacjom pobierającym strumień).
Moje pytanie brzmi-
Czy powinienem zawracać sobie głowę procedurą obsługi wiadomości - czy też uprościłbym to, aby umożliwić bezpośredni dostęp do bazy danych aplikacjom pobierającym strumień, a także dwóm innym komponentom (Management Console i Alert Manager)?
W ten sposób mogą wstawić dowolny alert, o ile chcą - o ile INSERT w tabeli / tabelach DB jest prawidłowy.
Z zawodu nie jestem projektantem oprogramowania, więc przepraszam - po prostu chcę projekt w wolnym czasie.
źródło
Bardzo dobrze sformułowane pytanie!
Wszystkie decyzje architektoniczne wiążą się z kompromisami. Jeśli jesteś zainteresowany dyskusją na temat kompromisów, może edytuj swoje pytanie w tym kierunku. Zamiast tego, ponieważ pytanie dotyczy tylko stanowiska, zajmę się argumentowaniem na korzyść MessageHandler. Pójdę o krok dalej, aby zasugerować NIE uwzględnianie bazy danych - przynajmniej nie bazy danych SQL, przynajmniej nie uruchamiać. Po prostu poproś, aby MessageHandler zapisał JSON w systemie plików, powiedz katalog na godzinę otrzymanych alertów (oczywiście w zależności od wolumenu) i posiadaj interfejs API, gdy zapyta go Menedżer alertów, po prostu przejrzyj ostatnie 2 katalogi alerty, aby zdecydować, które e-maile mają zostać dostarczone (oczywiście w zależności od priorytetu).
W tym problemie jest mnóstwo dobrych rzeczy do przeżuwania, a utrzymywanie bazy danych poza obrazem na wczesnych etapach usunie wiele przypadkowych szumów i niepotrzebnego rozwiązywania problemów. Oczywiście być może masz ukrytą miłość do tworzenia relacyjnych modeli danych i marzysz o pisaniu SQL. W takim przypadku odpowiedź jest całkowicie błędna. Ale ogólnie rzecz biorąc, nawet najbardziej zwinne bazy danych są okropnymi platformami aplikacji i są włączane tylko do systemów, ponieważ są specjalistami w zakresie trwałości i indeksowanych zapytań.
Powodzenia!
źródło