Architektura agentów

Agent programowy ułatwi wyszukiwanie informacji i przeszukiwanie baz danych.

Agent programowy ułatwi wyszukiwanie informacji i przeszukiwanie baz danych.

Agent zwykle kojarzy nam się z filmowym specjalistą od śledzenia, pracownikiem służb specjalnych czy bezpieczeństwa. W informatyce także istnieją agenci o podobnych zadaniach i znacznie większych możliwościach (przynajmniej w niektórych dziedzinach) niż agenci z krwi i kości. Są to programy, które działając w tle, bez potrzeby interwencji ze strony użytkownika, mogą wykonywać "inteligentnie" czynności: wyszukiwanie i segregowanie informacji, podawanie danych o stanie urządzenia do innych programów, przeszukiwanie baz danych w celu znalezienia wzorców spełniających określone kryteria, zbieranie informacji z serwisów informacyjnych, zarządzaniu urządzeniami, określanie aktualnych parametrów urządzeń i ich dostępności (użytkownik w samochodzie nie będzie mógł obejrzeć przesłanej mu przez pocztę grafiki, jednak na pewno wysłucha odczytywaną mu pocztę) itp.

Definicja jest na tyle obszerna, że można w niej pomieścić wiele różnych typów programów. Technika agentów zdobywa coraz więcej zwolenników zarówno wśród producentów oprogramowania, jak i użytkowników.

Agenci i Java

Sukces, jakim cieszy się język Java i małe aplikacje (applets), spowodowały, że oprócz standardowych agentów programowych zaczynają pojawiać się agenci napisani w języku Java. Takie programy również mogą samodzielnie poruszać się w sieci, działać na dowolnym komputerze (pod warunkiem że komputer ma zainstalowaną wirtualną maszynę Java), startować na nowo lub czekać na podjęcie działań.

Agent jest obdarzony sporą autonomią: potrafi sam decydować, w jakim kierunku się poruszać, zapamiętuje swój stan przed przeniesieniem na nowy komputer, kontynuując na nim działanie, wie, kiedy je zakończyć, a kiedy zreplikować się, aby wykonywać pracę równolegle na wielu komputerach itp.

Agenci i IBM

Filozofia pracy we współczesnej Japonii nie pozwala już na bezmyślne kopiowanie wzorców ani produktów zachodnich; kraj ten i jego mieszkańcy mają ambicję stawać się wzorcem dla świata. Dlatego wcale nie dziwi, że japońska odmiana agentów, opracowana w filii firmy IBM nazywa się "aglet" (aglet to zakończenie sznurowadła, skuwka albo akselbant z ozdobnych zasłon czy zakończenia sznurów.)

Jaka jest różnica między appletem a agletem? Podobnie jak applet, aglet przenosi z sobą w sieci klasy obiektów, na których opiera się jego działanie; ponadto jednak przenosi z sobą informację o stanie, może przenosić się od jednego komputera typu host sieciowy na inny host sieciowy, może wędrować dowolnie długo w sieci, by powrócić do początkowej lokalizacji w sieci, przynosząc informacje zebrane po drodze.

Jak działa aglet?

Aby przedstawić działanie tego nowego typu aplikacji języka Java, trzeba najpierw opisać działanie standardowe appletu. Przeglądarka Web musi uruchomić najpierw maszynę wirtualną Java (JVM), działającą jako host wszystkich appletów, która wie, jak zażądać kodu apletów napotkanych na stronach HTML. Maszyna instaluje najpierw zarządcę bezpieczeństwa, którego zadaniem jest testowanie, czy ładowany applet nie zagrozi bezpieczeństwu lokalnej maszyny. Dopiero wtedy można uruchomić applet, działający jako jeden lub więcej wątków w maszynie wirtualnej.

Podobne wymagania ma aglet: na maszynie musi działać host agletów (rozszerzenie maszyny wirtualnej Java). Możliwość rozszerzania mają maszyny wirtualne Java, zrealizowane zgodnie ze specyfikacją Java Development Kit 1.1 (JDK 1.1). Odpowiednie rozszerzenia na razie opracował jedynie IBM. Podobnie jak poprzednio, także host agletów instaluje zarządcę bezpieczeństwa sprawdzającego czy wędrujący aglet nie naruszy bezpieczeństwa jego komputera macierzystego. Aglet może wędrować od jednego hosta agletów do następnego w całej sieci.

Stan agleta

Możliwość wędrowania agletów łącznie ze stanem stworzyło rozszerzenie JDK 1.1, pozwalające na przetworzenie do postaci ciągu bajtów stanu działania agletu (umieszczonego na jego stercie - heap), przesłanie go przez sieć i ponowne odtworzenie w miejscu przeznaczenia. Przesyłać można jedynie dane ze sterty, natomiast nie można przesyłać stanu maszyny wirtualnej ani hosta agleta w miejscu startu (tj. stanu liczników, rejestrów i innych parametrów) umieszczanych zwykle na stosie (stack). Wynika to z założonej filozofii maszyny wirtualnej Java, nie dopuszczającej do manipulowania obiektami na stosie przez wykonywany program.

Przed przesłaniem (samego siebie lub swej kopii) aglet przygotowuje odpowiednio dane na stercie, ale mając sporą autonomię może podejmować decyzje, czy może już być przesłany, czy musi wcześniej zakończyć działania i czy w ogóle chce być przesłany dalej.

Współpraca agletów

Aglet nie może bezpośrednio wywołać innego agleta, ale musi skorzystać z pośrednictwa obiektu prokurenta (proxy object), który potrafi wykonywać różne operacje na znanych mu agletach, w szczególności powołać je do życia, przesłać, uśpić itd. Prokurent pozwala także na przesyłanie komunikatów między agletami, co służy do kolektywnego zbierania informacji.

Bezpieczeństwo

Mobilni agenci, tacy jak omawiane wyżej ich wcielenie w postaci agletów, stanowią poważne ryzyko dla bezpieczeństwo dowolnego systemu komputerowego, gdyż stanowią potencjalny nośnik niebezpiecznych programów. Nim więc agenci zaczną działać w sieci, musi istnieć infrastruktura hostów mobilnych agentów, zapewniająca bezpieczeństwo sieci. JDK 1.1 zawiera wiele środków bezpieczeństwa, ale nadal programy w Javie, typu applet czy aglet, mogą np. przydzielać kolejno pamięć dla swych potrzeb aż do chwili jej wyczerpania i zatrzymania działania systemu. IBM opracował dwa hosty agletów: Fiji i Tahiti, nakładające ostre rygory na działania agletów w celu zapewnienia bezpieczeństwa.

Więcej informacji na temat agletów można znaleźć pod adresem http://www.trl.ibm.co.jp/aglets


TOP 200