XML-RPC og dreyfð kerfi Nýlega hef ég þurft að hanna og útfæra þriggja laga kerfi í vinnunni. Ég þurfti því að velja hvaða tegund af RPC (remote procedure call) samskiptareglum ég ætlaði að nota. Í fyrstu útgáfu af kerfinu hafði ég smíðað eigin samskiptareglur byggðar á TCP/IP samskiptum. Vandamálið við þær eru að þegar þjónn er uppfærður vegna nýrrar uppfærslu á t.d. biðlaranum þarf annað hvort að smíða nýja þjóninn þannig að hann styðji áfram allar eldri aðferðir eða þannig að nýr þjónn er smíðaður og hann keyrður á annað tengi (e. port) eða annari vél. Þetta var ókostur. Kosturinn við þessa aðferð var hinsvegar að hún er hraðvirk. Ég valdi því að nota einhverskonar vef/xml kerfi í næstu útgáfu sem gat keyrt undir venjulegum vefþjóni, jafnvel þótt ég þyrfti að fórna hraðanum. Algengasta samskiptareglan fyrir slík kerfi er SOAP (Simple Object Access Protocol) sem er þrátt fyrir nafnið ekkert mjög einfalt. Í leit minni af RPC samskiptum rakst ég á XML-RPC samskiptareglurnar. Þessi staðall var einfaldur og hentaði miklu betur en SOAP fyrir verkefni sem ég stóð frammi fyrir. Í þessari grein ætla ég að fjalla stuttlega um hönnun slíkra kerfa og kynna kosti XML-RPC.

Mikilvægi dreifðar tölvuvinnslu er mikil í dag. Í stað biðlara/þjóna kerfa er orðið vinnsælla að smíða n-laga kerfi. N-laga kerfi (e. N-tier systems) eru kerfi sem byggja á mismunandi notanda lögum (e. user layer) og þjóna lögum. Þjóna lögunum er oftast skipt niður í viðskipta lag (e. business layer) sem annast gagna reglu reiknirit og gagna lag sem annast gagna meðhöndlun. Kosturinn við þessi kerfi er að auðvelt er að skipta út einingum í þeim og uppfæra þau. Mjög algeng tegund gagna lags þjóna eru fyrirspurnamáls þjónar að tegundinni SQL (structured query language) sem er í rauninni RPC samskiptareglur. Algegn tegund n-laga kerfa er þriggja laga kerfi. Yfirlits mynd yfir þessar tegundir kerfa fylgir greininni.

Fjar vinnslu kalla eða RPC (remote procedure call) samskiptareglur er einn þáttur í hönnun n-laga kerfa. Þær sjá um að staðla og dreifa tölvuvinnslu. Þær staðla falla og aðferða köllun yfir netkerfi. Til er margar tegundir RPC samskiptareglna. Vef/XML RPC samskiptareglur eru þannig hannaðar að þær fara um venjulega vef þjónustu s.s. Apache eða Microsoft Internet Information Services (IIS).

Þegar SOAP og XML-RPC eru borin saman kemur eftirfarandi í ljós. Kostir XML-RPC eru að miklu minni vinna fer í útfærsluna á XML-RPC þjóni en þjóni sem notar SOAP. XML-RPC býr til smærri XML samskiptar skjöl en SOPA. Kostir við SOAP eru notenda skilgreindar týpur. SOAP notar WSDL (Web Services Description Language) sem lýsingarform á þjónustunni sem hefur ýmsa kosti í för með sér. SOAP hefur stuðning frá stórum hugbúnaðarframleiðendum s.s. IBM, Microsoft o.fl. og mörgum netfyrirtækjum sem vilja sá aframhald á staðlinum. SOAP er W3C (World Wide Web Consortium) staðlað.

XML-RPC hentar mjög vel þegar maður ætlar að hanna kerfi þar sem bæði RPC þjónninn og
biðlarinn er hannaður ,,innanhús'' og ekki er ætlast til að opna RPC þjóninn fyrir aðra aðila.

SOAP hentar hinsvegar ef hanna á RPC þjónustu sem aðrir aðilar eiga að fá aðgang að eða biðlara sem á að nota þekkta SOAP þjónustu. SOAP er notað t.d. af Amazon, Google og Símanum.

Ýmsar útfærslur fyrir bæði SOAP og XML-RPC er til. Ég hef prófað nokkrar útfærslur fyrir XML-RPC þar á meðal fyrir .NET, C/C++ og php.

Mjög einfalt er að útfæra XML-RPC þjónustu í php og nota ég það sem uppkast af þjóni sem ég útfæri síðan betur í C++. Ég get bæði útfært þjóninn sem ég skrifaði í C++ sem cgi sem keyrir í gegnum Apache (eða hvaða vefþjón sem er) eða sem sjálfstæðan vefþjón sem ég úthluta tengi (port). Ég valdi að þýða þjóninn með GNU gcc og keyra hann síðan á linux. Biðlarinn minn er síðan COM hlutur einnig útfærður í C++ sem á síðan að keyra í ýmsum Microsoft Windows forritum sem hægt er að útfæra í C++, C# eða hvaða forritunarmálum sem styðja COM. Ég hef einnig prófað að útfæra umsjónarkerfi fyrir þetta verkefni sem notaði .NET XML-RPC biðlarahluti. Þetta umsjónarkerfi útfærði ég í C# og var mjög þægilegt að innleiða XML-RPC hlutina inn í útfærsluna.

Einnig má benda á að ef notuð er hlutbundin hönnun í útfærslunum á bæði þjónum og biðlurum þannig að RPC hluta forritsins er haldið sér og þjónustan almennuð (generalized) þá er mjög auðvelt að breyta útfærslunni í SOAP frá XML-RPC ef t.d. er ákveðið seinna að opna þjónustuna fyrir aðra aðila.

Geirmundur Orri Sigurðsson.
Verkefnastjóri hjá Íslenska hugbúnaðarhúsinu ehf.

Heimildir:

Microsoft. (1999). Desktop Applications with Microsoft Visual C++6.0. 10 - 15. Microsoft Press. Redmond.
Schlossnagle, G. (2004). Advanced PHP Programming. 393 - 415. Sams Publishing. Indianapolis.

Tenglar:

Amazon Web Services:
Google SOAP search interface:
SoapWare:
XML Protocol Working Group (SOAP):
XML-RPC .NET:
XML-RPC Home Page: