上次說了商品,商品分類,品牌,分類的屬性,規(guī)格。很多電商網(wǎng)站例如:京東,國(guó)美,蘇寧他們的商品都是存儲(chǔ)在redis中的,通過請(qǐng)求獲取到的redis進(jìn)行js的渲染動(dòng)態(tài)的展示商品的信息。
源碼:https://github.com/limingIOS/netFuture/tree/master//源碼/『互聯(lián)網(wǎng)架構(gòu)』軟件架構(gòu)-解密電商系統(tǒng)營(yíng)銷-會(huì)員模塊業(yè)務(wù)(72)/

(一)營(yíng)銷模塊

- 營(yíng)銷工具

- 營(yíng)銷活動(dòng)
商品的ID,營(yíng)銷工具的ID,營(yíng)銷工具的編號(hào),營(yíng)銷工具的類型(商品級(jí)別的,訂單級(jí)別的,全站級(jí)別的),渠道(PC端的,IOS端的,Android端的)

- 營(yíng)銷活動(dòng)對(duì)應(yīng)的訂單數(shù)據(jù)
針對(duì)營(yíng)銷活動(dòng)產(chǎn)生的訂單

- 營(yíng)銷技術(shù)方案
1個(gè)用戶或者一個(gè)商品對(duì)應(yīng)1-3個(gè)營(yíng)銷活動(dòng),1萬個(gè)商品(購(gòu)物車)就有3萬個(gè)營(yíng)銷活動(dòng)如果持久化到MySQL上,mysql肯定是受不了的。如果是100個(gè)用戶,雙十一必須掛了服務(wù)。
優(yōu)化方案(緩存,redis也會(huì)有問題。redis里面存3萬多條數(shù)據(jù),浪費(fèi)了大量的網(wǎng)絡(luò)資源)
解決方案是:類似新華字典一樣,redis里面針對(duì)某個(gè)活動(dòng)只存儲(chǔ)key值,內(nèi)容保存在JVM cache中。因?yàn)槟壳岸际谴嬖贘VM中,如果是分布式同步下,需要使用zookeeper。

(二)會(huì)員模塊
電商里面最復(fù)雜的就是商品,最簡(jiǎn)單的業(yè)務(wù)就是會(huì)員。
- 業(yè)務(wù)
會(huì)員模塊用戶注冊(cè)、登錄、找回密碼、積分業(yè)務(wù)
- 技術(shù)點(diǎn):會(huì)員SSO、分庫(kù)分表
單點(diǎn)登錄。1.session如何存儲(chǔ)的(redis)

單點(diǎn)登錄。2、服務(wù)端如何獲取你信息?Token(客戶端跟服務(wù)端 包含登錄)
sale.jd.com登錄 item.jd.com(我不知道你登錄)
登錄后把token放入redis中作為key,token的信息保存在cookies中,當(dāng)訪問在item.jd.com后,通過cookies里面的token來確認(rèn)用戶是否登錄。
分庫(kù)分表。hash取模、list預(yù)定義、range范圍,具體都是通過shardingjdbc處理的
說說之前的公司關(guān)于會(huì)員表一共8個(gè)庫(kù),后來變成了16個(gè)庫(kù)。這個(gè)是如何處理的。
1.當(dāng)時(shí)8個(gè)庫(kù)的分庫(kù)思路是通過hash取模的方式。(每個(gè)庫(kù)800萬數(shù)據(jù))
2.如果改成16個(gè)庫(kù),凌晨進(jìn)行處理,先將數(shù)據(jù)進(jìn)行處理分為:待遷移%8、 (服務(wù)可用)遷移中(%8) 、遷移完(%16),通過copy的方式。2個(gè)小時(shí)搞定的。
3.遷移完后進(jìn)行取模改成16。停機(jī)2個(gè)小時(shí)。
4.當(dāng)時(shí)同事提出不停機(jī),如果在這個(gè)期間會(huì)員信息發(fā)生修改,通過binlog的方式在新遷移的信息通過binlog的方式在新遷移的庫(kù)中執(zhí)行,因?yàn)楸容^麻煩后來放棄了。
5.直接停機(jī)2個(gè)小時(shí)。前提這些都是在測(cè)試環(huán)境測(cè)試過了。遷移完后等于2份,一個(gè)在0庫(kù),一個(gè)在16庫(kù),刪除原來0庫(kù)中的數(shù)據(jù)。
- 表設(shè)計(jì)
t_account會(huì)員表


t_accountRank會(huì)員級(jí)別表

t_address配送地址信息表

