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

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

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

圖1

圖2

圖3

圖4

圖5

圖6

圖8

圖9

圖10

圖11

圖12

圖13

圖14

圖15

圖16

圖18

圖20

網(wǎng)站名稱:綜合性B2C電商平臺設(shè)計(jì)與實(shí)現(xiàn)
文章網(wǎng)址:http://www.muchs.cn/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)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)