KRÓTKO O COMPLEX EVENT PROCESSING (I CO MOŻE MIEĆ Z TEGO DEWELOPER JAVA)
Aplikacje zdarzeniowe to aplikacje, w których kod (logika biznesowa) wykonuje się w wyniku pojawienia się określonego zdarzenia. Mamy tutaj do czynienia z paradygmatem "nasłuchuj-i-odpowiedz" (ang. listen-and-respond), czyli aplikacja nasłuchuje pojawienia się określonego zdarzenia (lub komunikatu), a po pojawieniu się go, uruchamiany jest zdefiniowany kod, który przetwarza to zdarzenie (np. modyfikuje je, przekazuje do innych komponentów, wysyła na zewnątrz w postaci innego zdarzenia lub komunikatu, itp.). Na marginesie: zdarzenie jest zapisem (najczęściej w postaci cyfrowej) pewnej zmiany; komunikat jest nośnikiem, techniczną "kopertą" wewnątrz której znajduje się zdarzenie. Zdarzenie jest obiektem, może mieć atrybuty oraz metody. Przykładami zdarzenia są odczyty z sensora (np. temperatury), czy zapisy transakcji giełdowych (zdarzenie zawierałoby tutaj takie atrybuty jak symbol akcji, rodzaj wykonywanej transkacji - kupno/sprzedaż, cenę transakcji i wielkość (wolumen) operacji). Komunikaty mogą być np. w postaci komunikatów w systemie kolejkowym (JMS), rekordów zmian w bazie danych (ang. change data capture), czy mieć postać komunikatu w formacie XML lub JSON, dostarczanego do aplikacji zdarzeniowej poprzez HTTP, czy inny protokół komunikacyjny.
Aplikacje zdarzeniowe zatem: produkują (generują), nasłuchują, przetwarzają i konsumują zdarzenia.
Co jest zatem specyficznego w CEP, co zasługuje na oddzielną kategorię w przetwarzaniu zdarzeniowym ? Otóż, CEP skupia się nie tyle na przetwarzaniu pojedynczych zdarzeń, co raczej na przetwarzaniu grup zdarzeń, poszukiwaniu korelacji pomiędzy zdarzeniami w grupie, szczególnie korelacji mających charakter czasowy (strumieni zdarzeń), przyczynowo-skutkowy (czy w innym wymiarze, np. geograficznym). Zwykle, przetwarzanie tych grup zdarzeń w CEP odbywa się w czasie rzeczywistym, tzn. czas reakcji na pojawienie się określonej korelacji jest skończony (tzn. jeśli nie zareagujemy w przewidzianym czasie, to w zasadzie już nie musimy reagować wcale). Ten czas jest także często bardzo krótki (poziom mikro-, mili-sekund). Aplikacja CEP jest zatem aplikacją zdarzeniową, ale określona w niej logika wykonuje się raczej w wyniku pojawienia się pewnego zestawu zdarzeń, co więcej pomiędzy zdarzeniami w takim zestawie zachodzi zdefiniowana wcześniej korelacja.
Korelacja jest zdaniem logicznym typu "kiedy ...., to ...". Przykłady korelacji:
Korelacje mogą także obejmować wiele źródeł zdarzeń (np. wiele strumieni transakcji giełdowych).
No właśnie - typowe zastosowanie CEP, to wszelkiego rodzaju aplikacje monitorujące ("nasłuchujące") lub wyliczające w sposób dynamiczny określone wskaźniki. Przykłady aplikacji CEP w różnych branżach:
Literatura (a także dostawcy technologii CEP ;-)) mogą wskazać znacznie więcej przykładów zastosowań. Ważne jest jednak to, że w gruncie rzeczy chodzi o to samo - możliwość przetwarzania jednego lub więcej strumieni danych, poszukiwania w nich określonych sytuacji, a gdy one zajdą - wykonywanie określonej logiki biznesowej.
Dosyć często zadawane jest pytanie, dlaczego nie użyć innych technologii do rozwiązania powyższego problemu ? Na przykład bazy danych. Takie próby były prowadzone, ale mimo pewnych sukcesów (np. wymyślenia trigger'ów), okazało się, iż SQL i technologie bazodanowe niezbyt nadają się tutaj do szerszego zastosowania. Analiza zdarzeń musi odbywać się w sposób ciągły (ang. continous queries). Analiza musi obejmować zależności czasowe i przyczynowo-skutkowe. Także wydajność i opóźnienia (ang. latency) w przetwarzaniu zdarzeń w bazach danych - "nastawionych" na transakcyjność - okazały się w praktyce nieakceptowalne. Nierzadko bowiem trzeba analizować strumień milionów zdarzeń na sekundę i w sposób ciągły wykonywać dziesiątki tysięcy korelacji, zachowując jednocześnie opóźnienia (czas przetwarzania pojedynczego komunikatu) na poziomie mikrosekund.
Nota bene: CEP nazywa się czasem "odwróconą" bazą danych. Otóż w typowych systemach DBMS, mamy do czynienia z relatywnie statycznym zbiornikiem danych na którym wykonywanych jest wiele, zmiennych zapytań ("relatywnie statycznym", gdyż rzadko mamy do czynienia z bazami danych, których np. 99% zawartości ulega zmianie w każdej sekundzie). W CEP jest odwrotnie, tzn. mamy do czynienia z relatywnie stałymi zapytaniami do których "wpychane" są zmienne strumienie danych (zdarzeń).
OK, ale cóż z tego CEPa ma deweloper Java ? Otóż, deweloperzy Java mogą budować tego rodzaju aplikacje używając technologii, które znają (i które są powszechne !):
Co więcej, dostępne są technologie middleware'owe, np. zdarzeniowych serwerów aplikacyjnych Java, które pomagają:
Dla przykładu - zdarzeniowy serwer aplikacyjny powinien zawierać procesor CEP, czyli silnik efektywnie wykonujący zdefiniowane zapytania (korelacje). Wykorzystanie do opisu korelacji języka deklaratywnego - takiego jak SQL (lub jego pochodne) - sprawia, że w bardzo dużym stopniu "zdejmuje się" z programisty pracę związaną z określeniem w jaki sposób mają być przetwarzane zdarzenia. Programista jedynie deklaruje efekt końcowy - "chcę dostać takie dane, gdy zajdzie taka sytuacja". Problem efektywnego wykonania tego zadania - czyli w jaki sposób ma być wykonane "nasłuchiwanie" pojawienia się zadeklarowanej korelacji - spada na silnik (procesor CEP). Tutaj także widać analogię do DBMS i np. SQL - w bardzo dużym stopniu programista piszący aplikację przetwarzającą dane w bazie danych nie musi interesować się tym, w jaki sposób silnik bazodanowy (i inne elementy) wykona zapytanie i dostarczy danych. Tym samym aplikacja powstaje szybciej i może zawierać bardziej złożoną logikę manipulacji danymi. Oczywiście, czasem wiedza o tym jak działa dany silnik bazodanowy jest programiście przydatna - np. aby zapewnić odpowiednio wydajne wykonywanie zapytań. Zauważmy jednak, iż optymalizacje zapytań wykonuje się (a przynajmniej powinno się wykonywać) dosyć późno w procesie budowy aplikacji (a czasem nawet całkiem późno, bo na etapie produkcyjnego jej działania) i tylko wtedy, gdy rzeczywiście wydajność jest niezadowalająca.
Warto poznać CEP i technologie wspierające tego rodzaju przetwarzanie oraz stosowane w nich języki opisu zdarzeń. Warto próbować wyobrazić sobie, na ile łatwo dałoby się zrealizować złożone przetwarzanie zdarzeń nie mając do dyspozycji tego rodzaju technologii.
Więcej o CEP przy użyciu Java: http://jdn.pl/node/1582
Najnowsze komentarze
1 tydzień 3 days ago
4 weeks 6 days ago
7 weeks 5 days ago
8 weeks 3 days ago
9 weeks 20 hours ago
10 weeks 1 dzień ago
10 weeks 2 days ago
10 weeks 2 days ago
10 weeks 2 days ago
10 weeks 3 days ago