成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

綜合性B2C電商平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)

2023-02-20    分類: 網(wǎng)站建設(shè)

【摘要】
近些年,隨著當(dāng)今世界的互聯(lián)網(wǎng)發(fā)展,為生活的方方面面提供了極大的便利。其中最為典型的電商借著這股東風(fēng)已經(jīng)成為了社會(huì)不可或缺的一環(huán)。相關(guān)行業(yè)也在不斷拓展和完善,對(duì)經(jīng)濟(jì)社會(huì)生活產(chǎn)生了極大的促進(jìn),同時(shí)也成為我國(guó)經(jīng)濟(jì)發(fā)展的重要一環(huán)。
電商平臺(tái)的使用,通過(guò)網(wǎng)上購(gòu)物為人們?cè)谏钌咸峁O大的便利,使人們不受時(shí)間和空間的限制,在家里就能實(shí)現(xiàn)購(gòu)物。同時(shí)對(duì)于商家來(lái)說(shuō),商家可以入駐平臺(tái)實(shí)現(xiàn)商品發(fā)布和出售,在線上實(shí)現(xiàn)訂單的過(guò)程,而只需要通過(guò)線下發(fā)貨和物流信息的發(fā)布完成訂單,能極大增加商家的銷售渠道和在時(shí)間上的便利。
此平臺(tái)的的研究工作中,結(jié)合實(shí)際情況對(duì)比,在使用分布式服務(wù)架構(gòu)(RPC)的前提下,結(jié)合服務(wù)治理框架dubbo,zookeeper作為注冊(cè)中心,并結(jié)合使用了Spring、SpringMvc、Mybatis的SSM框架。借助Linux虛擬機(jī),搭載各類第三方技術(shù),比如vsftpd文件上傳服務(wù)器;nginx反向代理,負(fù)載均衡;redis集群配置主從復(fù)用,讀寫分離,搭建主備切換;solr搜索引擎和sso單點(diǎn)登錄等。
利用相關(guān)技術(shù)開(kāi)發(fā)平臺(tái),先后實(shí)現(xiàn)完成了后臺(tái)管理系統(tǒng)和前臺(tái)門戶系統(tǒng)。后臺(tái)完成簡(jiǎn)單的商品管理功能,權(quán)限屬于管理員。前臺(tái)則實(shí)現(xiàn)完成了基本的用戶注冊(cè)登錄;首頁(yè)商品的瀏覽和搜索;經(jīng)典的電商平臺(tái)購(gòu)物車功能;訂單核對(duì)提交訂單;支付寶在線支付功能;前后臺(tái)的單點(diǎn)登錄功能。前后臺(tái)共同構(gòu)成了一個(gè)完整的B2C電商平臺(tái)。
就本平臺(tái)的功能和測(cè)試結(jié)果來(lái)看,綜合性B2C電商平臺(tái)滿足了預(yù)期的用戶和管理功能需求,實(shí)現(xiàn)了平臺(tái)的架構(gòu)的解耦分層,良好的高并發(fā)和高可用性能。測(cè)試結(jié)果證明了分布式架構(gòu)在電商平臺(tái)中的高效性和可行性,獲得了應(yīng)有的使用價(jià)值。
【關(guān)鍵詞】分布式架構(gòu);SSM;Linux;電商平臺(tái)
[錨點(diǎn)] 1前言
[錨點(diǎn)] [錨點(diǎn)] 1.1 課題的背景近些年,隨著當(dāng)今世界的互聯(lián)網(wǎng)發(fā)展,為生活的方方面面提供了極大的便利。其中最為典型的電商借著這股東風(fēng)已經(jīng)成為了社會(huì)不可或缺的一環(huán)。相關(guān)行業(yè)也在不斷拓展和完善,對(duì)經(jīng)濟(jì)社會(huì)生活產(chǎn)生了極大的促進(jìn),同時(shí)也成為我國(guó)經(jīng)濟(jì)發(fā)展的重要一環(huán)。1.2 目的和意義電商平臺(tái)的使用,通過(guò)網(wǎng)上購(gòu)物為人們?cè)谏钌咸峁O大的便利,使人們不受時(shí)間和空間的限制,在家里就能實(shí)現(xiàn)購(gòu)物。同時(shí)對(duì)于商家來(lái)說(shuō),商家可以入駐平臺(tái)實(shí)現(xiàn)商品發(fā)布和出售,在線上實(shí)現(xiàn)訂單的過(guò)程,而只需要通過(guò)線下發(fā)貨和物流信息的發(fā)布完成訂單,能極大增加商家的銷售渠道和在時(shí)間上的便利。
電商平臺(tái)給人們的生活帶來(lái)了極大的變化,極大的發(fā)揮了消費(fèi)水平,促進(jìn)了經(jīng)濟(jì)發(fā)展。在電商平臺(tái)上購(gòu)物也不受時(shí)間和空間上的影響,方便業(yè)務(wù)管理,也解決了消費(fèi)者的購(gòu)物問(wèn)題。1.3 國(guó)內(nèi)外現(xiàn)狀和發(fā)展趨勢(shì)網(wǎng)絡(luò)營(yíng)銷的熱潮已經(jīng)席卷全球,國(guó)內(nèi)外企業(yè)的生存競(jìng)爭(zhēng)空間已經(jīng)從傳統(tǒng)市場(chǎng)轉(zhuǎn)向網(wǎng)絡(luò)空間市場(chǎng)。網(wǎng)上購(gòu)物已經(jīng)滲透到國(guó)內(nèi)外市場(chǎng)的方方面面,極大的改變了人們的工作和生活方式。天貓雙十一成交額的逐年變化是一個(gè)好的提現(xiàn),從2009年的0.5億元到現(xiàn)在2021年的5403億元,實(shí)現(xiàn)了大跳躍。2021年上半年我國(guó)網(wǎng)絡(luò)購(gòu)物用戶規(guī)模為8.12億人,占網(wǎng)民整體的80.3%。人們的生活已經(jīng)離不開(kāi)網(wǎng)上購(gòu)物,特別是在如今的疫情時(shí)期,網(wǎng)絡(luò)電商平臺(tái)的作用更加重要。
在如今互聯(lián)網(wǎng)的發(fā)展帶動(dòng)下,足不出戶的網(wǎng)上購(gòu)物基本成為必需。在未來(lái)會(huì)有越來(lái)越多的人們加入這個(gè)行業(yè)。網(wǎng)絡(luò)電商平臺(tái)也將會(huì)朝著全球化,個(gè)性化,專業(yè)化的趨勢(shì)發(fā)展和改善,以至于改變?nèi)虻慕?jīng)濟(jì)結(jié)構(gòu),前途不可估量。1.4 論文架構(gòu)本論文通過(guò)七個(gè)部分詳細(xì)講述綜合性B2C電商平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)。
第一部分前言,分析課題背景和國(guó)內(nèi)外現(xiàn)狀,說(shuō)明目的和意義,表明研究?jī)?nèi)容,簡(jiǎn)述本文架構(gòu)。
第二部分電商平臺(tái)的相關(guān)技術(shù),分別對(duì)綜合性B2C電商平臺(tái)所運(yùn)用到的相關(guān)技術(shù)加以介紹。
第三部分是電商平臺(tái)的需求分析,先后分析功能性和非功能性需求,且加以用例圖描述。
第四部分是電商平臺(tái)概要設(shè)計(jì),通過(guò)第三部門的需求分析對(duì)平臺(tái)從架構(gòu)搭建到各類服務(wù)組件,從個(gè)功能模塊設(shè)計(jì)到數(shù)據(jù)庫(kù)設(shè)計(jì)。
第五部分是電商平臺(tái)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn),從平臺(tái)架構(gòu)詳細(xì)設(shè)計(jì)到平臺(tái)功能詳細(xì)設(shè)計(jì),展示核心功能接口和部分核心代碼,且附上最終的頁(yè)面效果。
第六部分是電商平臺(tái)測(cè)試,對(duì)平臺(tái)進(jìn)行細(xì)致的功能測(cè)試。
綜上所有,在論文的最后部分做了相關(guān)工作的總結(jié)與展望。
[錨點(diǎn)] 2 電商平臺(tái)的相關(guān)技術(shù)
微服務(wù)架構(gòu)
[錨點(diǎn)] 2.1分布式服務(wù)架構(gòu)(RPC)互聯(lián)網(wǎng)的快速發(fā)展下,傳統(tǒng)的垂直應(yīng)用架構(gòu)已經(jīng)無(wú)法滿足日漸壯大中的網(wǎng)站規(guī)模的需要,分布式服務(wù)和流動(dòng)計(jì)算架構(gòu)就成如今新的血液,甚至于微服務(wù)架構(gòu)。
圖2-1開(kāi)發(fā)模式的演變
傳統(tǒng)的單一應(yīng)用架構(gòu),在網(wǎng)站流量很少的情況下,雖然只需要一個(gè)應(yīng)用,但是缺點(diǎn)也很明顯。由于所有功能都部署在一起,即使成本很低,但是在應(yīng)用功能不斷增多的情況下,隨著代碼量的不斷增大,也變得越來(lái)越難維護(hù)。
垂直應(yīng)用架構(gòu),為了提高效率將應(yīng)用分開(kāi)成若干個(gè)不相關(guān)的應(yīng)用。但是缺點(diǎn)也依然是明顯的,在這個(gè)架構(gòu)下,相同邏輯的代碼需要反復(fù)復(fù)制,不得復(fù)用。
分布式服務(wù)架構(gòu),隨著垂直應(yīng)用的增加,各個(gè)應(yīng)用之間的交互是不可避免的。分布式服務(wù)架構(gòu)分離獨(dú)立出核心業(yè)務(wù)服務(wù),構(gòu)成一個(gè)穩(wěn)定的服務(wù)中心,前端的應(yīng)用程序能夠迅速應(yīng)對(duì)變化的市場(chǎng)需求。分布式服務(wù)架構(gòu)的缺點(diǎn)是,服務(wù)的增加,各服務(wù)地址管理成為必要,調(diào)用依賴關(guān)系也更為復(fù)雜,服務(wù)狀態(tài)不好管理,沒(méi)法根據(jù)實(shí)際服務(wù)情況進(jìn)行動(dòng)態(tài)管理。
因此,本平臺(tái)的開(kāi)發(fā),在分布式服務(wù)架構(gòu)的基礎(chǔ)上,為了解決其缺點(diǎn),結(jié)合服務(wù)治理框架dubbo,zookeeper作為注冊(cè)中心,以達(dá)到服務(wù)統(tǒng)一調(diào)度管理的目的,解決遠(yuǎn)程調(diào)用的難題,開(kāi)發(fā)也從面向?qū)ο筇D(zhuǎn)到了面向服務(wù),比以往更加的松耦合,而實(shí)際上這個(gè)時(shí)候已經(jīng)成為了一個(gè)微服務(wù)[9]架構(gòu)。
[錨點(diǎn)] 2.2 RPC協(xié)議(Remote Procedure Call Protocol)即不需要理解底層網(wǎng)絡(luò)技術(shù),而是通過(guò)網(wǎng)絡(luò)在遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求程序的遠(yuǎn)程過(guò)程調(diào)用協(xié)議。RPC協(xié)議假設(shè)存在若干傳輸協(xié)議,諸如tcp或udp,在通信程序之間傳輸信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)協(xié)議模型中,RPC實(shí)現(xiàn)了傳輸層和應(yīng)用層之間的跨界,從而有助于開(kāi)發(fā)包含網(wǎng)絡(luò)分布式多程序的應(yīng)用。
RPC是客戶端/服務(wù)器模式。客戶端請(qǐng)求程序,服務(wù)器提供程序??蛻舳苏{(diào)用進(jìn)程,向服務(wù)進(jìn)程發(fā)出調(diào)用數(shù)據(jù),并等待數(shù)據(jù)的響應(yīng)。服務(wù)器在呼叫數(shù)據(jù)到達(dá)之前,最初保持睡眠狀態(tài)。一個(gè)調(diào)用數(shù)據(jù)到達(dá)的情況下,服務(wù)器得到進(jìn)程參數(shù),結(jié)算結(jié)果,應(yīng)答數(shù)據(jù)返還,其次等待下一個(gè)數(shù)據(jù),最終客戶端接收應(yīng)答數(shù)據(jù)和結(jié)果,繼續(xù)執(zhí)行調(diào)用。
圖2-2RPC過(guò)程處理示例圖
從上圖中可以清晰的看出RPC的執(zhí)行流程。
[錨點(diǎn)] 2.3服務(wù)治理框架Dubbo和注冊(cè)中心Zookeeper服務(wù)治理框架Dubbo[3]:
Dubbo是Alibaba開(kāi)發(fā)推出的一個(gè)遠(yuǎn)程調(diào)用框架。Dubbo具有基于接口的遠(yuǎn)程調(diào)用,負(fù)載均衡和容錯(cuò),服務(wù)的自動(dòng)注冊(cè)和發(fā)現(xiàn)三個(gè)核心功能。在阿里巴巴內(nèi)部,Dubbo得到了廣泛的應(yīng)用,很多大型互聯(lián)網(wǎng)公司也在用,比如考拉,當(dāng)當(dāng),京東等等。
Dubbo Architecture:
圖2-3Dubbo工作原理示例圖
節(jié)點(diǎn)角色說(shuō)明:
Provider:服務(wù)提供方
Consumer:服務(wù)消費(fèi)方
Register:注冊(cè)中心
Moniter:監(jiān)控中心
Container:服務(wù)運(yùn)行容器
調(diào)用關(guān)系說(shuō)明:
1.服務(wù)容器負(fù)責(zé)啟動(dòng)、加載、運(yùn)行服務(wù)提供者
2.服務(wù)提供者啟動(dòng)并向注冊(cè)中心注冊(cè)自身提供的服務(wù)
3.服務(wù)消費(fèi)者啟動(dòng)并向注冊(cè)中心訂閱自己所需的服務(wù)
4.注冊(cè)中心列表給消費(fèi)者返回提供者地址,如果有所變動(dòng)注冊(cè)中心會(huì)基于長(zhǎng)連接發(fā)送變動(dòng)數(shù)據(jù)給消費(fèi)者
5.基于軟負(fù)載均衡算法,消費(fèi)者在地址列表里選擇一臺(tái)提供者調(diào)用,如果失敗則調(diào)用另一臺(tái)
6.服務(wù)提供者和服務(wù)消費(fèi)者在內(nèi)存中累計(jì)的調(diào)用次數(shù)和調(diào)用時(shí)間定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)至監(jiān)控中心
注冊(cè)中心Zookeeper:
Zookeeper作為分布式應(yīng)用程序協(xié)調(diào)服務(wù),開(kāi)源實(shí)現(xiàn)了谷歌的Chubby,所提供的功能有:分布式同步,配置維護(hù),域名服務(wù),租服務(wù)等,是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件。
在本平臺(tái)中,Zookeeper身為服務(wù)注冊(cè)中心,注冊(cè)著編寫的服務(wù)供客戶端遠(yuǎn)程調(diào)用。
Zookeeper注冊(cè)中心是Dubbo官方推薦,負(fù)責(zé)服務(wù)地址的注冊(cè)和發(fā)現(xiàn),也就是目錄服務(wù)。適合作為Dubbo的服務(wù)注冊(cè)中心在于其適合生產(chǎn)環(huán)境且工業(yè)強(qiáng)度高。
[錨點(diǎn)] 2.4 Spring、SpringMVC和Mybatis框架
[錨點(diǎn)] 2.4.1Spring框架Spring是為了解決企業(yè)級(jí)應(yīng)用開(kāi)發(fā)的復(fù)雜性,簡(jiǎn)便Java開(kāi)發(fā)而誕生的,是一個(gè)由Rod Johnson開(kāi)發(fā)的為開(kāi)發(fā)者提供一站式應(yīng)用開(kāi)發(fā)平臺(tái)的輕量級(jí)開(kāi)源Java框架。Spring為Java應(yīng)用程序開(kāi)發(fā)提供全面的基礎(chǔ)架構(gòu)支持,所以Java開(kāi)發(fā)者可以致力于應(yīng)用程序的開(kāi)發(fā)。在JavaEE開(kāi)發(fā)中,支持POJO和JavaBean開(kāi)發(fā)方式,使應(yīng)用面向接口開(kāi)發(fā),充分支持OO(面向?qū)ο螅┰O(shè)計(jì)方法;Spring通過(guò)IOC容器實(shí)現(xiàn)對(duì)象耦合關(guān)系的管理,并實(shí)現(xiàn)依賴反轉(zhuǎn),將對(duì)象之間的依賴關(guān)系交給IOC容器,實(shí)現(xiàn)解耦。
Spring豐富的功能給企業(yè)級(jí)開(kāi)發(fā)提供極大便利。依賴注入(DI)和面向切面編程(AOP)是這些功能的底層依賴。Spring框架的核心是IOC容器和AOP模塊。通過(guò)IOC容器管理POJO對(duì)象以及他們之間的耦合關(guān)系;通過(guò)AOP以動(dòng)態(tài)非侵入的方式增強(qiáng)服務(wù),把遍布于應(yīng)用各層的功能分離出來(lái)形成可重用的功能組件。
圖2-4 Spring5模塊結(jié)構(gòu)圖
[錨點(diǎn)] 2.4.2 SpringMVC框架Spring MVC[10]是一個(gè)基于Java的輕量級(jí)web框架,它實(shí)現(xiàn)了請(qǐng)求驅(qū)動(dòng)型MVC設(shè)計(jì)模式。通過(guò)分離模型視圖控制器,解耦web層的職責(zé),將復(fù)雜的web應(yīng)用程序劃分為幾個(gè)具有清晰邏輯的部分,簡(jiǎn)化了開(kāi)發(fā),減少了錯(cuò)誤,促進(jìn)了團(tuán)隊(duì)開(kāi)發(fā)人員之間的合作。
Spring MVC中有許多重要組件,如下:
(1)前端控制器DispatcherServlet
作用:接收請(qǐng)求、響應(yīng)結(jié)果,相當(dāng)于轉(zhuǎn)發(fā)器,有了DispatcherServlet就減少了其它組件之間的耦合度。
(2)處理器映射器HandlerMapping
作用:根據(jù)請(qǐng)求的URL來(lái)查找Handler
(3)處理器適配器HandlerAdapter
(4)處理器Handler(需要程序員開(kāi)發(fā))
(5)視圖解析器ViewResolver(不需要程序員開(kāi)發(fā))
作用:進(jìn)行視圖的解析,根據(jù)視圖邏輯名解析成真正的視圖(view)
(6)視圖View(需要程序員開(kāi)發(fā)jsp)
View是一個(gè)接口,它的實(shí)現(xiàn)類支持不同的視圖類型(jsp,freemarker,pdf等等)
Spring MVC的工作流程:
圖2-5 Spring MVC工作流程圖
[錨點(diǎn)] 2.4.3 Mybatis框架Mybatis是一款優(yōu)秀的持久層框架,一個(gè)半 ORM(對(duì)象關(guān)系映射)框架,它支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。Mybatis避免了幾乎所有的 JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。
Mybatis在查詢關(guān)聯(lián)對(duì)象或關(guān)聯(lián)集合對(duì)象時(shí),需要手動(dòng)編寫sql來(lái)完成,所以,稱之為半自動(dòng)ORM映射工具。ORM(Object Relational Mapping),對(duì)象關(guān)系映射,是一種為了解決關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)與簡(jiǎn)單Java對(duì)象(POJO)的映射關(guān)系的技術(shù)。Hibernate屬于全自動(dòng)ORM映射工具,使用Hibernate查詢關(guān)聯(lián)對(duì)象或者關(guān)聯(lián)集合對(duì)象時(shí),可以根據(jù)對(duì)象關(guān)系模型直接獲取,所以它是全自動(dòng)的。
Mybatis工作原理:
圖2-6 Mybatis工作原理流程圖
[錨點(diǎn)] 2.5 Vsftpd文件服務(wù)器和Nginx服務(wù)器Vsftpd文件服務(wù)器:
Vsftpd是一個(gè)運(yùn)行在Unix類操作系統(tǒng)上的服務(wù)器,也能運(yùn)行在比如Linux[1],Solaris,Bsd,Irix上。本系統(tǒng)使用中,Vsftpd運(yùn)行在Linux上,它 相比于其他的ftp服務(wù)器提供了更多的支持,也是Linux發(fā)行版里廣為推薦的ftp服務(wù)器程序。
本平臺(tái)使用Vsftpd文件上傳服務(wù)器,將文件(圖片)上傳至該服務(wù)器上,進(jìn)行統(tǒng)一的獨(dú)立管理,需要拿到服務(wù)器上文件(圖片)的時(shí)候,只需要攜帶地址發(fā)出請(qǐng)求即可。
Nginx服務(wù)器[8]:
Nginx是一個(gè)高性能、輕量級(jí)的HTTP和反向代理web服務(wù)器。它也是一個(gè)電子郵件服務(wù)器,提供IMAP / POP3 / SMTP服務(wù),由俄羅斯人Igor sesoyev開(kāi)發(fā),源代碼以類似BSD許可證的形式發(fā)布。穩(wěn)定性高,系統(tǒng)資源消耗低,配置文件簡(jiǎn)單,功能集豐富是其優(yōu)點(diǎn),在中國(guó)大陸得到了廣泛的應(yīng)用。
正因?yàn)槠涓咝阅艿姆聪虼砗拓?fù)載均衡,本平臺(tái)中選擇使用Nginx,并將其搭載在Linux上,配置了三臺(tái)Tomcat[2]服務(wù)器的反向代理負(fù)載均衡。
[錨點(diǎn)] 2.6 Redis緩存數(shù)據(jù)庫(kù)Redis[5]是一個(gè)ANSI C語(yǔ)言編寫,支持網(wǎng)絡(luò),可基于內(nèi)存也可持久化的日志型,Key-Value數(shù)據(jù)庫(kù),而且提供了許多語(yǔ)言的API,是一個(gè)開(kāi)源的非關(guān)系型數(shù)據(jù)庫(kù)。Redis的誕生實(shí)際上是因?yàn)镸ysql數(shù)據(jù)庫(kù)的低性能,所以一家意大利公司的創(chuàng)始人Salvatore Sanfilippo為了避免這一問(wèn)題而親自開(kāi)發(fā)了Redis緩存數(shù)據(jù)庫(kù),事實(shí)證明,Redis的高性能是Mysql所無(wú)法匹及的。
Redis所支持的語(yǔ)言有很多,比如常用的Java,C,C++,Python,Php,Go等等。在數(shù)據(jù)類型上,Redis支持string,set,hash,list,sorted set這五種。
本平臺(tái)中Redis正是用于數(shù)據(jù)庫(kù)緩存,存儲(chǔ)前臺(tái)數(shù)據(jù)量龐大的數(shù)據(jù),是介于持久層和服務(wù)層之間的,配置了主備切換,讀寫分離。比如前臺(tái)商品分類欄,當(dāng)刷新頁(yè)面時(shí),會(huì)先從Redis緩存中查詢數(shù)據(jù),若存在緩存則返回?cái)?shù)據(jù),若不存在緩存,這個(gè)時(shí)候Redis便會(huì)訪問(wèn)Mysql數(shù)據(jù)庫(kù)得到數(shù)據(jù)返回,并在Redis上相應(yīng)緩存。以這種方式打到減緩Mysql數(shù)據(jù)庫(kù)壓力的目的,提升商城平臺(tái)的整體性能。
[錨點(diǎn)] 2.7 Solr搜索引擎Apache Solr是一個(gè)獨(dú)立的企業(yè)級(jí)搜索應(yīng)用服務(wù)器,其對(duì)外提供類似Web-service的API接口。用戶經(jīng)過(guò)HTTP請(qǐng)求,且得到XML格式的返回結(jié)果,而且通過(guò)用類似REST的HTTP API保證我們能可以使用Solr通過(guò)幾乎任何編程語(yǔ)言。在如今的生活里,搜索引擎的使用不可或缺,各式各樣的網(wǎng)站往往都有搜索功能,而搜索伴隨的是相當(dāng)龐大的資源消耗,這對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō)是相當(dāng)沉重的,沉重的加載難免會(huì)拖慢甚至拖垮我們的應(yīng)用,因此搜索引擎為我們解決了這一問(wèn)題。
Solr實(shí)際上是基于Lucene封裝的,Lucene同樣是一個(gè)搜索引擎工具,Solr和Lucene兩者的索引庫(kù)也是公用的。不過(guò)因?yàn)镾olr是基于Lucene封裝的,因此Solr的操作更加的簡(jiǎn)單人性化,它是一個(gè)企業(yè)級(jí)的開(kāi)源搜索平臺(tái),廣泛被用于構(gòu)建搜索應(yīng)用程序,是建立在Lucene之上的,具有高速可擴(kuò)展以及快速的性能。
相比于Mysql,Solr是一個(gè)不同的產(chǎn)品,雖然兩者都有索引,但是索引的文件并不是同種文件,前者的查詢和后者的搜索也不是一個(gè)概念。Mysql為Solr提供了索引數(shù)據(jù)的來(lái)源,Solr從Mysql中存儲(chǔ)的數(shù)據(jù)進(jìn)行分析得出索引庫(kù)。
[錨點(diǎn)] 2.8 SSO單點(diǎn)登錄SSO單點(diǎn)登錄是一種流行的企業(yè)業(yè)務(wù)集成解決方案。SSO是在多個(gè)應(yīng)用程序系統(tǒng)中定義的。用戶可以通過(guò)一次登錄訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。在實(shí)現(xiàn)單點(diǎn)登錄時(shí),所有應(yīng)用系統(tǒng)都需要共享一個(gè)身份認(rèn)證系統(tǒng),這是單點(diǎn)登錄的前提條件之一。應(yīng)用系統(tǒng)應(yīng)該能夠識(shí)別并提取票據(jù),當(dāng)用戶首次登錄時(shí)能夠識(shí)別登錄的用戶,而認(rèn)證系統(tǒng)應(yīng)該對(duì)票據(jù)進(jìn)行驗(yàn)證,驗(yàn)證其合法性。
圖2-7 SSO實(shí)現(xiàn)原理圖
如果用戶第一次訪問(wèn)應(yīng)用系統(tǒng)時(shí)沒(méi)有登錄,則會(huì)被定向到認(rèn)證系統(tǒng)進(jìn)行登錄。首先,根據(jù)用戶輸入的登錄信息對(duì)用戶進(jìn)行身份驗(yàn)證。如果認(rèn)證通過(guò),經(jīng)過(guò)身份驗(yàn)證票將返回給用戶,然后用戶可以使用這張票作為身份驗(yàn)證票訪問(wèn)其他應(yīng)用系統(tǒng),收到票后,應(yīng)用系統(tǒng)將其發(fā)送給驗(yàn)證確認(rèn)其合法性的驗(yàn)證系統(tǒng)。一旦通過(guò)了驗(yàn)證,用戶就可以訪問(wèn)其他系統(tǒng)而無(wú)需再次登錄。
[錨點(diǎn)] 2.9 RabbitMQ消息隊(duì)列消息隊(duì)列(MQ)在計(jì)算機(jī)科學(xué)里是一種進(jìn)程間通信或同一進(jìn)程的不同線程間的通信方式,在軟件里處理一系列來(lái)自用戶的輸入。MQ的模型是消費(fèi)者-生產(chǎn)者,一端不斷寫入消息到消息隊(duì)列中,另一端訂閱或讀取隊(duì)列中的消息,MQ遵循了AMQP協(xié)議,本平臺(tái)選用的RabbitMQ是眾多消息隊(duì)列開(kāi)源實(shí)現(xiàn)中的一個(gè)。
RabbitMQ是一個(gè)開(kāi)源的AMQP實(shí)現(xiàn),以Erlang語(yǔ)言編寫的服務(wù)器端,支持?jǐn)?shù)種客戶端,比如常用的JAVA,PYTHON,RUBY,C等等,同時(shí)也支持AJAX。因?yàn)槠湓谝子眯?,擴(kuò)展性,高可用性等方面表現(xiàn)出色,所以被廣泛應(yīng)用于分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)信息。
使用RabbitMQ的原因有很多,比如基于AMQP協(xié)議,高并發(fā),高性能,高可用,支持插件和多語(yǔ)音,由于被廣泛使用,所以有強(qiáng)大的社區(qū)支持。對(duì)于AMQP,這是一個(gè)高級(jí)消息隊(duì)列協(xié)議,面向消息,隊(duì)列,路由,可靠性,安全,是應(yīng)用層協(xié)議的一個(gè)開(kāi)放標(biāo)準(zhǔn),為面向消息的中間件而設(shè)計(jì)。
[錨點(diǎn)] 2.10 其他第三方技術(shù)支付寶開(kāi)放平臺(tái)(Alipay):
使用支付寶開(kāi)放平臺(tái)官方提供的支付寶支付API實(shí)現(xiàn)商城的在線支付,選擇的是平臺(tái)里的沙箱環(huán)境實(shí)現(xiàn)支付寶在線支付的集成。
圖2-8 支付寶開(kāi)放平臺(tái)官方主頁(yè)
郵件發(fā)送:
郵件發(fā)送上選擇的是網(wǎng)易163郵箱,通過(guò)開(kāi)啟網(wǎng)易163郵箱里的SMTP服務(wù),然后在系統(tǒng)里編程開(kāi)發(fā)實(shí)現(xiàn)注冊(cè)成功后郵件的發(fā)送,發(fā)送方是網(wǎng)易163郵箱,接收方是自己輸入的存在的郵箱,不限于只是網(wǎng)易163郵箱。
圖2-9 163郵箱設(shè)置截圖
GEETEST極驗(yàn)驗(yàn)證:
GEETEST極驗(yàn)驗(yàn)證在計(jì)算機(jī)領(lǐng)域里用于區(qū)別機(jī)器人和自然人,通過(guò)官方提供的方式進(jìn)行簡(jiǎn)單集成,就能給開(kāi)發(fā)者提供安全、便攜的云端驗(yàn)證服務(wù)。
圖2-10 GEETEST極驗(yàn)驗(yàn)證官方行為驗(yàn)證截圖
[錨點(diǎn)] 3 電商平臺(tái)的需求分析在本章中,將會(huì)對(duì)本電商平臺(tái)的需求進(jìn)行分析,從功能需求和非功能需求兩個(gè)角度分析。功能需求是從用戶的角度出發(fā)分析各個(gè)平臺(tái)功能的需求和操作流程,非功能需求則是分析用戶和平臺(tái)性能上的使用體驗(yàn),安全可靠性等。
這是本次平臺(tái)開(kāi)發(fā)最初的一環(huán)也是最重要的,需求分析能為接下去的平臺(tái)開(kāi)發(fā)提供藍(lán)圖,給平臺(tái)開(kāi)發(fā)設(shè)計(jì)做到極大的便利。
[錨點(diǎn)] 3.1 平臺(tái)功能需求簡(jiǎn)述后臺(tái)管理系統(tǒng)和前臺(tái)門戶系統(tǒng)。后臺(tái)完成簡(jiǎn)單的商品管理功能,權(quán)限屬于管理員。前臺(tái)則實(shí)現(xiàn)完成了基本的用戶注冊(cè)登錄;首頁(yè)商品的瀏覽和搜索;訂單核對(duì)提交訂單;前后臺(tái)的單點(diǎn)登錄功能;在購(gòu)物車?yán)锾峤挥唵翁顚懶枰男畔ⅲ⑻D(zhuǎn)支付頁(yè)面完成在線支付。如圖所示:
圖3-1 系統(tǒng)功能劃分圖
[錨點(diǎn)] 3.2 平臺(tái)功能需求分析
[錨點(diǎn)] 3.2.1 注冊(cè)登錄功能需求分析注冊(cè)登錄功能是電商平臺(tái)上的一個(gè)基礎(chǔ)功能,注冊(cè)用戶的信息會(huì)被得到保存以供平臺(tái)為用戶提供相應(yīng)的服務(wù)。在此平臺(tái)里,未注冊(cè)的用戶身為游客,不擁有查看或添加至購(gòu)物車,提交訂單,在線支付等功能。注冊(cè)登錄后擁有使用前臺(tái)門戶系統(tǒng)的所有功能的權(quán)限,具體如下:
未注冊(cè)用戶:進(jìn)入首頁(yè),需要注冊(cè)時(shí)可以點(diǎn)擊“免費(fèi)注冊(cè)”按鈕跳轉(zhuǎn)至注冊(cè)頁(yè)面,填寫相應(yīng)的正確信息之后,進(jìn)行極驗(yàn)驗(yàn)證和勾選同意協(xié)議最后點(diǎn)擊進(jìn)行注冊(cè),信息錯(cuò)誤的話給予提示以重新填寫注冊(cè)。注冊(cè)成功后在頁(yè)面上給用戶反饋提示“注冊(cè)成功”并跳轉(zhuǎn)登錄頁(yè)面,后臺(tái)發(fā)送注冊(cè)郵件到對(duì)應(yīng)的用戶郵箱。
已注冊(cè)用戶:有兩種方式可以進(jìn)入到登錄頁(yè)面,第一種是新注冊(cè)完成后的自動(dòng)跳轉(zhuǎn)至登錄頁(yè)面,第二種則是可以在平臺(tái)首頁(yè)上點(diǎn)擊“登錄”按鈕跳轉(zhuǎn)至登錄頁(yè)面。進(jìn)入登錄頁(yè)面之后,用戶根據(jù)頁(yè)面提示輸入用戶名和密碼,填寫正確的話提示“登錄成功”并跳轉(zhuǎn)至平臺(tái)首頁(yè);填寫錯(cuò)誤的話則提示“用戶名或密碼錯(cuò)誤”,重新輸入再次登錄。如圖所示:
[錨點(diǎn)] 圖3-2注冊(cè)登錄功能用例圖
[錨點(diǎn)] 3.2.2 后臺(tái)商品管理功能需求分析平臺(tái)管理員通過(guò)后臺(tái)網(wǎng)址訪問(wèn)進(jìn)入后臺(tái)登錄頁(yè)面,在正確輸入用戶名、密碼和驗(yàn)證碼之后成功登陸則跳轉(zhuǎn)至后臺(tái)首頁(yè)。后臺(tái)中有商品管理這一功能模塊,其中分別有五個(gè)功能:
商品分類:對(duì)商品分類實(shí)行分級(jí)管理,所有商品分類被查詢出后分級(jí)顯示在頁(yè)面上,管理員可以進(jìn)行新增分類,編輯修改分類并保存,刪除分類的操作。
商品列表:進(jìn)入頁(yè)面后所有商品被后臺(tái)查詢出后分頁(yè)顯示在頁(yè)面上,頁(yè)面處理后可以進(jìn)行上下頁(yè)的切換和相應(yīng)頁(yè)碼的跳轉(zhuǎn)。可以通過(guò)選擇分類,品牌或者關(guān)鍵字搜索出對(duì)應(yīng)的商品。管理員可以新增商品,編輯和修改商品信息(包括通用信息,商品相冊(cè),商品模型等),刪除商品。
商品模型:商品模型用于規(guī)定某一類商品共有規(guī)格和屬性的集合。商品模型被后臺(tái)查詢后顯示在頁(yè)面上,管理員可以新增商品模型,編輯和修改商品模型信息和刪除商品模型。
商品規(guī)格:商品模型下的一個(gè)子集,可以選擇分類篩選查詢規(guī)格顯示在頁(yè)面,管理員可以新增商品規(guī)格,編輯修改規(guī)格信息和刪除規(guī)格。
商品屬性:商品模型下的另一個(gè)子集,可以選擇分類篩選查詢屬性顯示在頁(yè)面,管理員可以新增商品屬性,編輯修改屬性信息和刪除屬性。如圖所示:
圖3-3 商品管理功能用例圖
[錨點(diǎn)] 3.2.3 前臺(tái)商品搜索功能需求分析前臺(tái)上的搜索框?yàn)橛脩籼峁┓奖憧旖莸纳唐匪阉鳎@里利用到的是Solr搜索引擎。用戶可以通過(guò)輸入商品關(guān)鍵字,名稱或者是品牌來(lái)搜索商品,搜索到的商品信息會(huì)返顯在前臺(tái)頁(yè)面上,達(dá)到更加方便人性化的目的,而不需要在頁(yè)面上逐個(gè)瀏覽尋找商品。這里的搜索功能并不受注冊(cè)登錄的影響,即使是以游客的身份訪問(wèn)前臺(tái)也可以使用搜索功能。
流程:用戶進(jìn)入平臺(tái)首頁(yè)點(diǎn)擊搜索框,輸入關(guān)鍵字,商品名稱或者品牌名稱后點(diǎn)擊“搜索”按鈕。如果搜索的商品存在則搜索成功,相應(yīng)的商品返顯在頁(yè)面;如果搜索的商品不存在則搜索失敗,頁(yè)面顯示空白。如圖所示:
[錨點(diǎn)] 圖3-4搜索功能用例圖
[錨點(diǎn)] 3.2.4 前臺(tái)購(gòu)物車功能需求分析平臺(tái)上的購(gòu)物車功能用于存儲(chǔ)用戶想要購(gòu)買的商品或者所以喜愛(ài)的商品,購(gòu)物車列表里顯示這用戶所添加的商品信息,包括商品名稱,數(shù)量,價(jià)格等,用戶可以對(duì)其進(jìn)行相應(yīng)操作,另外購(gòu)物車功能不支持游客身份使用。
向購(gòu)物車添加和保存物品:用戶可以通過(guò)單擊商品信息欄中的購(gòu)物車圖標(biāo)按鈕向購(gòu)物車添加物品,并可以重復(fù)添加。點(diǎn)擊頁(yè)面上的購(gòu)物車按鈕,跳轉(zhuǎn)到購(gòu)物車頁(yè)面,顯示用戶添加到購(gòu)物車中的所有商品(包括商品信息、總數(shù)量和總價(jià)),用戶可以修改相應(yīng)商品的數(shù)量。
刪除購(gòu)物車中的商品:用戶可以刪除單個(gè)商品或清空購(gòu)物車,相應(yīng)的數(shù)量和價(jià)格會(huì)隨著刪除而改變。
修改購(gòu)物車中的商品數(shù)量:用戶可以點(diǎn)擊“+”“-”按鈕來(lái)修改購(gòu)物車中的商品數(shù)量,相應(yīng)的數(shù)量和價(jià)格也會(huì)隨著數(shù)量的變化而變化。
去結(jié)算:購(gòu)物車頁(yè)面里的去結(jié)算按鈕,結(jié)算購(gòu)物車商品并跳轉(zhuǎn)至訂單頁(yè)面。
[錨點(diǎn)] 圖3-5 購(gòu)物車功能用例圖
[錨點(diǎn)] 3.2.5 前臺(tái)訂單功能需求分析提交訂單這一功能,一是給用戶核對(duì)訂單信息,包括商品清單,地址信息,價(jià)格等等;二是用戶點(diǎn)擊提交訂單按鈕跳轉(zhuǎn)至支付頁(yè)面,這一功能不支持游客身份使用。
用戶在購(gòu)物車點(diǎn)擊“去結(jié)算”按鈕跳轉(zhuǎn)至核對(duì)訂單頁(yè)面。
進(jìn)入核對(duì)訂單頁(yè)面后,用戶核對(duì)商品清單,價(jià)格,地址等等信息。
用戶確認(rèn)無(wú)誤后,點(diǎn)擊“提交訂單”按鈕跳轉(zhuǎn)至訂單提交成功頁(yè)面,于此同時(shí),購(gòu)物車?yán)锏纳唐沸枰玫角蹇?,相?yīng)的后臺(tái)數(shù)據(jù)庫(kù)也是,可以點(diǎn)擊“去付款”按鈕跳轉(zhuǎn)支付頁(yè)面。如圖所示:
圖3-6 提交訂單功能用例圖
[錨點(diǎn)] 3.2.6 前臺(tái)支付功能需求分析支付功能為用戶提供虛擬的在線支付,采用的是支付寶開(kāi)放平臺(tái)的支付寶在線支付體驗(yàn),在登錄相應(yīng)支付寶賬號(hào)之后便可點(diǎn)擊支付完成購(gòu)買。
在提交訂單成功頁(yè)面點(diǎn)擊“去付款”按鈕跳轉(zhuǎn)至支付頁(yè)面。
登錄用戶支付寶賬號(hào)后,可以進(jìn)行支付購(gòu)買,不支付的話訂單會(huì)處以未支付的狀態(tài)在一定時(shí)間之后消除。
支付成功后,自動(dòng)跳轉(zhuǎn)只平臺(tái)首頁(yè),后臺(tái)相應(yīng)生成訂單信息,支付時(shí)間等。
[錨點(diǎn)] 圖3-7支付功能用例圖
[錨點(diǎn)] 3.3 平臺(tái)非功能需求分析效率性能:
為了給用戶良好的體驗(yàn),本電商平臺(tái)在海量數(shù)據(jù)下也要具備較高性能的能力,盡量控制用戶請(qǐng)求的響應(yīng)時(shí)長(zhǎng)相對(duì)較低,還要做到高并發(fā)量滿足平臺(tái)的高并發(fā)需求。
安全性[7]:
因?yàn)榇似脚_(tái)是供用戶購(gòu)物的,所以會(huì)有很多的用戶信息,比如基本的用戶賬號(hào)密碼,郵箱手機(jī)號(hào),地址等。需要確保絕對(duì)的安全性,以保證用戶的相關(guān)信息安全保密,避免不必要的非法操作而導(dǎo)致信息泄露造成損失。
可靠性:
本平臺(tái)是在分布式架構(gòu)下開(kāi)發(fā)的微服務(wù)系統(tǒng),多個(gè)子系統(tǒng)組成。需要確保整個(gè)平臺(tái)的可靠性,在某些特定環(huán)境下也不易出錯(cuò),還要考慮某個(gè)子系統(tǒng)故障時(shí)盡量不影響其他系統(tǒng)的使用。
可擴(kuò)展性:
作為一個(gè)綜合的電商平臺(tái),在考慮必要的效率和安全可靠性能下同樣也得考慮未來(lái)后續(xù)平臺(tái)的優(yōu)化升級(jí)。這就需要一個(gè)良好擴(kuò)展性,減少未來(lái)優(yōu)化升級(jí)開(kāi)發(fā)中不必要的麻煩,以便更好的維護(hù)平臺(tái)。
[錨點(diǎn)] 4 電商平臺(tái)概要設(shè)計(jì)本章的概要設(shè)計(jì)面向開(kāi)發(fā)者對(duì)用戶需求從構(gòu)建系統(tǒng)的角度進(jìn)行重構(gòu),包含四部分。一個(gè)是平臺(tái)整體系統(tǒng)架構(gòu)的設(shè)計(jì);第二個(gè)是平臺(tái)相關(guān)服務(wù)器的架構(gòu)設(shè)計(jì);第三個(gè)則是根據(jù)用戶的功能需求進(jìn)行功能模塊的概要設(shè)計(jì);最后一個(gè)是數(shù)據(jù)庫(kù)的設(shè)計(jì)。
[錨點(diǎn)] 4.1 平臺(tái)系統(tǒng)架構(gòu)設(shè)計(jì)平臺(tái)在基于MVC的模式下,在三層架構(gòu)的基礎(chǔ)下設(shè)計(jì)分布式服務(wù)架構(gòu),做到面向服務(wù)。微服務(wù)方面使用Dubbo服務(wù)治理框架和Zookeeper注冊(cè)中心構(gòu)建RPC框架,實(shí)現(xiàn)遠(yuǎn)程調(diào)用和服務(wù)的統(tǒng)一調(diào)度管理。如圖所示:
圖4-1 電商平臺(tái)整體架構(gòu)設(shè)計(jì)圖
[錨點(diǎn)] 1.表現(xiàn)層:
這是電商平臺(tái)的業(yè)務(wù)控制層,業(yè)務(wù)上包括前臺(tái)門戶系統(tǒng),后臺(tái)管理系統(tǒng),搜索系統(tǒng)和訂單系統(tǒng)??刂茖痈鶕?jù)客戶端瀏覽器發(fā)出的不同請(qǐng)求調(diào)用對(duì)應(yīng)的業(yè)務(wù)控制模塊。不同的Controller為不同的請(qǐng)求服務(wù),調(diào)用服務(wù)層且以View的形式返回。
[錨點(diǎn)] 2.服務(wù)層:
服務(wù)層在三層架構(gòu)中起到一個(gè)承上啟下的作用,對(duì)下使用持久層的接口,對(duì)上為控制層提供接口,作為業(yè)務(wù)邏輯層,一個(gè)Service方法完成一個(gè)功能。
[錨點(diǎn)] 3.持久層:
起到與數(shù)據(jù)庫(kù)通信的作用,且為服務(wù)層提供接口,是一個(gè)數(shù)據(jù)訪問(wèn)層。當(dāng)服務(wù)層發(fā)送請(qǐng)求,持久層接收并完成相應(yīng)的增刪改以及數(shù)據(jù)訪問(wèn)操作。
[錨點(diǎn)] 4.2 相關(guān)服務(wù)器架構(gòu)設(shè)計(jì)本電商平臺(tái)擁有多臺(tái)服務(wù)器,外加數(shù)據(jù)庫(kù),多數(shù)部署在部署在VMware虛擬機(jī)的Linux環(huán)境下。一個(gè)Vsftpd文件上傳服務(wù)器,一個(gè)Nginx服務(wù)器實(shí)現(xiàn)反向代理負(fù)載均衡,三個(gè)Tomcat服務(wù)器構(gòu)成的一個(gè)集群,通過(guò)Nginx服務(wù)器實(shí)現(xiàn)集群上的反向代理負(fù)載均衡;數(shù)據(jù)庫(kù)上有兩個(gè)兩個(gè)持久化的Mysql數(shù)據(jù)庫(kù),一個(gè)部署在Linux環(huán)境下為索引庫(kù)提供數(shù)據(jù)來(lái)源,一個(gè)部署在Window環(huán)境下為整個(gè)平臺(tái)提供數(shù)據(jù);一個(gè)Redis緩存數(shù)據(jù)庫(kù);一個(gè)Solr搜索引擎索引庫(kù)。
Vsftpd文件上傳服務(wù)器:作為商品圖片的存放服務(wù)器,通過(guò)Nginx反向代理Tomcat服務(wù)器攜帶地址訪問(wèn)Vsftpd上的圖片。
Nginx服務(wù)器:部署一臺(tái)Nginx服務(wù)器,起到為Tomcat服務(wù)器集群反向代理負(fù)載均衡的作用,而且對(duì)Vsftpd上圖片的訪問(wèn)就是先通過(guò)Nginx服務(wù)器的反向代理到Tomcat服務(wù)器上的。
Tomcat服務(wù)器:三臺(tái)Tomcat服務(wù)器構(gòu)成一個(gè)集群,提供Http請(qǐng)求等。
Redis緩存數(shù)據(jù)庫(kù):Redis作為緩存數(shù)據(jù)庫(kù)緩存數(shù)據(jù),減輕Mysql的壓力,是一個(gè)非關(guān)系型數(shù)據(jù)庫(kù)。Redis搭載在Linux環(huán)境下,有一臺(tái)主機(jī)和兩臺(tái)從機(jī)構(gòu)成一個(gè)集群,實(shí)現(xiàn)了主備切換讀寫分離,避免以為宕機(jī)而導(dǎo)致數(shù)據(jù)丟失。
Solr搜索引擎索引庫(kù):此索引庫(kù)為平臺(tái)前臺(tái)的搜索提供服務(wù),加快搜索效率的同時(shí)減輕Mysql數(shù)據(jù)庫(kù)的壓力,而索引庫(kù)中的數(shù)據(jù)來(lái)源于Mysql數(shù)據(jù)庫(kù),由Solr索引庫(kù)自身整理而來(lái)。
Mysql數(shù)據(jù)庫(kù)[4]:配置兩種不同環(huán)境下的Mysql為平臺(tái)服務(wù)。一個(gè)在Window環(huán)境下,存放整個(gè)平臺(tái)的用戶信息和商品信息等;另一個(gè)在Linux環(huán)境下,作用是為Solr搜索引擎索引庫(kù)提供數(shù)據(jù)來(lái)源。
[錨點(diǎn)] 4.3平臺(tái)功能概要設(shè)計(jì)
[錨點(diǎn)] 4.3.1 前臺(tái)注冊(cè)功能概要設(shè)計(jì)注冊(cè)頁(yè)面可從兩個(gè)地方進(jìn)入,第一個(gè)平臺(tái)首頁(yè)的“免費(fèi)注冊(cè)”按鈕,第二個(gè)是登錄頁(yè)面里的“注冊(cè)新用戶”按鈕,通過(guò)以上兩種方式跳轉(zhuǎn)至注冊(cè)頁(yè)面。在注冊(cè)頁(yè)面的表單里,填寫郵箱,用戶名和密碼,點(diǎn)擊極驗(yàn)驗(yàn)證進(jìn)行行為驗(yàn)證,一切都正確填寫之后,點(diǎn)擊“提交注冊(cè)”按鈕完成注冊(cè)。當(dāng)注冊(cè)成功時(shí),提示用戶“注冊(cè)成功”隨后跳轉(zhuǎn)至登錄頁(yè)面,于此同時(shí)后臺(tái)發(fā)送注冊(cè)郵件到用戶所填寫的郵箱,如果注冊(cè)失敗則根據(jù)提示重新填寫注冊(cè)。其中行為驗(yàn)證用到的是GEETEST極驗(yàn)驗(yàn)證,郵件發(fā)送使用的是網(wǎng)易163郵箱的SMTP服務(wù)。
[錨點(diǎn)] 4.3.2 登錄功能概要設(shè)計(jì)通過(guò)點(diǎn)擊平臺(tái)首頁(yè)的“請(qǐng)登錄”按鈕跳轉(zhuǎn)至登錄頁(yè)面,輸入用戶名和密碼并進(jìn)行驗(yàn)證,驗(yàn)證錯(cuò)誤則提示“用戶名或密碼錯(cuò)誤”,驗(yàn)證成功則跳轉(zhuǎn)至平臺(tái)首頁(yè)。由于本平臺(tái)屬于前后臺(tái)分離,所以登錄功能上做了SSO單點(diǎn)登錄的技術(shù)。如果用戶第一次訪問(wèn)應(yīng)用系統(tǒng)時(shí)沒(méi)有登錄,則會(huì)被定向到認(rèn)證系統(tǒng)進(jìn)行登錄。首先,根據(jù)用戶輸入的登錄信息對(duì)用戶進(jìn)行身份驗(yàn)證。如果認(rèn)證通過(guò),經(jīng)過(guò)身份驗(yàn)證票將返回給用戶,然后用戶可以使用這張票作為身份驗(yàn)證票訪問(wèn)其他應(yīng)用系統(tǒng),收到票后,應(yīng)用系統(tǒng)將其發(fā)送給驗(yàn)證確認(rèn)其合法性的驗(yàn)證系統(tǒng)。一旦通過(guò)了驗(yàn)證,用戶就可以訪問(wèn)其他系統(tǒng)而無(wú)需再次登錄。另外,當(dāng)游客想要使用用戶才具備的功能時(shí),比如購(gòu)物車功能等等,則把頁(yè)面自動(dòng)跳轉(zhuǎn)至登錄頁(yè)面提示用戶先登錄。
[錨點(diǎn)] 4.3.3 后臺(tái)商品管理功能概要設(shè)計(jì)商品分類:在后臺(tái)管理平臺(tái)點(diǎn)擊商品管理下的“商品分類”按鈕進(jìn)入分類頁(yè)面,頁(yè)面上三層分級(jí)顯示所有的商品分類,可以通過(guò)點(diǎn)擊“展開(kāi)”“收縮”按鈕進(jìn)行分級(jí)展開(kāi)和收縮的操作。點(diǎn)擊“新增分類”按鈕跳轉(zhuǎn)新增頁(yè)面,在頁(yè)面表單上正確填寫各項(xiàng)信息,除了文字信息外還有一個(gè)圖片上傳的功能,填寫完成后可以點(diǎn)擊“提交”完成新增并保存至數(shù)據(jù)庫(kù)。新增頁(yè)面上還有返回分類頁(yè)和重新清空表單信息的兩個(gè)按鈕。點(diǎn)擊編輯圖標(biāo)跳轉(zhuǎn)編輯頁(yè)面對(duì)相應(yīng)分類信息進(jìn)行編輯修改。點(diǎn)擊刪除圖標(biāo)則可以刪除相應(yīng)的分類信息并清理數(shù)據(jù)庫(kù)的信息。
商品列表:商品列表展示著平臺(tái)所有的商品,可以通過(guò)下拉框選擇分類或者是平臺(tái)查詢商品,也可以通過(guò)關(guān)鍵字搜索,由于商品數(shù)量多,實(shí)現(xiàn)分頁(yè)技術(shù)方便用戶使用。商品列表里可以添加新商品,其中包括通用信息,商品相冊(cè),模型。在列表頁(yè),通過(guò)點(diǎn)擊編輯和刪除圖片,可以進(jìn)行對(duì)應(yīng)商品的編輯修改和刪除。
商品模型:由于商品模型是規(guī)定一類商品公有規(guī)格和屬性的集合,所以模型頁(yè)面上在展示模型的同時(shí),設(shè)計(jì)“屬性列表”和“規(guī)格列表”兩個(gè)按鈕分別跳轉(zhuǎn)至對(duì)應(yīng)頁(yè)面。商品模型可以通過(guò)點(diǎn)擊按鈕跳轉(zhuǎn)新增頁(yè)面新增模型,也可以點(diǎn)擊編輯和刪除圖標(biāo)進(jìn)行相應(yīng)的編輯修改和刪除。
商品規(guī)格:作為商品模型的一個(gè)子集,在做到常規(guī)的規(guī)格頁(yè)面展示外,可以通過(guò)下拉框選擇展示某個(gè)模型下的規(guī)格。同樣應(yīng)該就被新增,編輯修改和刪除按鈕進(jìn)行對(duì)應(yīng)操作。
商品屬性:作為商品模型的一個(gè)子集,在做到常規(guī)的屬性頁(yè)面展示外,可以通過(guò)下拉框選擇展示某個(gè)模型下的屬性。同樣應(yīng)該就被新增,編輯修改和刪除按鈕進(jìn)行對(duì)應(yīng)操作。
[錨點(diǎn)] 4.3.4 前臺(tái)商品搜索功能概要設(shè)計(jì)前臺(tái)商品功能的設(shè)計(jì),搭載Solr搜索引擎,實(shí)現(xiàn)快速的關(guān)鍵字搜索,為Mysql數(shù)據(jù)庫(kù)減輕壓力且為用戶提高體驗(yàn)感。在搜索框內(nèi)輸入關(guān)鍵字信息后,點(diǎn)擊“搜索”按鈕實(shí)現(xiàn)商品的搜索,搜索成功商品展示至前臺(tái)首頁(yè)。因?yàn)樯唐窋?shù)量的問(wèn)題以及使用體驗(yàn),搜索而展示的商品進(jìn)行分頁(yè)展示。
[錨點(diǎn)] 4.3.5 前臺(tái)購(gòu)物車功能概要設(shè)計(jì)前臺(tái)購(gòu)物車功能的設(shè)計(jì)上,頁(yè)面上每件商品都會(huì)有一個(gè)購(gòu)物車圖標(biāo),用戶通過(guò)點(diǎn)擊商品信息欄中的購(gòu)物車圖標(biāo)按鈕便可以將商品添加至購(gòu)物車,且可重復(fù)添加。點(diǎn)擊頁(yè)面上的購(gòu)物車按鈕可跳轉(zhuǎn)至購(gòu)物車頁(yè)面,顯示著用戶添加至購(gòu)物車的所有商品(包括商品信息,總數(shù)量及總價(jià)格),用戶可以對(duì)相應(yīng)商品修改數(shù)量。用戶可以刪除單個(gè)商品或者清空購(gòu)物車,相應(yīng)的數(shù)量和價(jià)格也會(huì)隨著刪除而變化。用戶可以通過(guò)點(diǎn)擊“+”,“-”按鈕修改購(gòu)物車?yán)锷唐返臄?shù)量,同時(shí)相應(yīng)的數(shù)量和價(jià)格也會(huì)隨著數(shù)量的改變而變化。購(gòu)物車頁(yè)面里的去結(jié)算按鈕,結(jié)算購(gòu)物車商品并跳轉(zhuǎn)至訂單頁(yè)面。購(gòu)物車不屬于游客所能使用的功能,實(shí)現(xiàn)游客使用時(shí)自動(dòng)跳轉(zhuǎn)至登錄頁(yè)面。
[錨點(diǎn)] 4.3.6 前臺(tái)訂單功能概要設(shè)計(jì)提交訂單功能設(shè)計(jì)上,用戶在購(gòu)物車點(diǎn)擊“去結(jié)算”按鈕跳轉(zhuǎn)至核對(duì)訂單頁(yè)面,進(jìn)入核對(duì)訂單頁(yè)面后;點(diǎn)擊“提交訂單”按鈕跳轉(zhuǎn)至訂單提交成功頁(yè)面,于此同時(shí),購(gòu)物車?yán)锏纳唐沸枰玫角蹇?,相?yīng)的后臺(tái)數(shù)據(jù)庫(kù)也是,可以點(diǎn)擊“去付款”按鈕跳轉(zhuǎn)支付頁(yè)面。
[錨點(diǎn)] 4.3.7 前臺(tái)支付功能概要設(shè)計(jì)前臺(tái)支付功能設(shè)計(jì)上,使用支付寶開(kāi)放平臺(tái)沙箱環(huán)境下的支付寶在線支付體驗(yàn),頁(yè)面上通過(guò)提交訂單功能后的“去付款”按鈕跳轉(zhuǎn)至支付頁(yè)面。進(jìn)行支付寶在線支付相關(guān)操作之后,設(shè)計(jì)頁(yè)面跳轉(zhuǎn)回平臺(tái)首頁(yè),生成訂單信息,未完成支付則保留訂單一定時(shí)間后清除。
[錨點(diǎn)] 4.4 平臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)本平臺(tái)的數(shù)據(jù)庫(kù)上選用的是Mysql數(shù)據(jù)庫(kù),分別在Window和Linux環(huán)境下搭載,一個(gè)為整個(gè)平臺(tái)提供數(shù)據(jù),一個(gè)為Solr索引庫(kù)提供數(shù)據(jù)來(lái)源。數(shù)據(jù)庫(kù)的設(shè)計(jì)上,嚴(yán)格遵守?cái)?shù)據(jù)庫(kù)的設(shè)計(jì)原則和規(guī)范,根據(jù)平臺(tái)實(shí)際需求而設(shè)計(jì),做到數(shù)據(jù)庫(kù)的完整性約束,一致性約束,可擴(kuò)展性和可修改性,借助Navicat可視化工具進(jìn)行操作。
數(shù)據(jù)庫(kù)E-R圖:
圖4-2 數(shù)據(jù)庫(kù)E-R圖
數(shù)據(jù)庫(kù)表設(shè)計(jì):
商品表
表4-1 t_goods
字段 數(shù)據(jù)類型 字段大小 約束 字段含義
goods_id mediumint 8 主鍵,非空 商品編號(hào)
cat_id int 11 非空 分類編號(hào)
goods_name varchar 120 非空 商品名稱
click_count int 10 非空 點(diǎn)擊次數(shù)
brand_id smallint 5 非空 品牌編號(hào)
store_count smallint 5 非空 庫(kù)存數(shù)量
shop_price decimal 10 非空 商品價(jià)格
on_time int 10 非空 上架時(shí)間
goods_type smallint 5 非空 模型編號(hào)
spec_type smallint 5 非空 規(guī)格編號(hào)
商品分類表
表4-2 t_goods_category
字段 數(shù)據(jù)類型 字段大小 約束 字段含義
id smallint 5 主鍵,非空 分類編號(hào)
name varchar 90 非空 分類名稱
level tinyint 1 默認(rèn)空 分級(jí)
image varchar 512 默認(rèn)空 分類圖片
is_show tinyint 1 非空 是否顯示
商品模型表
表4-3 t_goods_type
字段 數(shù)據(jù)類型 字段大小 約束 字段含義
id smallint 5 主鍵,非空 模型編號(hào)
name varchar 60 非空 模型名稱
商品屬性表
表4-4 t_goods_attribute
字段 數(shù)據(jù)類型 字段大小 約束 字段含義
attr_id int 11 主鍵,非空 屬性編號(hào)
attr_name varchar 60 非空 屬性名稱
type_id smallint 5 非空 模型編號(hào)
type_name varchar 60 默認(rèn)空 模型名稱
商品規(guī)格表
表4-5t_goods_spec
字段 數(shù)據(jù)類型 字段大小 約束 字段含義
spec_id int 11 主鍵,非空 規(guī)格編號(hào)
spec_name varchar 60 默認(rèn)空 規(guī)格名稱
type_id smallint 5 默認(rèn)空 模型編號(hào)
type_name varchar 60 默認(rèn)空 模型名稱
訂單表
表4-6 t_order
字段 數(shù)據(jù)類型 字段大小 約束 字段含義
order_id mediumint 8 主鍵,非空 訂單編號(hào)
user_id mediumint 8 非空 用戶編號(hào)
order_status tinyint 1 非空 訂單狀態(tài)
pay_status tinyint 1 非空 支付狀態(tài)
consignee varchar 60 非空 收貨人
goods_price decimal 10 非空 商品總價(jià)
pay_time int 10 非空 支付時(shí)間
total_amount decimal 10 非空 訂單總價(jià)
訂單項(xiàng)表
表4-7 t_order_goods
字段 數(shù)據(jù)類型 字段大小 約束 字段含義
rec_id mediumint 8 主鍵,非空 表編號(hào)
order_id mediumint 8 非空 用戶編號(hào)
goods_id mediumint 8 非空 商品編號(hào)
goods_name varchar 120 非空 商品名稱
goods_num smallint 5 非空 購(gòu)物數(shù)量
goods_price decimal 10 非空 商品總價(jià)
spec_key varchar 128 非空 規(guī)格編號(hào)
spec_key_name varchar 128 非空 規(guī)格名稱
用戶表
表4-8 t_user
字段 數(shù)據(jù)類型 字段大小 約束 字段含義
user_id smallint 5 主鍵,非空 用戶編號(hào)
user_name varchar 60 非空 用戶名稱
email varchar 60 非空 用戶郵箱
password varchar 32 非空 用戶密碼
ec_salt varchar 50 非空 密鑰
add_time int 11 非空 注冊(cè)時(shí)間
[錨點(diǎn)] 5 電商平臺(tái)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)在第四章電商平臺(tái)的概要設(shè)計(jì)基礎(chǔ)上,在本章進(jìn)一步描述電商平臺(tái)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn),將從平臺(tái)架構(gòu)和功能兩個(gè)角度進(jìn)行剖析。
[錨點(diǎn)] 5.1 平臺(tái)架構(gòu)詳細(xì)設(shè)計(jì)本平臺(tái)的工程架構(gòu)為Maven工程,ego-parent是整個(gè)工程的一個(gè)父工程,其中包括公共工具類系統(tǒng)ego-common,后臺(tái)系統(tǒng)ego-manager,前臺(tái)系統(tǒng)ego-portal,服務(wù)系統(tǒng)ego-rpc,訂單系統(tǒng)ego-order和單點(diǎn)登錄系統(tǒng)ego-sso,除了公共工具類系統(tǒng)每個(gè)子系統(tǒng)都擁有自己的pojo和mapper對(duì)象,也擁有service層和web層,共同組建成一個(gè)完整的平臺(tái)工程,其中各個(gè)子系統(tǒng)的pojo和mapper是由Mybatis的逆向工程generator自動(dòng)生成,包括pojo,mapper.xml,mapper.java,不需要手動(dòng)編寫,大大的提高了編程效率。
圖5-1 平臺(tái)工程架構(gòu)圖
平臺(tái)的系統(tǒng)架構(gòu)是在MVC模式的三層架構(gòu)下,利用Dubbo服務(wù)治理框架和Zookeeper注冊(cè)中心搭建服務(wù)系統(tǒng)。利用Nginx分別實(shí)現(xiàn)前后臺(tái)系統(tǒng)的方向代理,前后臺(tái)系統(tǒng)則通過(guò)Dubbo實(shí)現(xiàn)服務(wù)的遠(yuǎn)程調(diào)用。
Vsftpd文件上傳服務(wù)器,安裝在Linux環(huán)境下,是商品圖片的存儲(chǔ)地。
Redis服務(wù)器安裝在Linux環(huán)境下,由一臺(tái)主機(jī)和兩臺(tái)從機(jī)構(gòu)成一個(gè)集群,配置了主備切換讀寫分離,用來(lái)存儲(chǔ)一些臨時(shí)數(shù)據(jù)或常用數(shù)據(jù)。
Solr搜索引擎安裝在Linux環(huán)境下,為前臺(tái)的搜索功能所服務(wù),實(shí)現(xiàn)了前臺(tái)的關(guān)鍵字搜索,做到了搜索的快速高效,Solr的索引庫(kù)數(shù)據(jù)源于Linux環(huán)境下的Mysql數(shù)據(jù)庫(kù),由Solr自己整理而來(lái)。
圖5-2 平臺(tái)執(zhí)行流程圖

圖1

圖2

圖3

圖4

圖5

圖6

圖8

圖9

圖10

圖11

圖12

圖13

圖14

圖15

圖16

圖18

圖20

網(wǎng)站名稱:綜合性B2C電商平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
文章網(wǎng)址:http://jinyejixie.com/news8/238258.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、品牌網(wǎng)站制作、網(wǎng)站改版、云服務(wù)器電子商務(wù)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)
禄劝| 巍山| 中西区| 镇坪县| 昔阳县| 舟曲县| 通许县| 六枝特区| 长宁县| 抚顺市| 曲松县| 湖南省| 邯郸县| 海门市| 沙洋县| 同心县| 临沂市| 元朗区| 南和县| 汝南县| 张家界市| 于田县| 金门县| 定安县| 留坝县| 峨眉山市| 上林县| 武强县| 涟水县| 霍林郭勒市| 宁乡县| 沐川县| 登封市| 新绛县| 北碚区| 赣榆县| 福海县| 东港市| 金沙县| 莱西市| 荥经县|