2009-05-29 17 views
5

W pracy mamy kilka aplikacji z bazami danych na scentralizowanym serwerze SQL. Ilekroć jedna aplikacja musi pracować z danymi z innej aplikacji, po prostu ją odpytuje lub aktualizuje za pośrednictwem bazy danych. Uważam, że jest to wzorzec "Wspólna baza danych" opisany w książce Enterprise Integration Patterns (Hohpe & Woolf).Refaktoryzacja z dala od modelu współdzielonej bazy danych

Te zależności między bazami danych powodują wiele, wiele bólów głowy. Największym z nich jest to, że mamy problemy z wydajnością na serwerze SQL i nie możemy skalować z powodu zależności między bazami danych. Myślę, że powinniśmy odejść od wzorca współdzielonej bazy danych w kierunku systemu komunikacyjnego, tak jak to opisano w książce EIP. Każda aplikacja byłaby odpowiedzialna za wszystkie jej własne dane, a inne aplikacje, które chcą uzyskać dostęp do tych danych, otrzymywałyby je za pośrednictwem usług (w magistrali przesyłania komunikatów?).

  • Gdzie rozpoczynamy refaktoryzację w kierunku wzorca wiadomości?
  • Czy rozpoczynamy od refaktoryzacji jednej z aplikacji do zarządzania własną bazą danych aplikacji?
  • Następnie, co z innymi aplikacjami jest obecnie zintegrowane z tym za pośrednictwem bazy danych?
  • Czy to najlepszy sposób na rozłączenie zależności w bazie danych lub czy powinniśmy zacząć od czegoś innego?

Odpowiedz

7

Proponuję przejście 3 fazowe.

  1. Dodaj warstwę wiadomości do każdej aplikacji.
  2. Zmień wszystkie uprawnienia dostępu między aplikacjami, aby użyć nowo utworzonej warstwy przesyłania komunikatów.
  3. Skaluj (teraz niezależne) bazy danych według potrzeb.

Załóżmy również, że masz 3 aplikacje; A, B i C.

Można również zobaczyć to jako 3 oddzielne przejścia:

  • aplikacyjne A

    • Dodaj Messaging do A
    • Zmień Połączenia A na B & C
  • Aplikacja B

    • Dodaj Messaging do B
    • Zmiana Połączenia B w & C
  • aplikacji C

    • Dodaj Messaging do C
    • Zmień Połączenia C w & B

W tym momencie procesu wyniki są takie same jak na końcu fazy 2, a faza 3 może być kontynuowana. Różnica polega po prostu na tym, czy bardziej produktywne jest skupienie się na rodzaju refaktoryzacji lub skupieniu się na aplikacji.

1

Przesyłanie wiadomości może z pewnością być jednym z bardziej eleganckich sposobów na przejście. Wymaga to jednak również trochę pracy i będzie musiała się zmieniać wraz z każdą zmianą bazy danych. Zastosowaliśmy "łatwiejsze" podejście, po prostu każąc każdej aplikacji wiedzieć, jak zalogować się do innej bazy danych, a następnie zapytać każdą bazę danych z tego miejsca. Zauważyliśmy, że większość zapytań opartych na krzyżowej bazie danych jest dość lekka i dlatego nie stanowią znaczącej podstawy kodu w drugiej aplikacji. Istnieje dublowanie wybranych zapytań, ale było to mniej pracy niż system przesyłania wiadomości.

Wszystko zależy od stopnia, w jakim będziesz naciskać i wyciągać dane. Jeśli jest to istotne, to najlepiej jest rozpocząć przesyłanie wiadomości. Jeśli jest on minimalny, to być może proste nowe połączenie z inną bazą danych jest drogą do zrobienia.

1

Zastanowiłabym się również, w jaki sposób aplikacje korzystają z bazy danych. Zazwyczaj baza danych (zarówno implementacja projektu &) powinna należeć do jednej z dwóch różnych kategorii: transakcyjnej (OLTP) lub raportowania (OLAP).

Dobrze zaprojektowana (i wdrożona) transakcyjna baza danych powinna zapewniać doskonałą wydajność w typowym scenariuszu aplikacji Line-of-Business; podobnie dobrze zaprojektowana (i zaimplementowana) baza danych raportowania powinna zapewniać doskonałą wydajność podczas wykonywania zapytań o duże ilości złożoności danych.

Innym ważnym rozróżnieniem jest różnica między czasem rzeczywistym a czasem bliskim w czasie rzeczywistym.

Pozwala założyć, że Twoja różnorodna aplikacja musi wykonywać zarówno operacje transakcyjne (w czasie rzeczywistym), jak i niektóre raporty dotyczące bieżących/starszych danych; potrzebujesz dwóch magazynów danych: transakcyjnego, który jest zbudowany wyłącznie z myślą o prędkości operacyjnej, aby obsługiwać "bieżące" operacje aplikacji, a drugi z "historycznymi" danymi, które będą budowane wyłącznie w celu raportowania.

Sztuką jest wtedy dowiedzieć się, ile danych należy przechowywać w magazynie danych transakcyjnych oraz kiedy/jak przenieść go do magazynu danych raportowania.

Powiązane problemy