Obsah Dal¹í Pøedchozí

4 Architektura systému Agent

Cílem projektu Agent bylo vytvoøit funkèní prototyp roz¹iøitelného systému pro vyhledávání v plných textech. Z dùvodù snadné roz¹iøitelnosti a mo¾né znovupou¾itelnosti jednotlivých èástí systému byl pøi implementaci kladen dùraz na maximální modularitu øe¹ení. Modularity bylo na logické úrovni (ve fázi návrhu systému) dosa¾eno dùsledným pou¾itím objektového modelu a definováním pøesných rozhraní mezi jednotlivými objekty. Pøi implementaci pak byl celý systém rozdìlen do nìkolika samostatných funkèních celkù, které jsou, pøi dodr¾ení specifikovaných rozhraní, zamìnitelné èi roz¹iøitelné bez ne¾ádoucího vlivu na ostatní èásti.

Tato kapitola popisuje zvolenou mno¾inu funkcí (4.1), architekturu systému (4.2), rozdìlení implementace na èásti a rámcovì funkènost jednotlivých èástí systému (4.3) a zhodnocení zvoleného øe¹ení (4.4).

4.1 Funkce systému Agent

Po¾adovanou funkcí systému Agent byla schopnost vytvoøit pro danou mno¾inu plnotextových dokumentù databázi metainformací (v tomto pøípadì vhodnì zvolených indexù) a dále umo¾nit v této databázi efektivní vyhledání dokumentù relevantních k polo¾enému dotazu.

Bylo zøejmé, ¾e systém musí implementovat urèitou mno¾inu slu¾eb, která umo¾ní realizovat kladené po¾adavky. V první øadì se samozøejmì jedná o plnotextový databázový stroj realizující vlastní indexaci a vyhledávání. Dále bylo nutné implementovat moduly, které získají po¾adovaný dokument z urèitého místa (souboru na disku, serveru v síti) a zajistí jeho pøedzpracování do podoby akceptovatelné databázovým strojem. A v neposlední øadì jsme také museli poskytnout u¾ivatelské prostøedí umo¾òující správu databáze metainformací a zároveò rutinní pou¾ívání této databáze, tedy vyhledávání dokumentù a reprezentaci výsledkù.

V rámci projektu Agent jsme se navíc rozhodli umo¾nit vzdálené pou¾ívaní a do urèité míry i správu systému. Pøièem¾ vzdáleným pøístupem se rozumí pou¾ívaní systému Agent z jiného uzlu poèítaèové sítì, ne¾ na kterém bì¾í vlastní databázový stroj. Dal¹ím na¹ím po¾adavkem bylo umo¾nit vyu¾ívání slu¾eb systému Agent i jiným aplikacím ne¾ je námi implementovaný klient.

4.2 Zvolená architektura systému Agent

Pro implementaci systému Agent byla zvolena osvìdèená architektura klient-server. Systém se skládá z nìkolika modulù s pøesnì definovaným rozhraním. Pøes tato rozhraní pak moduly poskytují slu¾by ostatním modulùm pøípadnì koncovým klientùm systému Agent. Klientem systému Agent se v tomto pøípadì rozumí aplikace, která zpøístupòuje slu¾by systému koncovému u¾ivateli nebo umo¾òuje vyu¾ít slu¾eb systému jiným aplikacím. Jeliko¾ z po¾adavkù na systém vyplynula nutnost poskytnout i u¾ivatelské rozhraní, je souèástí projektu i implementace klienta systému Agent.

Z implementaèních dùvodù bylo vhodné urèité moduly sdru¾it do komponent. Pøitom komponentou v systému Agent rozumíme jeden nebo více modulù zapouzdøených za pøesnì specifikovaný interface a schopných v tomto zapouzdøení samostatné existence. Komponentami jsou napøíklad DLL knihovny, nebo spustitelné soubory. Rozdíl mezi komponentami a moduly v systému Agent spoèívá v tom, ¾e komponenty lze zamìòovat bez rekompilace ostatních komponent, kde¾to moduly jsou v rámci komponent oddìleny pouze na úrovni zdrojového kódu.

Komponenty spolupracují rovnì¾ na principu vztahu klient-server. Mohou buï kooperovat v rámci jednoho procesu, nebo pou¾ít nìjakou formu komunikace mezi procesy (IPC). Je samozøejmé, ¾e jedna komponenta mù¾e vystupovat jak v roli klienta tak v roli serveru. Zároveò je v¹ak zøejmé, ¾e existuje urèité intuitivní rozdìlení na komponenty, které spí¹e poskytují nìjaké slu¾by, a komponenty, které spí¹e pou¾ívají slu¾by jiných komponent a sami poskytují pouze minimální èi prázdnou mno¾inu slu¾eb. Na základì tohoto kritéria dìlíme komponenty systému Agent na servery systému Agent a klienty systému Agent.

Pokud se podíváme na servery systému Agent jako celek a budeme se na nì dívat jako na jednu sadu slu¾eb, èi jeden virtuální server, zjistíme, ¾e je pøíkladem návrhového vzoru (design pattern) nazývaného vrstevnatý server (tiered server). Tedy ¾e se skládá z nìkolika vrstev, kdy ka¾dá vrstva (kromì nejni¾¹í) zaji¹»uje urèitou mno¾inu slu¾eb postavenou na základì pøedchozí vrstvy a pøidává dal¹í funkcionalitu, která roz¹iøuje a zároveò více specializuje slu¾by pøedchozí vrstvy.

Toto rozdìlení do vrstev mìlo pøinejmen¹ím dva dobré dùvody. Za prvé bylo mo¾né díky tomuto logickému (i fyzickému) rozèlenìní lépe zvládnout komplexnost úlohy. Za druhé to umo¾nilo vytvoøit více bodù pro pøipojení potenciálních klientù systému. Tyto body jsou tvoøeny rozhraními jednotlivých vrstev a umo¾òují vývojáøi pøípadného klienta zvolit úroveò na které chce se systémem Agent komunikovat. Je samozøejmé, ¾e rozhraní ni¾¹ích vrstev jsou obecnìj¹í a mohou tedy uspokojit potenciálnì ¹ir¹í spektrum klientù. Naopak vy¹¹í vrstvy se specializují na konkrétní pou¾ití systému pro urèitý druh slu¾eb, pro který poskytují dodateèné funkce.

4.3 Funkèní celky systému Agent

Systém Agent se tedy skládá z následujících komponent: vyhledávací server (search_svr), sí»ový server (net_svr), sada vstupních filtrù (v podobì DLL knihoven) a AdminAgent (administraèní a u¾ivatelský klient).

Vyhledávací server (search_svr)

Vyhledávací server (dále search_svr) obsahuje vlastní databázový stroj, jádro a podstatu systému Agent. Umo¾òuje získávat dokumenty z lokálního nebo sí»ového disku èi z Internetu/Intranetu s pou¾itím protokolu HTTP a tyto dokumenty s pomocí vstupních filtrù indexovat. Jedna instance search_svr mù¾e najednou pracovat s nìkolika oddìlenými databázemi indexù. Své slu¾by zpøístupòuje prostøednictvím sí»ového rozhraní na bázi TCP/IP. Pro komunikaci se search_svr je charakteristická asynchronnost a bezstavovost spojení. Tento komunikaèní model byl pou¾it za úèelem dosa¾ení co mo¾ná nejvy¹¹í jednoduchosti a robustnosti serveru. Daní za tyto vlastnosti je pak ponìkud vy¹¹í nároènost na ¹íøku pøenosového pásma. O severech systému Agent pojednává kapitola Servery systému Agent (5), o search_svr pak konkrétnì kapitola Vyhledávací server (search_svr) (5.2).

Sí»ový server (net_svr)

