2011-08-02 17 views
5

Rozwijamy system śledzenia pojazdów. Tak jak w każdym VTS, mamy zainstalowane urządzenia GPS, które wysyłają informacje o lokalizacji na serwer. Na serwerze, nasz proces komunikacyjny TCP odczytuje te dane i zapisuje je w bazie danych. Teraz musimy sprawdzić, czy jakiś zestaw reguł uruchamia alarmy dla pojazdów, np. Musimy ostrzec, gdy pojazd dotrze do określonej lokalizacji, jeśli pojazd przekracza określony limit prędkości, itp. Czy możesz zaproponować najlepszy sposób wdrożenia? Pomyśleliśmy o kilku sposobach wdrożenia go, 1. Nasz komunikator TCP, po otrzymaniu lokalizacji, powinien sprawdzić alerty. 2. Nie będzie proces, który będzie działał co 15 minut i sprawdzić szczegóły lokalizacji w ciągu tych 15 minut dla alertów.Najlepszy sposób na sprawdzenie reguły podczas komunikacji z urządzeniem GPS

Poszukuję sugestii, aby go wdrożyć, zarówno pod względem logicznym, jak i pod względem technologicznym. na przykład Czy powinniśmy używać Drools, czy nie ?, itp.

+0

Czy nie ma nikogo? Potrzebuję sugestii, która nie jest idealna. – Saurabh

Odpowiedz

6

Ktoś z FedEx przedstawił coś takiego na konferencji JavaOne, w której uczestniczyłem kilka lat temu.

Zasadniczo pomysł polegał na użyciu Drools Expert + Fusion w celu wykonania CEP (złożone przetwarzanie zdarzeń) na danych dotyczących lokalizacji pojazdu.

O ile pamiętam, pojazd okresowo (co kilka sekund nawet) wysyła współrzędne GPS do silnika (zdarzenie), które następnie zostanie przetrawione przez silnik reguł iw zależności od reguł może spowodować pewne działania, takie jak podnoszenie ostrzeżeń ("pojazd został zatrzymany" lub "nieoczekiwanie") lub wysyłanie powiadomień ("pojazd dotrze na miejsce docelowe w ciągu ~ 15 minut").

(Google dla "drools fusion cep vehicle tracking" odkrywa this prezentacji, która powinna dać ci kilka szczegółów lub przynajmniej zapewnić pewien wgląd.)

+0

Dzięki AlistairIsrael. Wygląda na to, że informacje, które udostępniasz, z pewnością mi pomogą, ponieważ dotyczą tej samej domeny. – Saurabh

2

sposób, w jaki pracują Drools, polega na tym, że wiele przedmiotów umieszczasz w "Pamięć roboczą" Droolsa. Podczas wypełniania obiektów, Drools odkryją, które reguły "podpalają" obiekty i przechwytują obiekty w Rete-Tree. Kiedy skończysz wkładać obiekty do pamięci i będziesz strzelał do wszystkich reguł, Drools przetworzy kod, który wpisałeś, odpowiadający regule.

Proponuję, aby utworzyć obiekt zawierający wszystkie dane otrzymane z pojazdu, niezbędne dla reguł i umieścić go w pamięci roboczej.

W Drools powinieneś wprowadzić wiele małych reguł, z których każda po prostu sprawdza jedną rzecz i działa na wynik.

Nie jest dobrą praktyką, aby Drools uzyskiwał dane potrzebne do oceny, ale nie widzę problemów z zezwoleniem Drools na wywoływanie niektórych zdarzeń, które wysyłają wiadomości do pojazdu lub innego systemu. (Myślę, że to powinno się stać asynchroniczne, żeby nie spowalniać Droolsa) W rzeczywistości Drools proponuje podpięcie się do eventlistener.

0

Nie ma powodu, aby biegać co 15 minut. To spowoduje opóźnienie wyzwalaczy, a także spowoduje wybuchy obciążenia co 15 minut, a następnie okresy bez obciążenia.

Możesz mieć flagę w swojej bazie danych dla nowych reguł alertów i nowych danych o lokalizacji. Podczas skanowania w poszukiwaniu zdarzeń można zastosować podejście dwuprzebiegowe. Sprawdź wszystkie nowe reguły w odniesieniu do wszystkich danych o lokalizacji i oznacz je jako nowe. Następnie sprawdź wszystkie nowe dane dotyczące lokalizacji względem istniejących reguł i oznacz je jako nieaktualne.

Możesz uruchomić to tak często, jak chcesz. Najlepiej byłoby nie czekać tak długo, ponieważ im dłużej czekasz, tym więcej pracy gromadzisz.

Jeśli chodzi o to, że komunikator TCP sprawdza odpowiednie ostrzeżenia dotyczące skanowania, okresowo zbliża się baza danych, główną zaletą byłoby natychmiastowe powiadomienie. Wadą byłoby to, że przetwarzanie alertów spowolniłoby ścieżkę komunikatora TCP i zostałoby zablokowane w modelu "jedna aktualizacja oznacza jeden sprawdzian dla alertów".

W podejściu "przeszukuj bazę danych", jeśli obciążenie jest zbyt wysokie, można skończyć sprawdzanie alertów tylko w przypadku każdej tak wielu aktualizacji ze źródeł aktualizacji o wysokiej częstotliwości. W naturalny sposób radzi sobie z obciążeniem, zmniejszając ilość potrzebnej pracy, ale może to skutkować brakiem powiadomienia.

Myślę, że wszystkie podejścia, które rozważasz, będą działały poprawnie.

Powiązane problemy