文/段楠
SOA是一種面向服務(wù)的分布式架構(gòu),將每個(gè)實(shí)現(xiàn)特定功能的工程拆分為服務(wù)層和表現(xiàn)層。服務(wù)層負(fù)責(zé)處理業(yè)務(wù)邏輯,對(duì)外提供服務(wù)接口。表現(xiàn)層負(fù)責(zé)處理與前端的交互,具體業(yè)務(wù)邏輯只需調(diào)用服務(wù)層發(fā)布的接口。
使用SOA架構(gòu)具有很多優(yōu)點(diǎn)??梢詫⑾到y(tǒng)拆分為多個(gè)獨(dú)立的模塊,模塊之間通過(guò)接口通信,降低了系統(tǒng)各個(gè)模塊之間的耦合度,可以通過(guò)接口方便地進(jìn)行各個(gè)模塊之間功能的調(diào)用??梢院芊奖愕貙?duì)系統(tǒng)進(jìn)行擴(kuò)展,需要擴(kuò)展系統(tǒng)功能時(shí),只需新增一個(gè)子模塊,然后通過(guò)接口與原有模塊進(jìn)行交互即可。可以將每個(gè)模塊分配給相應(yīng)的開(kāi)發(fā)人員進(jìn)行搭建,方便系統(tǒng)開(kāi)發(fā)任務(wù)的分工。
目前較為流行的SOA架構(gòu)開(kāi)發(fā)方式是使用Dubbo技術(shù)。在SOA架構(gòu)中,每個(gè)功能模塊都會(huì)發(fā)布服務(wù)或調(diào)用服務(wù),那么就需要有一個(gè)服務(wù)中心對(duì)各個(gè)服務(wù)進(jìn)行統(tǒng)一的資源調(diào)度與治理。Dubbo就是這個(gè)服務(wù)中心的管理工具。Dubbo對(duì)Spring有很好的支持,只需在Spring配置文件中進(jìn)行相關(guān)的配置即可使用。
Dubbo中主要有服務(wù)提供者、服務(wù)消費(fèi)者和注冊(cè)中心三個(gè)角色,還有一個(gè)監(jiān)控中心對(duì)每次服務(wù)調(diào)用進(jìn)行監(jiān)控與統(tǒng)計(jì)。服務(wù)提供者向注冊(cè)中心發(fā)布自己提供的服務(wù),服務(wù)消費(fèi)者向注冊(cè)中心訂閱自己所需的服務(wù),服務(wù)中心將服務(wù)提供者提供的服務(wù)及地址列表給服務(wù)消費(fèi)者,即實(shí)現(xiàn)了服務(wù)調(diào)度。
在項(xiàng)目中,服務(wù)層工程作為服務(wù)提供者,需要通過(guò)配置向注冊(cè)中心暴露服務(wù)的接口。表現(xiàn)層工程作為服務(wù)消費(fèi)者,需要通過(guò)配置從注冊(cè)中心引用服務(wù)接口。注冊(cè)中心推薦使用Zookeeper,負(fù)責(zé)服務(wù)的注冊(cè)與查找。
以B2C模式的圖書(shū)商城為例,介紹SOA架構(gòu)網(wǎng)站開(kāi)發(fā)的設(shè)計(jì)思路。圖書(shū)商城項(xiàng)目分為后臺(tái)系統(tǒng)、前臺(tái)系統(tǒng)、搜索系統(tǒng)、登錄系統(tǒng)。每個(gè)子系統(tǒng)實(shí)現(xiàn)各自的功能,運(yùn)行在各自的服務(wù)器上,互相之間通過(guò)接口進(jìn)行功能調(diào)用,來(lái)實(shí)現(xiàn)整個(gè)網(wǎng)站的功能。
后臺(tái)系統(tǒng)提供給商家使用,具有圖書(shū)分類(lèi)管理、圖書(shū)管理、訂單管理、投訴管理等功能。
圖書(shū)商城將不同類(lèi)目的圖書(shū)進(jìn)行分類(lèi),使得用戶可以根據(jù)圖書(shū)分類(lèi)進(jìn)行圖書(shū)的查找,管理員需要對(duì)圖書(shū)的分類(lèi)進(jìn)行管理。后臺(tái)系統(tǒng)提供圖書(shū)分類(lèi)的查詢、添加、修改、刪除功能,分類(lèi)名稱(chēng)不可重復(fù)。分類(lèi)與圖書(shū)是一對(duì)多的關(guān)系,每個(gè)分類(lèi)下具有多個(gè)圖書(shū),每個(gè)圖書(shū)對(duì)應(yīng)一個(gè)分類(lèi)。在添加圖書(shū)時(shí)需要對(duì)所屬分類(lèi)進(jìn)行指定。
后臺(tái)系統(tǒng)提供圖書(shū)的查詢、添加、修改、刪除功能,每個(gè)圖書(shū)具有圖書(shū)名稱(chēng)、作者、價(jià)格、圖書(shū)圖片、分類(lèi)、詳細(xì)介紹的信息。使用FastDFS作為圖片服務(wù)器供圖書(shū)圖片的上傳下載。
訂單管理功能可對(duì)所有用戶的訂單進(jìn)行查詢,以及對(duì)訂單狀態(tài)的管理。
投訴管理功能可對(duì)用戶的投訴進(jìn)行查看及處理。
前臺(tái)系統(tǒng)提供給普通用戶使用,用戶可在前臺(tái)系統(tǒng)中進(jìn)行注冊(cè)、瀏覽圖書(shū)商品、查看購(gòu)物車(chē)、查看訂單、投訴等操作。
用戶在未登錄時(shí)可以注冊(cè)、瀏覽圖書(shū)商品,在登錄之后才可以進(jìn)行更多的操作。
用戶可以查詢所有圖書(shū)或者按分類(lèi)查詢圖書(shū),在登陸之后,可以將圖書(shū)添加進(jìn)購(gòu)物車(chē)或者直接下訂單購(gòu)買(mǎi)。
用戶可以對(duì)購(gòu)物車(chē)進(jìn)行查看,并可將購(gòu)物車(chē)中的圖書(shū)進(jìn)行批量地購(gòu)買(mǎi)或者刪除。
在用戶對(duì)圖書(shū)進(jìn)行購(gòu)買(mǎi)操作之后,會(huì)生成相應(yīng)的訂單,訂單包含圖書(shū)的基本信息、購(gòu)買(mǎi)數(shù)量、支付金額、訂單狀態(tài)。用戶可以支付訂單、退款、確認(rèn)收貨或者刪除訂單,對(duì)訂單進(jìn)行操作之后,訂單的狀態(tài)也會(huì)發(fā)生相應(yīng)的變化。
用戶對(duì)圖書(shū)或者服務(wù)不滿意可以使用投訴功能進(jìn)行相應(yīng)的反饋。
前臺(tái)系統(tǒng)相較于后臺(tái)系統(tǒng)會(huì)有更高的訪問(wèn)量與并發(fā)量,涉及大量數(shù)據(jù)庫(kù)操作時(shí)會(huì)很耗費(fèi)時(shí)間。因此可以使用非關(guān)系型數(shù)據(jù)庫(kù)Redis作為業(yè)務(wù)層與數(shù)據(jù)層之間的緩存。Redis作為非關(guān)系型數(shù)據(jù)庫(kù),比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)效率要高出很多,處理大量數(shù)據(jù)時(shí)性能有明顯優(yōu)勢(shì)。業(yè)務(wù)層需要數(shù)據(jù)時(shí)首先訪問(wèn)Redis,如果有數(shù)據(jù)就直接返回,如果沒(méi)有再向關(guān)系型數(shù)據(jù)庫(kù)中查找數(shù)據(jù),然后返回給業(yè)務(wù)層并向Redis中添加數(shù)據(jù)緩存。
搜索系統(tǒng)提供接口給前臺(tái)系統(tǒng),為用戶提供圖書(shū)查找的服務(wù)。搜索功能需要對(duì)用戶輸入的關(guān)鍵詞進(jìn)行復(fù)雜的查詢,使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)查詢方式效率極為低下,因此需要Solr技術(shù)對(duì)數(shù)據(jù)進(jìn)行快速索引。
Solr是一款實(shí)現(xiàn)快速搜索的搜索引擎系統(tǒng)。使用Solr可以高效地對(duì)全站的圖書(shū)信息通過(guò)關(guān)鍵詞進(jìn)行查找。在使用前需要為Solr配置中文解析器,并設(shè)置分詞方法與圖書(shū)信息的搜索域。然后將圖書(shū)信息導(dǎo)入到Solr索引庫(kù)中,就可以進(jìn)行快速搜索。
用戶在搜索框中輸入關(guān)鍵詞開(kāi)始搜索,服務(wù)端在Solr索引庫(kù)中根據(jù)事先設(shè)置的分詞以及搜索域進(jìn)行查找,有圖書(shū)信息與之匹配將返回給瀏覽器顯示。
將登陸系統(tǒng)獨(dú)立出來(lái)可以為管理員和用戶提供一個(gè)統(tǒng)一的接口。用戶信息在數(shù)據(jù)庫(kù)中有一個(gè)字段來(lái)標(biāo)識(shí)用戶身份。輸入用戶名密碼之后,服務(wù)端會(huì)到數(shù)據(jù)庫(kù)中進(jìn)行比對(duì),如果輸入錯(cuò)誤,返回錯(cuò)誤信息。如果輸入正確,從數(shù)據(jù)庫(kù)中得到用戶信息后,查看用戶身份字段的值,如果是普通用戶,跳轉(zhuǎn)到前臺(tái)網(wǎng)頁(yè)并向該服務(wù)器傳輸用戶信息保存到Session。如果是管理員用戶,跳轉(zhuǎn)到后臺(tái)網(wǎng)頁(yè)并向該服務(wù)器傳輸用戶信息保存到Session。
本文介紹了在Java平臺(tái)下進(jìn)行SOA架構(gòu)電商網(wǎng)站的開(kāi)發(fā)的基本設(shè)計(jì)與思路,從基本原理到實(shí)現(xiàn)技術(shù)作了具體的闡述。以圖書(shū)商城為例給出了網(wǎng)站設(shè)計(jì)的大體方法,在SOA架構(gòu)下將系統(tǒng)劃分為多個(gè)子系統(tǒng),每個(gè)子系統(tǒng)實(shí)現(xiàn)自己的相應(yīng)功能,并且服務(wù)層與表現(xiàn)層分離實(shí)現(xiàn)松散的耦合,并對(duì)每個(gè)子系統(tǒng)的功能設(shè)計(jì)作了具體闡述。