專利名稱:web服務(wù)數(shù)據(jù)庫群集體系結(jié)構(gòu)及其方法
技術(shù)領(lǐng)域:
本發(fā)明涉及利用數(shù)據(jù)庫群集的web服務(wù),例如使能電子商務(wù)。
背景技術(shù):
電子商務(wù)日漸成為日常生活的一部分。通過電子網(wǎng)絡(luò),最常見的是通過公共互聯(lián)網(wǎng),產(chǎn)生對(duì)于貨物和服務(wù)的采購詢價(jià)和采購訂單。大成交量的電子商務(wù)應(yīng)用需要這樣的一種基礎(chǔ)設(shè)施其提供高可用性、有保證的服務(wù)質(zhì)量(QoS)和具有負(fù)載平衡的響應(yīng)時(shí)間、容錯(cuò)以及用于高可用性的穩(wěn)定性。這類系統(tǒng)被部署在群集上,其中,群集節(jié)點(diǎn)作為應(yīng)用服務(wù)器(以及應(yīng)用)與數(shù)據(jù)庫實(shí)例(主數(shù)據(jù)庫實(shí)例與復(fù)制品(replica))的主機(jī)(host),以便分擔(dān)工作量并提供高可用性和改進(jìn)的響應(yīng)時(shí)間。
用于實(shí)現(xiàn)電子商務(wù)應(yīng)用的一種已知方法是J2EE(Sun Microsystem公司發(fā)布的Java 2平臺(tái),企業(yè)版)。J2EE是一組協(xié)調(diào)的規(guī)范與實(shí)踐,其共同使用于開發(fā)、部署和管理以服務(wù)器為中心的多層應(yīng)用的軟件解決方案成為可能。J2EE還是用于創(chuàng)建和使用web服務(wù)的平臺(tái)。
J2EE平臺(tái)中的主要技術(shù)為用于基于XML的PRC(JAX-RPC)的Java API、JavaServer頁、Java Servlet、企業(yè)JavaBean組件、J2EE連接器體系結(jié)構(gòu)、J2EE管理模型、J2EE部署API、Java管理擴(kuò)展(JMX)、用于容器的J2EE授權(quán)合同、用于XML注冊(cè)表(JAXR)的Java API、Java消息服務(wù)(JMS)、Java命名與目錄接口(JNDI)、Java事務(wù)API(JTA)、CORBA和JDBC數(shù)據(jù)訪問API。
已知的電子商務(wù)體系結(jié)構(gòu)具有用于應(yīng)用的、分層的開發(fā)和部署方法。電子商務(wù)應(yīng)用的不同層為(i)視圖或用戶接口層,(ii)控制器或應(yīng)用邏輯層,以及(iii)模型或應(yīng)用的持久數(shù)據(jù)模型層。這些層被稱作MVC(即模型、視圖和控制器)體系結(jié)構(gòu),它們分別被部署在web、應(yīng)用和數(shù)據(jù)庫服務(wù)器上。
如圖1所示,MVC體系結(jié)構(gòu)10具有人類行為者(human actor)12,其與web服務(wù)客戶端計(jì)算機(jī)14交互??蛻舳擞?jì)算機(jī)14運(yùn)行瀏覽器應(yīng)用(其為調(diào)用web服務(wù)的J2EE程序的客戶端),并使用合適的(即http/https)協(xié)議通過例如互聯(lián)網(wǎng)等公共網(wǎng)絡(luò)16與應(yīng)用服務(wù)器交互。部署J2EE應(yīng)用的應(yīng)用服務(wù)器18具有servlet容器20,在該servlet容器20中存在有多個(gè)應(yīng)用Java servlet 22。容器20實(shí)現(xiàn)J2EE servlet規(guī)范并在運(yùn)行時(shí)執(zhí)行servlet22。servlet容器20的輸出24是被傳遞到實(shí)體/企業(yè)Java Bean(EJB)容器26的RMI/IIOP(即IIOP上的RMI)調(diào)用。EJB容器26具有多個(gè)應(yīng)用EJB 28。來自EJB容器26的輸出30為JDBC API,其在數(shù)據(jù)庫32上進(jìn)行讀取/寫入調(diào)用。
部署多層體系結(jié)構(gòu)的一種方法是對(duì)web、應(yīng)用和數(shù)據(jù)庫層進(jìn)行群集,以提高端到端的應(yīng)用性能。如圖2所示,體系結(jié)構(gòu)50包括與網(wǎng)絡(luò)分派器(dispatcher)程序52通信的web服務(wù)客戶端14。節(jié)點(diǎn)54-58的群集作為多個(gè)應(yīng)用服務(wù)器59-62以及數(shù)據(jù)庫實(shí)例64-68的主機(jī)。分派器程序52將請(qǐng)求平均分配給節(jié)點(diǎn)54-58。數(shù)據(jù)庫實(shí)例64-68在幾個(gè)節(jié)點(diǎn)上被復(fù)制,以便獲得性能益處和在數(shù)據(jù)庫故障的情況下更高的可用性。網(wǎng)絡(luò)分派器52(或虛擬IP)將客戶端應(yīng)用14從群集抽象,并提供與節(jié)點(diǎn)54-58的群集交互的單個(gè)接口。
接下來轉(zhuǎn)到應(yīng)用服務(wù)器59-62。應(yīng)用Servlet 22具有與以上所述相同的功能。每一應(yīng)用邏輯82是一組Java類,其容納了應(yīng)用用來滿足客戶端請(qǐng)求的業(yè)務(wù)邏輯。業(yè)務(wù)邏輯可以是任何東西;例如驗(yàn)證由客戶端12發(fā)送以便持久保存在數(shù)據(jù)庫70中的數(shù)據(jù)。應(yīng)用會(huì)話Bean 84是如上面所闡釋的企業(yè)Java Bean(EJB)。會(huì)話Bean為容納需要“ACID”支持的應(yīng)用邏輯的Java組件。ACID代表原子性、一致性、隔離性與持久性。J2EE容器(例如IBM WebSphere應(yīng)用服務(wù)器和BEA Weblogic應(yīng)用服務(wù)器)向會(huì)話Bean 84提供ACID支持。
數(shù)據(jù)訪問層72-76被部署以替換實(shí)體Bean,并直接訪問數(shù)據(jù)庫。網(wǎng)絡(luò)分派器78以與上面相對(duì)于分派器52所闡釋的相同的原理被部署,以便將數(shù)據(jù)庫請(qǐng)求路由傳遞到復(fù)制品群集64-68中數(shù)據(jù)庫節(jié)點(diǎn)中的一個(gè)。
相應(yīng)的數(shù)據(jù)訪問層72-76以及網(wǎng)絡(luò)分派器78將讀操作路由傳遞到復(fù)制品數(shù)據(jù)庫實(shí)例64-68,且將更新、插入和刪除被路由傳遞到主數(shù)據(jù)庫70。如果應(yīng)用需要在剛剛寫入之后的讀取,數(shù)據(jù)訪問層72-76必須在事務(wù)之間是有狀態(tài)的(stateful)以便將這樣一種查詢路由傳遞到主數(shù)據(jù)庫,否則,它通過將查詢路由傳遞到復(fù)制品來向應(yīng)用提供過期數(shù)據(jù)。復(fù)制基礎(chǔ)結(jié)構(gòu)在后臺(tái)獨(dú)立地工作,且不與數(shù)據(jù)訪問層集成在一起以便在它完成復(fù)制工作時(shí)進(jìn)行通知。這使得數(shù)據(jù)訪問層72-76智能較低,因?yàn)樗^續(xù)將插入/刪除/更新后的所有查詢轉(zhuǎn)送到主數(shù)據(jù)庫70,即使數(shù)據(jù)正被復(fù)制到復(fù)制品,因此對(duì)群集資源利用不足。
另一種方法一其適用于具有非常大的數(shù)據(jù)庫的應(yīng)用一是將數(shù)據(jù)庫實(shí)現(xiàn)為主數(shù)據(jù)庫與分區(qū)拓?fù)浣Y(jié)構(gòu)。如圖3所示,體系結(jié)構(gòu)100又一次具有網(wǎng)絡(luò)分派器52。每個(gè)應(yīng)用服務(wù)器102-106具有與圖2中的服務(wù)器58-62一樣的應(yīng)用servlet、應(yīng)用邏輯和應(yīng)用會(huì)話bean。然而,應(yīng)用實(shí)體bean層108-112代替了數(shù)據(jù)訪問層72-76。主數(shù)據(jù)庫實(shí)例114存在并對(duì)來自相應(yīng)的應(yīng)用實(shí)體bean 108-112的讀取/寫入請(qǐng)求進(jìn)行響應(yīng)。另外,主數(shù)據(jù)庫實(shí)例114作為離散的分區(qū)116存在。主數(shù)據(jù)庫實(shí)例114知道群集中分區(qū)的數(shù)據(jù)庫實(shí)例,并維護(hù)關(guān)于數(shù)據(jù)如何被分區(qū)以及分區(qū)中的哪一節(jié)點(diǎn)承載數(shù)據(jù)的哪一部分的信息。該信息用于在主數(shù)據(jù)庫上創(chuàng)建索引。一旦查詢被提交,主數(shù)據(jù)庫114i)分析該查詢,ii)將其劃分為不同的部分以便匹配數(shù)據(jù)分區(qū),iii)將各個(gè)部分路由傳遞到分區(qū)的數(shù)據(jù)庫節(jié)點(diǎn)116n,iv)收集來自查詢執(zhí)行中所涉及的每個(gè)部分的結(jié)果,v)在結(jié)果匯集上執(zhí)行數(shù)據(jù)庫操作,由于所述操作需要來自所有分區(qū)的結(jié)果的完整視圖,其不能由底層分區(qū)單獨(dú)執(zhí)行,vi)構(gòu)成最終結(jié)果集,以及
vii)將查詢應(yīng)答到客戶端。
分區(qū)的數(shù)據(jù)庫116n為承載數(shù)據(jù)庫114的部分的數(shù)據(jù)庫實(shí)例。例如,大的表T可被分區(qū)在兩個(gè)數(shù)據(jù)庫實(shí)例中,使得第一數(shù)據(jù)庫承載該表的行(元組)的第一半,第二數(shù)據(jù)庫承載第二半。數(shù)據(jù)庫分區(qū)還可通過將不同的表放在不同的數(shù)據(jù)庫服務(wù)器上實(shí)現(xiàn)。例如,表T1被放在服務(wù)器S1上,表T2被放在服務(wù)器S2上。
然而,在通過這類解決方案部署分布式系統(tǒng)時(shí)存在以下限制1.數(shù)據(jù)分區(qū)的部署是非常特定于數(shù)據(jù)庫廠商和產(chǎn)品的。數(shù)據(jù)分區(qū)部署和查詢路由傳遞邏輯不是行業(yè)標(biāo)準(zhǔn),這使得應(yīng)用與數(shù)據(jù)庫產(chǎn)品以及廠商緊密耦合。
2.提供數(shù)據(jù)分區(qū)的數(shù)據(jù)庫產(chǎn)品可能需要額外的數(shù)據(jù)庫管理,因?yàn)樵摻鉀Q方案是對(duì)標(biāo)準(zhǔn)數(shù)據(jù)庫技術(shù)的擴(kuò)展。
3.擔(dān)任到分區(qū)數(shù)據(jù)集的主接口的單個(gè)數(shù)據(jù)庫實(shí)例將分區(qū)數(shù)據(jù)庫實(shí)例抽象;然而,它擔(dān)任在查詢被路由傳遞到承載與該查詢有關(guān)的數(shù)據(jù)的分區(qū)節(jié)點(diǎn)之前的中間查詢停止點(diǎn)。這使得應(yīng)用首先連接到主數(shù)據(jù)庫實(shí)例,接著主數(shù)據(jù)庫實(shí)例連接到次級(jí)實(shí)例,使系統(tǒng)在如本章節(jié)后面所討論的某些情況下效率較低。
4.存在部署主實(shí)例和分區(qū)實(shí)例以便提供容錯(cuò)的智能技術(shù)。然而,如果解決方案被設(shè)計(jì)并被部署為具有作為到數(shù)據(jù)庫系統(tǒng)的單個(gè)接口點(diǎn)的單個(gè)主實(shí)例,則數(shù)據(jù)庫故障的風(fēng)險(xiǎn)由于主實(shí)例的單故障點(diǎn)而增加。
主實(shí)例對(duì)查詢進(jìn)行分析,以檢查查詢可被包含在哪個(gè)數(shù)據(jù)分區(qū)中,且如果存在單個(gè)數(shù)據(jù)分區(qū),主實(shí)例將完整的查詢路由傳遞到該分區(qū)。如果涉及包括該查詢的多個(gè)分區(qū),主實(shí)例將查詢劃分成能被路由傳遞到各個(gè)分區(qū)的部分,并且,如果需要,在將結(jié)果發(fā)送回到應(yīng)用之前,負(fù)責(zé)處理來自每個(gè)分區(qū)的結(jié)果(例如聯(lián)結(jié)操作)。
如果查詢工作負(fù)荷和數(shù)據(jù)被很好地分析以便對(duì)數(shù)據(jù)進(jìn)行分區(qū),將存在較少的、查詢跨多個(gè)數(shù)據(jù)分區(qū)的情況。在OLTP應(yīng)用中,查詢復(fù)雜性較低,且在大多數(shù)情況下,它們由一個(gè)分區(qū)應(yīng)答。因此,與將查詢路由傳遞到主實(shí)例并接著使之路由傳遞到分區(qū)相比,這種應(yīng)用能將查詢直接路由傳遞到分區(qū)會(huì)更有效率。然而,使能這種直接路由傳遞的企業(yè)系統(tǒng)還應(yīng)支持主數(shù)據(jù)庫實(shí)例的其它特征,例如,以對(duì)應(yīng)用透明的方式為不同分區(qū)劃分查詢且聯(lián)結(jié)它們的返回結(jié)果,并且能被采用為行業(yè)標(biāo)準(zhǔn),以使得企業(yè)系統(tǒng)廠商能將該解決方案合并在框架中。缺少對(duì)以上特征的支持使得J2EE應(yīng)用與數(shù)據(jù)庫廠商緊密耦合,或必須將數(shù)據(jù)分區(qū)邏輯封裝在應(yīng)用層中,這都使應(yīng)用的可移植性變得復(fù)雜。這造成了對(duì)于能以透明且松散耦合的方式在分區(qū)數(shù)據(jù)庫上進(jìn)行應(yīng)用部署的例如J2EE框架等企業(yè)系統(tǒng)的需求。
本發(fā)明的目的在于克服或至少減弱一個(gè)或多個(gè)這些問題。
發(fā)明內(nèi)容
本發(fā)明的目的在于在數(shù)據(jù)庫群集的部署中、特別是在電子商務(wù)應(yīng)用中改善可伸縮性、性能、可用性和可靠性,并提供服務(wù)質(zhì)量。因此,公開了配置訪問共用數(shù)據(jù)庫的群集web服務(wù)節(jié)點(diǎn),其包括在每個(gè)節(jié)點(diǎn)上實(shí)現(xiàn)數(shù)據(jù)虛擬化層以便將數(shù)據(jù)庫的實(shí)例從web服務(wù)應(yīng)用抽象。
在一個(gè)實(shí)施例中,web服務(wù)操作在一組訪問共用數(shù)據(jù)庫的節(jié)點(diǎn)上執(zhí)行。該數(shù)據(jù)庫被安排為由主實(shí)體bean處理的主實(shí)例和至少一個(gè)復(fù)制品實(shí)例。在每個(gè)節(jié)點(diǎn)上執(zhí)行創(chuàng)建具有主實(shí)體bean的全部讀取和寫入操作的第一數(shù)據(jù)虛擬實(shí)體bean,創(chuàng)建僅承載主實(shí)體bean的讀取操作并處理所述復(fù)制品實(shí)例的第二實(shí)體bean,在第一實(shí)體bean上接收操作請(qǐng)求,取決于被請(qǐng)求操作將請(qǐng)求路由傳遞到主實(shí)體bean或第二實(shí)體bean,以訪問相應(yīng)的數(shù)據(jù)庫實(shí)例。
在另一實(shí)施例中,web服務(wù)在訪問共用數(shù)據(jù)庫的一組節(jié)點(diǎn)上執(zhí)行。數(shù)據(jù)庫被安排為離散的、不重疊的分區(qū)實(shí)例。在每一節(jié)點(diǎn)上執(zhí)行實(shí)現(xiàn)具有與所述共用數(shù)據(jù)庫匹配的模式的空數(shù)據(jù)庫實(shí)例,利用該空數(shù)據(jù)庫識(shí)別查詢中相關(guān)的分區(qū),以及將查詢傳遞到相應(yīng)的分區(qū)數(shù)據(jù)庫實(shí)例。
另外,公開了相應(yīng)的web服務(wù)服務(wù)器和計(jì)算機(jī)程序產(chǎn)品。
圖1為用于部署web應(yīng)用多層體系結(jié)構(gòu)的示意框圖;圖2為用于部署web應(yīng)用的、具有復(fù)制數(shù)據(jù)庫的群集體系結(jié)構(gòu)的示意框圖;圖3為用于部署web應(yīng)用的、具有分區(qū)數(shù)據(jù)庫的群集體系結(jié)構(gòu)的示意框圖;圖4為用于部署體現(xiàn)本發(fā)明的web應(yīng)用的、具有復(fù)制數(shù)據(jù)庫的群集體系結(jié)構(gòu)的示意框圖;圖5為用于圖4的實(shí)施例的序列圖;圖6為用于部署體現(xiàn)本發(fā)明的web應(yīng)用的、具有分區(qū)數(shù)據(jù)庫的群集體系結(jié)構(gòu)的示意框圖。
具體實(shí)施例方式
概述開發(fā)了數(shù)據(jù)虛擬化層以便將物理數(shù)據(jù)庫實(shí)例相對(duì)于應(yīng)用抽象。虛擬化層容納了數(shù)據(jù)管理和查詢路由傳遞邏輯,并將數(shù)據(jù)訪問邏輯從應(yīng)用代碼移到作為應(yīng)用的主機(jī)的中間件(例如應(yīng)用服務(wù)器)。
用于web應(yīng)用開發(fā)的優(yōu)選J2EE技術(shù)被擴(kuò)展以提供數(shù)據(jù)庫層的可伸縮部署。在應(yīng)用服務(wù)器(例如IBM WebSphere以及BEA Weblogic應(yīng)用服務(wù)器)中部署的應(yīng)用層被群集,以便對(duì)web事務(wù)進(jìn)行負(fù)載平衡,然而,數(shù)據(jù)庫層不能采用現(xiàn)有的J2EE技術(shù)被群集。在J2EE體系結(jié)構(gòu)中部署的數(shù)據(jù)對(duì)象或?qū)嶓wbean在設(shè)計(jì)上被附屬于單個(gè)數(shù)據(jù)庫實(shí)例,這對(duì)通過創(chuàng)建復(fù)制品或水平分區(qū)的數(shù)據(jù)庫群集來對(duì)數(shù)據(jù)庫實(shí)例進(jìn)行群集留下了極小的選擇。數(shù)據(jù)虛擬化層使得這種情況能夠發(fā)生。
取決于應(yīng)用的類別,將選擇“復(fù)制數(shù)據(jù)庫”與“分區(qū)數(shù)據(jù)庫”方法來改進(jìn)數(shù)據(jù)可用性、可伸縮性以及性能。存在多種電子商務(wù)應(yīng)用類別,例如a)數(shù)據(jù)讀密集的,b)數(shù)據(jù)讀寫密集的以及c)數(shù)據(jù)寫密集的?!皬?fù)制數(shù)據(jù)庫”解決方案以數(shù)據(jù)讀密集的應(yīng)用為目標(biāo),分區(qū)數(shù)據(jù)庫解決方案以其余兩種即數(shù)據(jù)讀寫密集的與數(shù)據(jù)寫密集的為目標(biāo)。
在下文對(duì)實(shí)施例的介紹中將使用J2EE的示例。
復(fù)制數(shù)據(jù)庫復(fù)制數(shù)據(jù)庫解決方案是通過創(chuàng)建實(shí)體Bean的兩個(gè)克隆(clone)實(shí)現(xiàn)的。實(shí)體Bean是數(shù)據(jù)(表)的面向?qū)ο蟮囊晥D,典型地表示來自其指向的表的一個(gè)元組。然后以這樣一種方式部署克隆的實(shí)體Bean,使得克隆bean中的一個(gè)(RWBean)提供數(shù)據(jù)虛擬化并將數(shù)據(jù)的物理位置從應(yīng)用抽象。另一個(gè)克隆bean(ReadBean)針對(duì)復(fù)制數(shù)據(jù)庫被部署。初始(主)實(shí)體bean仍繼續(xù)指向主數(shù)據(jù)庫。使用主bean的屬性(JNDI名)部署數(shù)據(jù)虛擬器實(shí)體bean,因此,應(yīng)用透明地開始調(diào)用數(shù)據(jù)虛擬器實(shí)體bean而不是主實(shí)體bean。通過這樣做,數(shù)據(jù)虛擬器實(shí)體bean擁有了通過將請(qǐng)求委派到主實(shí)體bean或是克隆(Read)實(shí)體bean而將查詢負(fù)載平衡(路由傳遞)到主數(shù)據(jù)庫或是其復(fù)制品的控制。
現(xiàn)在參照?qǐng)D4,注意,對(duì)與圖2中所示布置具有相同數(shù)字的不再進(jìn)行介紹。在體系結(jié)構(gòu)130中,用基于QoS目標(biāo)的路由器Servlet(QRS)132代替圖2中的網(wǎng)絡(luò)分派器52。QRS 132是到節(jié)點(diǎn)140-144的群集的進(jìn)入點(diǎn),它監(jiān)視每個(gè)節(jié)點(diǎn)對(duì)于給定服務(wù)類的性能。QRS 132在后臺(tái)記錄性能,并使用該結(jié)果對(duì)后續(xù)請(qǐng)求進(jìn)行路由傳遞,這種路由傳遞是基于它們的QoS目標(biāo)以及在前面的運(yùn)行中觀察到的各節(jié)點(diǎn)性能。QRS 132還在CEBRW(如下面所介紹的)的幫助下監(jiān)視數(shù)據(jù)庫狀態(tài)改變,且如果數(shù)據(jù)庫狀態(tài)改變,它在將請(qǐng)求傳送到SSS(見下文)時(shí)設(shè)置額外的請(qǐng)求參數(shù),以便將數(shù)據(jù)庫狀態(tài)改變通知到SSS。SSS在線程名中設(shè)置標(biāo)志,以便同樣地使能其下的所有層。
新組件“會(huì)話同步器Servlet”(SSS)134-138被部署到容納web和應(yīng)用邏輯的各個(gè)相應(yīng)的節(jié)點(diǎn)140-144。每一SSS 134-138負(fù)責(zé)在群集節(jié)點(diǎn)140-144間同步用戶會(huì)話。由于取決于請(qǐng)求QuS目標(biāo)和群集中的節(jié)點(diǎn)所提供的QoS,來自用戶的不同請(qǐng)求可在群集的不同節(jié)點(diǎn)上得到服務(wù),所以SSS134-138在當(dāng)請(qǐng)求被路由傳遞到節(jié)點(diǎn)上時(shí)在節(jié)點(diǎn)上對(duì)用戶會(huì)話進(jìn)行同步。當(dāng)請(qǐng)求到達(dá)群集中所選擇的節(jié)點(diǎn)140-144時(shí),SSS 134-138對(duì)用戶會(huì)話進(jìn)行更新。SSS 134-138是在相應(yīng)的節(jié)點(diǎn)140-144上接收請(qǐng)求的第一個(gè)組件,并通過使用應(yīng)用服務(wù)器的servlet鏈配置屬性被配置為第一servlet。在SSS134-138更新用戶會(huì)話之后,請(qǐng)求被servlet容器轉(zhuǎn)送到相應(yīng)的應(yīng)用servlet22。應(yīng)用服務(wù)器在將請(qǐng)求傳送到應(yīng)用servlet 22之前將自動(dòng)調(diào)用SSS134-138。一旦應(yīng)用servlet 22完成處理,SSS 134-138讀回用戶會(huì)話并將之持久保存在共用(主)數(shù)據(jù)庫152上,該數(shù)據(jù)庫152可由在群集的所有節(jié)點(diǎn)140-144上部署的所有SSS 134-138訪問。由QRS 132向各個(gè)用戶會(huì)話分配唯一的標(biāo)識(shí)符,且其被用于在共用的數(shù)據(jù)庫152上持久保存用戶會(huì)話。用戶會(huì)話標(biāo)識(shí)符被保持在QRS 132的會(huì)話中,并作為在QRS 132與SSS134-138之間的請(qǐng)求URI的一部分被傳送到SSS 134-138。當(dāng)請(qǐng)求到達(dá)時(shí),SSS 134-138從共用的數(shù)據(jù)庫152讀取用戶會(huì)話,并用來自從共用數(shù)據(jù)庫152讀取的會(huì)話對(duì)象的值設(shè)置當(dāng)前會(huì)話屬性。
數(shù)據(jù)對(duì)象或?qū)嶓wBean的部署被再造(re-engineer)。實(shí)體Bean承載讀取(getXXX())、寫入(setXXX())以及刪除(remove())操作,以便與數(shù)據(jù)庫進(jìn)行事務(wù)處理并管理持久性數(shù)據(jù)。實(shí)體Bean被部署在作為應(yīng)用服務(wù)器的一部分的J2EE容器中。容器管理器實(shí)體bean的部署被再造,以便能夠以對(duì)應(yīng)用透明的方式與主數(shù)據(jù)庫以及復(fù)制品數(shù)據(jù)庫實(shí)例集成。這是通過以下方式實(shí)現(xiàn)的(a)克隆具有所有讀取和寫入操作的實(shí)體bean(CEBRW),并實(shí)現(xiàn)主實(shí)體bean的主接口(home interface)與遠(yuǎn)程接口兩者。然而,如下面所述的那樣,克隆bean的讀取和寫入操作的邏輯與主實(shí)體bean不同。
(b)創(chuàng)建具有其主接口與遠(yuǎn)程接口的新實(shí)體bean,其僅承載主實(shí)體bean的讀取操作。這種bean叫做CEBR,因?yàn)榕c作為主實(shí)體bean的讀取與寫入操作兩者的克隆的CEBRW不同,它是主實(shí)體bean的讀取操作的克隆。
通過使用Java反射(reflection)API,CEBRW 160-164和CEBR170-174可容易地在編譯時(shí)(在ejbc或部署階段)開發(fā)。為CEBRW 160-164和CEBR 170-174產(chǎn)生代碼的自動(dòng)工具還可產(chǎn)生用于CEBRW的讀和寫操作的代碼。CEBRW 160-164用“Bean管理持久性”(BMP)選項(xiàng)以及主實(shí)體bean的JNDI名進(jìn)行部署。CEBR 170-174用“容器管理持久性”(CMP)選項(xiàng)并針對(duì)數(shù)據(jù)庫復(fù)制品進(jìn)行部署。主實(shí)體bean針對(duì)主數(shù)據(jù)庫和新JNDI名被部署為CMP。CEBRW 160-164的寫入操作(setXXX())將請(qǐng)求委派給主實(shí)體bean的寫入操作。取決于下面介紹的條件,CEBRW160-164的讀取(getXXX())操作將請(qǐng)求委派給CEBR 170-174的讀取操作或主實(shí)體bean的讀取操作。
由于通過使用主實(shí)體bean的JNDI名部署CEBRW 160-164,應(yīng)用會(huì)話bean與CEBRW 160-164而不是與主實(shí)體bean交互。這允許CEBRW160-164截取源于應(yīng)用的所有數(shù)據(jù)庫請(qǐng)求,并將它們?cè)谥鲾?shù)據(jù)庫實(shí)例152和復(fù)制品數(shù)據(jù)庫實(shí)例182-184之間路由傳遞。例如,CEBRW 160-164可通過將讀取請(qǐng)求委派給CEBR 170-174來將讀取操作路由傳遞給復(fù)制品,并通過將寫入請(qǐng)求委派給主實(shí)體bean的來將寫入操作路由傳遞給主數(shù)據(jù)庫152。在應(yīng)用會(huì)話bean緊跟在寫入后作出讀取請(qǐng)求的情況下,CEBRW160-164將請(qǐng)求委派給主實(shí)體bean的讀取操作(而不是CEBR 170-174的讀取操作),以便向應(yīng)用提供最新的數(shù)據(jù),因?yàn)橹鲗?shí)體bean是針對(duì)主數(shù)據(jù)庫部署的。為了識(shí)別讀取請(qǐng)求是否在寫入請(qǐng)求之后,CEBRW 160-164在其寫入操作的執(zhí)行期間在執(zhí)行請(qǐng)求的當(dāng)前線程名中設(shè)置標(biāo)志。該標(biāo)志在CEBRW 160-164的寫入操作中被檢查,且如果發(fā)現(xiàn)標(biāo)志值被置位,則將請(qǐng)求委派給主實(shí)體bean的讀取操作。通過當(dāng)應(yīng)用處理完成時(shí)讀取線程名,數(shù)據(jù)庫狀態(tài)改變標(biāo)志也被SSS 134-138讀取。SSS 134-138將此標(biāo)志添加到應(yīng)用響應(yīng)中,并將合成的響應(yīng)傳送到QRS 132來將數(shù)據(jù)庫狀態(tài)改變“通知”給QRS 132。QRS 132總是在來自SSS 134-138的響應(yīng)中尋找該標(biāo)志,以便智能地將來自用戶的后續(xù)請(qǐng)求路由傳遞到群集中與主數(shù)據(jù)庫實(shí)例相關(guān)聯(lián)的主節(jié)點(diǎn),從而允許應(yīng)用從數(shù)據(jù)庫獲取最新的數(shù)據(jù)。CEBRW 160-164還在線程名中設(shè)置與寫入操作相關(guān)聯(lián)的時(shí)間戳。時(shí)間戳也被SSS 134-138傳送到QRS 132并在QRS 132的用戶會(huì)話中被緩存,以便在以后用于與數(shù)據(jù)復(fù)制時(shí)間戳進(jìn)行比較,并識(shí)別這樣的階段到該階段為止,數(shù)據(jù)被復(fù)制在所有復(fù)制品上。
通過使用這種方法,將應(yīng)用與數(shù)據(jù)持久性細(xì)節(jié)抽象,因?yàn)樗^續(xù)與實(shí)體Bean的初始接口交互。DB復(fù)制器180將主數(shù)據(jù)庫152增量地復(fù)制到復(fù)制品,并將時(shí)間戳一直到該時(shí)間戳,數(shù)據(jù)被復(fù)制到所有復(fù)制品實(shí)例182、184上—通知給QRS 132。DB復(fù)制器180實(shí)現(xiàn)的關(guān)鍵任務(wù)之一是提供所有復(fù)制品實(shí)例的相同狀態(tài)和直到其為止數(shù)據(jù)被復(fù)制的時(shí)間戳。QRS 132將復(fù)制時(shí)間戳與對(duì)于給定用戶的最近更新的時(shí)間戳進(jìn)行比較,且如果它發(fā)現(xiàn)更新時(shí)間戳被包括在復(fù)制時(shí)間戳中,則它通過將請(qǐng)求路由傳遞到群集中的任何節(jié)點(diǎn)來開始利用復(fù)制品,而不是僅將請(qǐng)求路由傳遞到與主數(shù)據(jù)庫實(shí)例綁定的主節(jié)點(diǎn)。為了使能數(shù)據(jù)一致性,QRS 132在數(shù)據(jù)庫(未示出)中存儲(chǔ)更新時(shí)間戳。
如果在應(yīng)用中使用有狀態(tài)的會(huì)話bean且對(duì)其的引用被緩存在web層用戶會(huì)話中,則在一個(gè)節(jié)點(diǎn)(例如140)上部署的應(yīng)用程序可調(diào)用另一節(jié)點(diǎn)(例如142)上的有狀態(tài)會(huì)話bean實(shí)例,因?yàn)橥粫?huì)話中來自用戶的不同請(qǐng)求可取決于QoS目標(biāo)而切換節(jié)點(diǎn)。為了避免這一點(diǎn),可用啟動(dòng)并利用有狀態(tài)會(huì)話bean的用例(use case)(或URL模式)對(duì)QRS 132進(jìn)行配置。一旦這種用例被用戶調(diào)用,則QRS 132緩存(在QRS 132的用戶會(huì)話中)其路由傳遞請(qǐng)求的節(jié)點(diǎn)信息并使用該信息將來自用戶的所有后續(xù)請(qǐng)求路由傳遞到同一節(jié)點(diǎn)。類似地,還可用終止有狀態(tài)會(huì)話bean的會(huì)話的用例(或URL模式)對(duì)QRS 132進(jìn)行配置,使得QRS 132可在終止有狀態(tài)會(huì)話bean的請(qǐng)求后開始將用戶請(qǐng)求路由傳遞到任何群集節(jié)點(diǎn)。
取決于應(yīng)用場(chǎng)景,可用下列選項(xiàng)對(duì)QRS 132進(jìn)行配置,以便將數(shù)據(jù)庫狀態(tài)改變后的用戶請(qǐng)求路由傳遞到群集中的主節(jié)點(diǎn)(a)基于用戶的分區(qū)數(shù)據(jù)如果應(yīng)用承載在用戶間被分區(qū)的數(shù)據(jù)且特定用戶進(jìn)行的數(shù)據(jù)庫狀態(tài)改變僅影響他的記錄,則QRS 132僅為來自該用戶的、在數(shù)據(jù)庫狀態(tài)改變之后的請(qǐng)求設(shè)置數(shù)據(jù)庫狀態(tài)改變標(biāo)志。這使得CEBRW 160能夠?qū)碜运泄?jié)點(diǎn)的用于該用戶的數(shù)據(jù)庫查詢路由傳遞到數(shù)據(jù)庫的主實(shí)例。例如,來自該用戶的“PayUtilityBill”請(qǐng)求將改變?cè)谄滟~戶中的余額,而不會(huì)影響其他用戶的余額(或任何其他數(shù)據(jù))。
(b)不分區(qū)數(shù)據(jù)如果應(yīng)用數(shù)據(jù)不是在用戶間分區(qū)的,且特定用戶請(qǐng)求造成的數(shù)據(jù)庫狀態(tài)改變影響他的記錄以及其他用戶的記錄,則QRS 132為在數(shù)據(jù)庫狀態(tài)改變之后來自所有用戶的所有請(qǐng)求設(shè)置數(shù)據(jù)庫狀態(tài)改變標(biāo)志。這使得CEBRW 160能夠?qū)碜运泄?jié)點(diǎn)的用于所有用戶的所有數(shù)據(jù)庫查詢路由傳遞到數(shù)據(jù)庫的主實(shí)例。例如,從一個(gè)用戶帳戶到第二用戶帳戶轉(zhuǎn)移資金的“InterAccounTransfer”請(qǐng)求將改變?cè)撌聞?wù)中的兩個(gè)用戶的余額。
可以用用例(或URL模式)以及QRS 132使用上面定義的選項(xiàng)更新數(shù)據(jù)庫狀態(tài)的方式對(duì)QRS 132進(jìn)行配置。
圖5中示出了一完整的序列圖,該圖示出了相對(duì)于圖4中的體系結(jié)構(gòu)130的步驟1-29的流程。
體系結(jié)構(gòu)130提供了對(duì)以外在于應(yīng)用的方式將數(shù)據(jù)庫群集部署到應(yīng)用的透明支持。在不需要在應(yīng)用空間中構(gòu)建或嵌入任何邏輯的情況下,應(yīng)用透明地得以使用最新的數(shù)據(jù)工作而從不會(huì)得到數(shù)據(jù)的過期副本。
體系結(jié)構(gòu)130提供了基于QoS的請(qǐng)求分派器132,以便最優(yōu)地利用系統(tǒng)的可用資源。
體系結(jié)構(gòu)130為給定的服務(wù)類(service class)監(jiān)視各節(jié)點(diǎn)的性能,并使用性能歷史來選擇對(duì)于給定請(qǐng)求和QoS目標(biāo)的節(jié)點(diǎn)。該體系結(jié)構(gòu)還可將給出不良性能和需要調(diào)整的節(jié)點(diǎn)通知給系統(tǒng)管理員。
分區(qū)數(shù)據(jù)庫分區(qū)數(shù)據(jù)庫解決方案是通過在IBM Cloudscape(http://www-306.ibm.com/software/data/cloudscape,其并入此處作為參考)中創(chuàng)建與主數(shù)據(jù)庫匹配的虛擬數(shù)據(jù)庫實(shí)現(xiàn)的。Cloudscape是Java中的關(guān)系數(shù)據(jù)庫引擎庫,其可被嵌入到應(yīng)用的JVM(中間件服務(wù)器)中。Cloudscape中的虛擬數(shù)據(jù)庫包括與物理數(shù)據(jù)庫中的表嚴(yán)格相似的表定義。這里的構(gòu)思是截取源于應(yīng)用、到Cloudscape中的數(shù)據(jù)庫的所有查詢,并將該查詢路由傳遞到包含應(yīng)答該查詢所需的數(shù)據(jù)的正確分區(qū)。
為了能夠?qū)⒉樵兟酚蓚鬟f到正確分區(qū),Cloudscape數(shù)據(jù)庫程序庫必須被擴(kuò)展以理解數(shù)據(jù)分區(qū)并使用該信息將查詢分解和路由傳遞到正確的數(shù)據(jù)源。這種功能不是通過擴(kuò)展JDBC驅(qū)動(dòng)器實(shí)現(xiàn)的,因?yàn)楹芸赡懿樵儠?huì)需要從一個(gè)以上的數(shù)據(jù)分區(qū)中取回?cái)?shù)據(jù),并隨后可能需要例如Join、Sort等復(fù)雜的數(shù)據(jù)庫操作來構(gòu)建最終結(jié)果集。Cloudscape數(shù)據(jù)庫引擎具有將涉及一個(gè)以上的表和數(shù)據(jù)庫操作的查詢分解為查詢圖模型(query graph model)并分別執(zhí)行各個(gè)部分以及最終對(duì)數(shù)據(jù)進(jìn)行集成的能力。引入這一額外的層所涉及的開銷不會(huì)大,因?yàn)镃loudscape是Java程序庫并且運(yùn)行在應(yīng)用的JVM中。
現(xiàn)在參照?qǐng)D6,應(yīng)注意,不再重新介紹與圖3所示的安排相同的數(shù)字。
為了針對(duì)分區(qū)數(shù)據(jù)庫節(jié)點(diǎn)部署J2EE應(yīng)用,針對(duì)框架嵌入RDBMS(FE-RDBMS)202-206(例如IBM Cloudscape)在體系結(jié)構(gòu)200中部署J2EE應(yīng)用。
典型地針對(duì)關(guān)系數(shù)據(jù)庫例如IBM的DB2TM和OracleTM部署J2EE應(yīng)用,以便容納應(yīng)用數(shù)據(jù)并針對(duì)其執(zhí)行查詢。J2EE應(yīng)用的數(shù)據(jù)對(duì)象或?qū)嶓wbean與數(shù)據(jù)源定義相耦合,所述數(shù)據(jù)源定義建立與底層數(shù)據(jù)庫的通信通道并作為針對(duì)數(shù)據(jù)庫系統(tǒng)執(zhí)行查詢的驅(qū)動(dòng)器。在典型的J2EE應(yīng)用中,為例如DB2TM和OracleTM的RDBMS定義數(shù)據(jù)源,以便為應(yīng)用提供JDBC接口以執(zhí)行查詢。數(shù)據(jù)庫的物理位置被封裝在數(shù)據(jù)源定義中,并從應(yīng)用抽象,以便于開發(fā)和部署可移植性。用數(shù)據(jù)源JNDI名(在應(yīng)用部署描述符中)配置應(yīng)用實(shí)體bean;通過使用數(shù)據(jù)源JNDI名,框架在運(yùn)行時(shí)執(zhí)行JNDI查找,以便獲取數(shù)據(jù)源實(shí)例,并將其用于源于相關(guān)聯(lián)的實(shí)體bean的所有數(shù)據(jù)庫查詢。
為了針對(duì)分區(qū)數(shù)據(jù)庫節(jié)點(diǎn)102-106的群集部署這類應(yīng)用,所有源于該應(yīng)用的數(shù)據(jù)庫查詢被截取,并對(duì)它們進(jìn)行分析以得知可應(yīng)答/執(zhí)行該查詢的分區(qū)節(jié)點(diǎn)。使用FE-RDBMS 202-206截取查詢。使用所介紹的方法,應(yīng)用可被自動(dòng)且透明地修改,以便通過在FE-RDBMS 202-206中動(dòng)態(tài)定義其模式與應(yīng)用數(shù)據(jù)庫的模式相匹配的空數(shù)據(jù)庫實(shí)例以及用應(yīng)用數(shù)據(jù)庫的JNDI名為之定義數(shù)據(jù)源定義并將應(yīng)用數(shù)據(jù)庫的JNDI名重新命名為新的唯一名,來針對(duì)FE-RDBMS 202-206對(duì)它們進(jìn)行部署。這使得FE-RDBMS 202-206能夠在不改變應(yīng)用代碼的情況下“獲取”所有應(yīng)用查詢,并對(duì)它們進(jìn)行分析和將其路由傳遞到可執(zhí)行和應(yīng)答該查詢的數(shù)據(jù)庫分區(qū)節(jié)點(diǎn)。作為應(yīng)用部署的一部分,F(xiàn)E-RDBMS 202-206被配置為具有數(shù)據(jù)庫分區(qū)拓?fù)洌⑶彝ㄟ^使用該數(shù)據(jù)庫分區(qū)拓?fù)?,F(xiàn)E-RDBMS 202-206使用JDBC接口將該查詢(或多個(gè)查詢)分區(qū)、重新生成以及路由傳遞到適當(dāng)?shù)臄?shù)據(jù)庫分區(qū)節(jié)點(diǎn)。如果查詢跨多個(gè)數(shù)據(jù)庫分區(qū),則FE-RDBMS 202-206為各個(gè)分區(qū)產(chǎn)生查詢片段,并在各分區(qū)的結(jié)果上執(zhí)行聯(lián)結(jié),以便為應(yīng)用構(gòu)成最終的結(jié)果集。不需要來自應(yīng)用提供者的任何代碼、查詢生成或部署支持來使能針對(duì)分區(qū)數(shù)據(jù)庫群集的J2EE應(yīng)用部署。
如果執(zhí)行查詢涉及一個(gè)以上的數(shù)據(jù)庫分區(qū)節(jié)點(diǎn),則FE-RDBMS202-206分析、產(chǎn)生查詢片段并對(duì)結(jié)果進(jìn)行聯(lián)結(jié)。
體系結(jié)構(gòu)200對(duì)J2EE應(yīng)用提供了透明的支持,以針對(duì)具有分區(qū)數(shù)據(jù)的數(shù)據(jù)庫群集對(duì)它們進(jìn)行部署。該框架透明地將應(yīng)用查詢路由傳遞到可執(zhí)行該查詢的適當(dāng)?shù)臄?shù)據(jù)庫分區(qū)節(jié)點(diǎn)。應(yīng)用不需要承載任何邏輯或代碼以便與該分區(qū)數(shù)據(jù)庫群集一起工作。
通過使應(yīng)用能夠針對(duì)數(shù)據(jù)庫分區(qū)被部署,體系結(jié)構(gòu)200改善了應(yīng)用和數(shù)據(jù)庫性能。
體系結(jié)構(gòu)200使J2EE應(yīng)用能夠與數(shù)據(jù)庫廠商以及產(chǎn)品松散耦合,并自備了對(duì)使用數(shù)據(jù)庫分區(qū)的支持。
體系結(jié)構(gòu)200適合于應(yīng)用服務(wù)器的群集部署,且沒有將查詢路由傳遞到適當(dāng)?shù)臄?shù)據(jù)庫分區(qū)節(jié)點(diǎn)的單故障點(diǎn)。
查詢路由傳遞邏輯被部署在FE-RDBMS 202-206處,其對(duì)應(yīng)用來說是本地的,并將查詢直接路由傳遞到“正確的”遠(yuǎn)程數(shù)據(jù)庫分區(qū)。在這種體系結(jié)構(gòu)200中避免了分析查詢的額外停止,這改善了性能,并使J2EE框架能夠針對(duì)分區(qū)數(shù)據(jù)庫群集透明地部署應(yīng)用。
組合解決方案有可能將實(shí)現(xiàn)包含分區(qū)數(shù)據(jù)源的群集以及每個(gè)分區(qū)具有復(fù)制品的兩個(gè)方案組合起來。這將提供二級(jí)負(fù)載平衡、可用性和性能優(yōu)點(diǎn)。
權(quán)利要求
1.一種用于配置訪問共用數(shù)據(jù)庫的群集web服務(wù)節(jié)點(diǎn)的方法,包括在各節(jié)點(diǎn)上實(shí)現(xiàn)數(shù)據(jù)虛擬化層,以便將所述數(shù)據(jù)庫的實(shí)例從web服務(wù)應(yīng)用抽象。
2.一種在訪問共用數(shù)據(jù)庫的一組節(jié)點(diǎn)上執(zhí)行web服務(wù)操作的方法,所述數(shù)據(jù)庫被安排為由主實(shí)體bean處理的主實(shí)例以及至少一個(gè)復(fù)制品實(shí)例,所述方法包括在每一所述節(jié)點(diǎn)上執(zhí)行的以下步驟創(chuàng)建具有所述主實(shí)體bean的所有讀取與寫入操作的第一數(shù)據(jù)虛擬化實(shí)體bean;創(chuàng)建僅承載所述主實(shí)體bean的讀取操作并處理所述復(fù)制品實(shí)例的第二實(shí)體bean;在所述第一實(shí)體bean處接收操作請(qǐng)求;以及取決于所述請(qǐng)求的訪問所述相應(yīng)的數(shù)據(jù)庫實(shí)例的操作,將所述請(qǐng)求路由傳遞到所述主實(shí)體bean或是所述第二實(shí)體bean。
3.根據(jù)權(quán)利要求2的方法,其中,如果請(qǐng)求寫入操作,則所述請(qǐng)求被路由傳遞到所述主實(shí)體bean。
4.根據(jù)權(quán)利要求2的方法,其中,如果請(qǐng)求讀取操作,則如果(i)不存在涉及寫入操作的先前所述請(qǐng)求,或(ii)所述復(fù)制品實(shí)例與所述主實(shí)例同步,所述請(qǐng)求被路由傳遞到所述第二實(shí)體bean,否則,所述請(qǐng)求被路由傳遞到所述主實(shí)體bean。
5.根據(jù)權(quán)利要求2的方法,包括將操作請(qǐng)求引導(dǎo)到所述節(jié)點(diǎn)之一的進(jìn)一步的初始步驟。
6.一種由訪問共用數(shù)據(jù)庫的一組節(jié)點(diǎn)形成的web服務(wù)服務(wù)器,所述數(shù)據(jù)庫被安排為由主實(shí)體bean處理的主實(shí)例以及至少一個(gè)復(fù)制品實(shí)例,每一節(jié)點(diǎn)包含處理器,該處理器用于創(chuàng)建具有所述主實(shí)體bean的所有讀取與寫入操作的第一數(shù)據(jù)虛擬化實(shí)體bean,創(chuàng)建僅承載所述主實(shí)體bean的讀取操作并處理所述復(fù)制品實(shí)例的第二實(shí)體bean;在所述第一實(shí)體bean處接收操作請(qǐng)求;以及取決于所述請(qǐng)求的訪問所述相應(yīng)的數(shù)據(jù)庫實(shí)例的操作,將所述請(qǐng)求路由傳遞到所述主實(shí)體bean或是所述第二實(shí)體bean。
7.根據(jù)權(quán)利要求6的服務(wù)器,其中,如果請(qǐng)求寫入操作,則所述請(qǐng)求被所述處理器路由傳遞到所述主實(shí)體bean。
8.根據(jù)權(quán)利要求6的服務(wù)器,其中,如果請(qǐng)求讀取操作,則如果(i)不存在涉及寫入操作的先前所述請(qǐng)求,或(ii)所述復(fù)制品實(shí)例與所述主實(shí)例同步,所述請(qǐng)求被所述服務(wù)器路由傳遞到所述第二實(shí)體bean,否則,所述請(qǐng)求被路由傳遞到所述主實(shí)體bean。
9.根據(jù)權(quán)利要求6的服務(wù)器,進(jìn)一步包含分派器,該分派器用于將操作請(qǐng)求引導(dǎo)到所述節(jié)點(diǎn)之一。
10.一種在訪問共用數(shù)據(jù)庫的一組節(jié)點(diǎn)上執(zhí)行web服務(wù)的方法,所述數(shù)據(jù)庫被安排為不離散的、不重疊的分區(qū)實(shí)例,所述方法包括在每一所述節(jié)點(diǎn)上執(zhí)行的以下步驟實(shí)現(xiàn)空數(shù)據(jù)庫實(shí)例,其具有與所述共用數(shù)據(jù)庫相匹配的模式;利用所述空數(shù)據(jù)庫在所述查詢中識(shí)別相關(guān)的分區(qū);以及將所述查詢路由傳遞到相應(yīng)的分區(qū)數(shù)據(jù)庫實(shí)例。
11.根據(jù)權(quán)利要求10的方法,包括接收來自所述相應(yīng)的分區(qū)數(shù)據(jù)庫實(shí)例的結(jié)果集的進(jìn)一步的步驟。
12.根據(jù)權(quán)利要求11的方法,其中,如果查詢跨一個(gè)以上的所述分區(qū)數(shù)據(jù)庫實(shí)例,則識(shí)別所述相關(guān)的分區(qū),且將所述結(jié)果集形成為相應(yīng)的結(jié)果集的聯(lián)結(jié)。
13.根據(jù)權(quán)利要求10的方法,包括將查詢引導(dǎo)到所述節(jié)點(diǎn)之一的進(jìn)一步的初始步驟。
14.一種由訪問共用數(shù)據(jù)庫的一組節(jié)點(diǎn)形成的web服務(wù)服務(wù)器,所述數(shù)據(jù)庫被安排為離散的、不重疊的分區(qū)實(shí)例,每一所述節(jié)點(diǎn)包含處理器,該處理器用于實(shí)現(xiàn)空數(shù)據(jù)庫實(shí)例,其具有與所述共用數(shù)據(jù)庫相匹配的模式;利用所述空數(shù)據(jù)庫在所述查詢中識(shí)別相關(guān)的分區(qū);以及將所述查詢路由傳遞到相應(yīng)的分區(qū)數(shù)據(jù)庫實(shí)例。
15.根據(jù)權(quán)利要求14的服務(wù)器,其中,所述處理器進(jìn)一步接收來自所述相應(yīng)的分區(qū)數(shù)據(jù)庫實(shí)例的結(jié)果集。
16.根據(jù)權(quán)利要求15的服務(wù)器,其中,如果查詢跨一個(gè)以上的所述分區(qū)數(shù)據(jù)庫實(shí)例,則所述處理器識(shí)別所述相關(guān)的分區(qū),且所述結(jié)果集被形成為相應(yīng)的結(jié)果集的聯(lián)結(jié)。
17.根據(jù)權(quán)利要求14的服務(wù)器,進(jìn)一步包含分派器,該分派器用于將操作請(qǐng)求引導(dǎo)到所述節(jié)點(diǎn)之一。
18.一種系統(tǒng),其實(shí)現(xiàn)根據(jù)權(quán)利要求2-4中任何一個(gè)的方法。
19.一種系統(tǒng),其實(shí)現(xiàn)根據(jù)權(quán)利要求10-13中任何一個(gè)的方法。
全文摘要
公開了對(duì)訪問共用數(shù)據(jù)庫的群集web服務(wù)節(jié)點(diǎn)的配置,其包括在每一節(jié)點(diǎn)上實(shí)現(xiàn)數(shù)據(jù)庫虛擬化層以便將數(shù)據(jù)庫的實(shí)例從web服務(wù)應(yīng)用抽象。在一個(gè)實(shí)施例中,在每一節(jié)點(diǎn)上執(zhí)行以下操作創(chuàng)建具有應(yīng)用開發(fā)的(主)實(shí)體bean的所有讀取和寫入操作的第一數(shù)據(jù)虛擬化實(shí)體bean;創(chuàng)建僅承載主實(shí)體bean的讀取操作并處理復(fù)制品實(shí)例的第二實(shí)體bean;在第一實(shí)體bean上接收操作請(qǐng)求;以及取決于被請(qǐng)求的訪問相應(yīng)的數(shù)據(jù)庫實(shí)例的操作,將請(qǐng)求路由傳遞到主實(shí)體bean或是第二實(shí)體bean。在另一實(shí)施例中,在每一節(jié)點(diǎn)上執(zhí)行實(shí)現(xiàn)空數(shù)據(jù)庫實(shí)例,其具有與共用數(shù)據(jù)庫相匹配的模式;利用該空數(shù)據(jù)庫在查詢中識(shí)別相關(guān)的分區(qū),以及將查詢路由傳遞到相應(yīng)的分區(qū)數(shù)據(jù)庫實(shí)例。
文檔編號(hào)G06F17/30GK101042767SQ200710084809
公開日2007年9月26日 申請(qǐng)日期2007年2月27日 優(yōu)先權(quán)日2006年2月28日
發(fā)明者V·S·巴特拉, W-S·李 申請(qǐng)人:國際商業(yè)機(jī)器公司