(三)權(quán)限模塊
很多系統(tǒng)的權(quán)限這塊 公共。權(quán)限系統(tǒng)一般有:賬號(hào)、角色、權(quán)限、資源。
權(quán)限可以分為三種:頁(yè)面權(quán)限,操作權(quán)限,數(shù)據(jù)權(quán)限。
在互聯(lián)網(wǎng)公司有個(gè)專業(yè)術(shù)語(yǔ):權(quán)限這塊防小人(不懂電腦的),防君子(IT人員)
- 頁(yè)面權(quán)限
控制你可以看到哪個(gè)頁(yè)面,看不到哪個(gè)頁(yè)面。
很多系統(tǒng)都只做到了控制頁(yè)面這一層級(jí),它實(shí)現(xiàn)起來比較簡(jiǎn)單,一些系統(tǒng)會(huì)這樣設(shè)計(jì),但是比較古板,控制的權(quán)限不精細(xì),難以在頁(yè)面上對(duì)權(quán)限進(jìn)行更下一層級(jí)的劃分。
- 操作權(quán)限
則控制你可以在頁(yè)面上操作哪些按妞。
延伸:當(dāng)我們進(jìn)入一個(gè)頁(yè)面,我們的目的無非是在這個(gè)頁(yè)面上進(jìn)行增刪改查,那在頁(yè)面上對(duì)應(yīng)的操作可能是:查詢,刪除,編輯,新增四個(gè)按鈕。
可能你在某個(gè)頁(yè)面上,只能查詢數(shù)據(jù),而不能修改數(shù)據(jù)。
- 數(shù)據(jù)權(quán)限
數(shù)據(jù)權(quán)限則是控制你可以看到哪些數(shù)據(jù),比如市場(chǎng)A部的人只能看到或者修改A部創(chuàng)建的數(shù)據(jù),他看不到或者不能修改B部的數(shù)據(jù)。
延伸:數(shù)據(jù)的控制我們一般通過部門去實(shí)現(xiàn),每條記錄都有一個(gè)創(chuàng)建人,而每一個(gè)創(chuàng)建人都屬于某個(gè)部門,因此部門分的越細(xì),數(shù)據(jù)的控制層級(jí)也就越精細(xì),這里是否有其他好的方式除了部門這個(gè)維度還有其他什么方式可以控制數(shù)據(jù)權(quán)限。
- t_user用戶表

- t_role角色表

- t_privilege權(quán)限表

- t_menu資源表

(四)黑科技動(dòng)態(tài)執(zhí)行aop里面的方法
大型網(wǎng)絡(luò)公司內(nèi)部使用的,建議內(nèi)部粉絲專用,這里不做演示,詳細(xì)使用建議聯(lián)系我。
源碼:https://github.com/limingios/netFuture/tree/master//源碼/『互聯(lián)網(wǎng)架構(gòu)』軟件架構(gòu)-解密電商系統(tǒng)營(yíng)銷-會(huì)員模塊業(yè)務(wù)(72)/
1、存儲(chǔ)在jvm的對(duì)象可視化 可以操作
2、調(diào)試bug比較有用 查看最新代碼
3、給系統(tǒng)留后門(生產(chǎn) 不需要重啟機(jī)器可以改配置 )
- 在pom.xml 同級(jí)目錄放入dynamo.jar

- pom.xml 中的配置,先將jar包放入web-info
<dependency> <groupId>com.gome.spring.compents</groupId> <artifactId>dynamo</artifactId> <scope>system</scope> <systemPath>${basedir}..dynamo.jar</systemPath> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.Apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.7</version> </dependency>
- web.xml中加入
<servlet>
<servlet-name>springdyn</servlet-name>
<servlet-class>com.gome.spring.compents.servlet.DynServlet
</servlet-class>
</servlet>
<servlet-mApping>
<servlet-name>springdyn</servlet-name>
<url-pattern>/dyn/admin/*</url-pattern>
</servlet-mapping>
- 訪問方式
http://ip:端口/項(xiàng)目名稱/dyn/admin
用戶名:admin
密碼: admin

PS:今天說了營(yíng)銷的設(shè)計(jì)思路:營(yíng)銷工具,營(yíng)銷活動(dòng),營(yíng)銷活動(dòng)訂單。 會(huì)員管理:?jiǎn)吸c(diǎn)問題,會(huì)員信息session共享問題。權(quán)限問題:頁(yè)面權(quán)限,操作權(quán)限,數(shù)據(jù)權(quán)限。黑科技:動(dòng)態(tài)aop控制工具。