| Obsah | Dal¹à | Pøedchozà |
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).
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.
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.
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
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 |