neděle 25. března 2007

Co je to ta SOA

SOA je zkratka pro Service Oriented Architecture, ale to je tak vše na čem se všichni zainteresování shodnou. Bez zaváhání mohu zodpovědně říci, že SOA je jedním z největších buzzwordů posledních let, který silně polarizuje IT svět na dvě skupiny: uctívači a zatracovači. Já osobně se pokusím v tomto článku oprostit se náklonnosti k jedné či druhé skupině a zkusím Vám říci, co je SOA z mého pohledu.

Úplně jednoduše řečeno, SOA určuje mantinely pro architekturu aplikace a nebo její části. V podstatě jde o to, že aplikace nabízí navenek určité služby. Minimální jemnost toho co aplikace vystaví okolnímu světu je právě služba. Správná otázka je, co je to služba? Služba může být cokoliv například RSS kanál tohoto weblogu, vyhledávácí služby Google a nebo přehled zásob skladovacího programu.

SOA nedefinuje žádné standardy ohledně toho, jakým způsobem musí být služba vystavená, například na úrovni komunikačního protokolu a už vůbec nic neříká o implementaci vlastní služby. Existuje v podstatě pouze sada určitých kriterií, které by měla služba dosáhnout. Jediným opravdu důležitým je definice kontraktu služby. Definice kontraktu je důležitá pro službu samotnou i pro jejího klienta, protože určuje rozhraní, kterým spolu poskytovatel a konzument komunikují.

Poskytovatel a konzument služby další dva termíny, které SOA zavádí. Rozhraní služby by mělo splňovat několik kritérií.

  • Platformově nezávislé, služba neklade na klienta nároky co do implementace, tím je dosaženo interoperability služby. Služba může být využita v různých heterogenních prostředích.
  • Skrývat implementaci, služba přísně dodržuje zapouzdření. To umožňuje měnit implementaci a nebo provádět změny bez dopadu na klienta.
  • Zdokumentované, dokumentace je jediným popisem, který konzument má, a podle kterého se musí řídit. Nemůže se podívat jak je služba udělaná a i kdyby mohl, tak se od toho musí oprostit.

Pokud vezmeme jako příklad RSS tohoto blogu jako službu.

  • Platformově nezávislé je, protože se jedná o XML.
  • Skrývá implementaci také, klient neví kdo nebo co či jak ho produkuje.
  • Zdokumentované je také díky W3C RSS specifikaci.

Klient RSS služby tohoto blogu nepotřebuje nic více proto, aby mohl tuto službu používat. Informaci o endpointu této služby, tedy na jaké adrese běží poskytují metadata blogu.

Mnoho mýtů a polopravd koluje okolo SOA. Jedním z nich je například, že SOA rovná se webové služby (Web Services). To je samozřejmě nesmysl, web services jsou jedním z možných implementačních řešení kontraktu služby. Například kontrakt služeb firmy Google už je dnes definován pomocí RESTu, který je mnohem lépe interoperabilní a neklade takové nároky na klienty.

Dalším mýtem je, že SOA se používá pro velké aplikace, aby spolu mohli komunikovat. Orientace na služby už dnes nijak nesouvisí s velikostí aplikace, ale s nároky na aplikace jako takové. V případě webu je orientace na služby překřtěna pod další buzzword jménem Web 2.0. Na orientaci na služby můžeme nahlížet jako na obyčejnou evoluci architektury aplikací. Silným argumentem pro služby je fakt, že na úrovni aplikace přinášejí daleko lepší znovupoužitelnost.

Se zaměřením aplikací na služby se začali rozvíjet i další související oblasti. Můžeme například zmínit orchestraci služeb, která umožňuje spojovat služby do větších celků. To je ovšem již nadstavba nad vlastním "jádrem pudla". Mnoho firem se snaží tímto způsobem kapitalizovat a zároveň přifukovat bublinu, která nad SOA vznikla.

Co říci závěrem, SOA není raketová věda a ani nebude. Nenechte si proto věšet bulíky na nos. Nedávno jsem četl o reportu jedné nejmenované analytické společnosti, která tvrdila, že enterprise Java pojde díky SOA. To je samozřejmě nesmysl, mírně řečeno. Java dneska nabízí všechny nutné prostředky pro budování aplikací orientovaných na služby.