Sí»ový server (dále net_svr) tvoøí nadstavbu nad vlastním plnotextovým strojem. Mezi náplò práce net_svr patøí pøedev¹ím jednoduchá správa u¾ivatelských úètù, mo¾nost stavové komunikace se systémem Agent a v neposlední øadì také ke¹ování dat. Komunikace net_svr s klienty je podstatnì ménì nároèná na ¹íøku pøenosového pásma. Nezanedbatelné je i sní¾ení zátì¾e vyhledávacího serveru. Díky pou¾itému zpùsobu komunikace (TCP/IP) je mo¾né net_svr umístit na jiném uzlu poèítaèové sítì a distribuováním výpoètu tak zvý¹it celkový výkon systému. Je samozøejmé, ¾e k jednomu search_svr mù¾e být pøipojeno nìkolik net_svr (nebo jiných klientù) najednou co¾ je¹tì umocòuje ¹kálovatelnost systému. O severech systému Agent pojednává kapitola Servery systému Agent (5), o net_svr pak konkrétnì kapitola Sí»ový server (net_svr) (5.3).

Vstupní filtry

Vstupní filtry nejsou jedinou komponentou, ale snadno roz¹iøitelnou sadou komponent umo¾òujících systému Agent indexovat dokumenty rùzných formátù, v rùzných jazycích a kódových stránkách. Filtry je mo¾né libovolnì pøidávat, ubírat èi vymìòovat a zároveò urèovat pravidla jejich pou¾ití. Díky tomu je systém Agent snadno roz¹iøitelný o dal¹í formáty a druhy souborù.
Vstupní filtry jsou podrobnì rozebrány v kapitole Vstupní filtry (5.2.3).

AdminAgent

AdminAgent klient je standardní souèástí systému Agent. Umo¾òuje rutinní pou¾ívání a do jisté míry i administraci systému Agent. AdminAgent se pøipojuje k sí»ovému serveru rovnì¾ prostøednictvím protokolu TCP/IP. Narozdíl od serverových komponent systému Agent, které jsou implementovány v C++ na platformì Win32, AdminAgent byl implementován v prostøedí Java a je tedy dostupný pro ¹ir¹í ¹kálu platforem.
O komponentì AdminAgent pojednává kapitola Klient systému Agent (6).

Schematické znázornìní celkové architektury systému Agent je mo¾no vidìt na obrázku 4.3-1. V¹echny komponenty mohou samozøejmì bì¾et i na tém¾e poèítaèi, po provedení pøíslu¹ných nastavení i ve více instancích.

Obrázek 4.3-1 - architektura systému Agent
Obrázek 4.3-1 - architektura systému Agent

4.4 Zhodnocení zvoleného øe¹ení

Systém pro vyhledávání v plných textech (Agent) byl navr¾en jako distribuovaná aplikace na principu klient-server. Díky rozdìlení funkènosti do nìkolika samostatných vrstev bylo dosa¾eno skuteèné modularity a ¹kálovatelnosti celého systému.

Jedním z rozpoznaných nedostatkù návrhu na úrovni komponent je skuteènost, ¾e vyhledávací server odpovídá i za stahování a filtraci dokumentù. Filtrace je vyøe¹ena roz¹iøitelnì, u stahování dokumentù je roz¹iøitelnost opìt mo¾ná, ov¹em z èasových dùvodù byla implementována pouze na úrovni modulù a nikoliv komponent. Server je tedy v pøípadì pøidání nového protokolu (napøíklad pøístup do relaèní databáze) nutno znovu zkompilovat. Pru¾nìj¹í by bylo vstupní filtry i získávaní dokumentù zcela vyjmout mimo vyhledávací server a pøísun dat zajistit pøes novì definované rozhraní.

Dal¹í omezení plyne z toho, ¾e vyhledávací i sí»ový server jsou komponenty dostupné ve tvaru spustitelných souborù. V souèasné dobì tedy není mo¾né je ve formì dynamických knihoven linkovat k jiným aplikacím, které by tak mohly pou¾ívat vyhledávací stroj v rámci svého procesu a zcela transparentnì pro své u¾ivatele.


1999-02-28 Jaroslav Gergic