一断序,修訂紀(jì)錄
版本 | 修訂人 | 日期 |
---|---|---|
初稿V0.1 | 林繼雙 | 2020-04-09 |
二,文檔目的
用于后端架構(gòu)開(kāi)發(fā)參考糜烹、技術(shù)棧描述违诗、開(kāi)發(fā)引導(dǎo)。
slogen:英語(yǔ)玩疮蹦,玩英語(yǔ),異性交友诸迟。
三,架構(gòu)cnName
1.設(shè)計(jì)原則
遵循有可能出現(xiàn)問(wèn)題就一定會(huì)出問(wèn)題原則。
減少不必要的依賴(lài)和技術(shù)棧阵苇。
自動(dòng)化部署壁公。
系統(tǒng)監(jiān)控,做到主動(dòng)解決問(wèn)題绅项。
為產(chǎn)品提供良好改需求環(huán)境贮尖,模塊盡量設(shè)計(jì)靈活。
2.安全描述
使用云服務(wù)端F5設(shè)備趁怔,隱藏主機(jī)湿硝,防止定向攻擊,在被docs攻擊的時(shí)候還是可以臨時(shí)切換F5設(shè)備润努。
敏感數(shù)據(jù)字段需要進(jìn)行加密关斜。
敏感操作需要二次鑒權(quán),手機(jī)驗(yàn)證碼或密碼铺浇。
Web端需要防止跨站腳本痢畜,注入腳本,sql注入等攻擊鳍侣。
暴力破解防御閥丁稀。
微服務(wù)需要加上SSL或禁止外網(wǎng)直接訪問(wèn)。
后臺(tái)管理采用spring security 對(duì)全部資源進(jìn)行權(quán)限過(guò)濾倚聚。
3.性能要求
百萬(wàn)日活: 每個(gè)用戶預(yù)計(jì)100 次請(qǐng)求 1億/8小時(shí) = 平均3472 QPS
线衫,高峰在6~8倍,預(yù)計(jì) QPS需要達(dá)到~=3W QPS惑折。
用戶注冊(cè)性能需要達(dá)到平均值的兩倍 ~=6944 授账。
4.擴(kuò)展
服務(wù)層級(jí):基于JWT,拆分服務(wù)讀瓶頸采用redis,寫(xiě)瓶頸采用jdbc-sharding惨驶。
各個(gè)服務(wù)接口不變的情況下還可以更換數(shù)據(jù)庫(kù)到nosql 庫(kù)白热。
代碼層級(jí):服務(wù)顆粒度可以根據(jù)并發(fā)程度情況進(jìn)行拆分。
5.業(yè)務(wù)模塊
6.后臺(tái)管理
使用vue -element-ui
滿足不同角色對(duì)應(yīng)不同權(quán)限粗卜。
https://panjiachen.github.io/vue-element-admin/
7.架構(gòu)圖
8.代碼分層
業(yè)務(wù)系統(tǒng): flo-boundaries
基礎(chǔ)服務(wù): flo-micros
治理: flo-clouds
推薦系統(tǒng): flo-recommendations
9.表規(guī)范
主表必須帶有id屋确、createTime。
數(shù)據(jù)可以修改的必須帶上 updateTime续扔。
狀態(tài)使用英文縮寫(xiě)(length 16) 例如. status : SUCCESS FAIL PENDING...
名稱(chēng)必須帶上 name() 攻臀,nameEn。保留雙語(yǔ)給小白用
表名稱(chēng) 不需要前綴测砂, 例如. order user
更多詳情參考阿里開(kāi)發(fā)文檔
四茵烈,技術(shù)棧描述
工具: maven , git , Jenkins
開(kāi)發(fā): Java11,Spring Boot(Web,MVC,Security,JPA,Data)
, Spring Cloud(Netflix全家桶,Config),String Cloud Admin 通過(guò)actuator采集和定制通知百匆。二砌些,文檔目的
用于后端架構(gòu)開(kāi)發(fā)參考、技術(shù)棧描述、開(kāi)發(fā)引導(dǎo)存璃。
slogen:英語(yǔ)玩仑荐,玩英語(yǔ),異性交友。
三纵东,架構(gòu)
1.設(shè)計(jì)原則
遵循有可能出現(xiàn)問(wèn)題就一定會(huì)出問(wèn)題原則粘招。
減少不必要的依賴(lài)和技術(shù)棧。
第三方:騰訊云偎球,融云IM
數(shù)據(jù): Mysql 5.7,Redis,Kafka,HBase
接口描述: swagger
五洒扎,后臺(tái)開(kāi)發(fā)引導(dǎo)
1.啟動(dòng)
monomers - app - AppApplication
2.開(kāi)發(fā)
在micros 下添加 模塊進(jìn)行開(kāi)發(fā)。
命名最好采用當(dāng)個(gè)單詞進(jìn)行命名如:
常見(jiàn)問(wèn)題 衰絮,命名為 faq , 包含 Faq , FaqDetail 實(shí)體袍冷,提供增加,編輯猫牡,刪除胡诗,查詢接口.
六,推薦算法(參考)
采集的數(shù)據(jù)越精確淌友,推薦也是準(zhǔn)確
技術(shù)棧:
存儲(chǔ):hdsf
分類(lèi)和標(biāo)記:spark
用戶習(xí)慣收集:kafka
實(shí)時(shí)分析:storm
數(shù)據(jù)查詢分析: es
推薦算法大致可以分為三類(lèi):基于內(nèi)容的推薦算法煌恢、協(xié)同過(guò)濾推薦算法和基于知識(shí)的推薦算法。
基于內(nèi)容的推薦算法震庭,原理是用戶喜歡和自己關(guān)注過(guò)的Item在內(nèi)容上類(lèi)似的Item瑰抵,比如你看了哈利波特I,基于內(nèi)容的推薦算法發(fā)現(xiàn)哈利波特II-VI器联,與你以前觀看的在內(nèi)容上面(共有很多關(guān)鍵詞)有很大關(guān)聯(lián)性谍憔,就把后者推薦給你,這種方法可以避免Item的冷啟動(dòng)問(wèn)題(冷啟動(dòng):如果一個(gè)Item從沒(méi)有被關(guān)注過(guò)主籍,其他推薦算法則很少會(huì)去推薦习贫,但是基于內(nèi)容的推薦算法可以分析Item之間的關(guān)系,實(shí)現(xiàn)推薦)千元,弊端在于推薦的Item可能會(huì)重復(fù)苫昌,典型的就是新聞推薦,如果你看了一則關(guān)于MH370的新聞幸海,很可能推薦的新聞和你瀏覽過(guò)的祟身,內(nèi)容一致;另外一個(gè)弊端則是對(duì)于一些多媒體的推薦(比如音樂(lè)物独、電影袜硫、圖片等)由于很難提內(nèi)容特征,則很難進(jìn)行推薦挡篓,一種解決方式則是人工給這些Item打標(biāo)簽婉陷。
協(xié)同過(guò)濾算法帚称,原理是用戶喜歡那些具有相似興趣的用戶喜歡過(guò)的商品,比如你的朋友喜歡電影哈利波特I秽澳,那么就會(huì)推薦給你闯睹,這是最簡(jiǎn)單的基于用戶的協(xié)同過(guò)濾算法(user-based collaboratIve filtering),還有一種是基于Item的協(xié)同過(guò)濾算法(item-based collaborative filtering)担神,這兩種方法都是將用戶的所有數(shù)據(jù)讀入到內(nèi)存中進(jìn)行運(yùn)算的楼吃,因此成為Memory-based Collaborative Filtering,另一種則是Model-based collaborative filtering妄讯,包括Aspect Model孩锡,pLSA,LDA亥贸,聚類(lèi)浮创,SVD,Matrix Factorization等砌函,這種方法訓(xùn)練過(guò)程比較長(zhǎng)斩披,但是訓(xùn)練完成后,推薦過(guò)程比較快讹俊。
最后一種方法是基于知識(shí)的推薦算法垦沉,也有人將這種方法歸為基于內(nèi)容的推薦,這種方法比較典型的是構(gòu)建領(lǐng)域本體仍劈,或者是建立一定的規(guī)則厕倍,進(jìn)行推薦。 混合推薦算法贩疙,則會(huì)融合以上方法讹弯,以加權(quán)或者串聯(lián)、并聯(lián)等方式盡心融合这溅。 當(dāng)然组民,推薦系統(tǒng)還包括很多方法,其實(shí)機(jī)器學(xué)習(xí)或者數(shù)據(jù)挖掘里面的方法悲靴,很多都可以應(yīng)用在推薦系統(tǒng)中臭胜,比如說(shuō)LR、GBDT癞尚、RF(這三種方法在一些電商推薦里面經(jīng)常用到)耸三,社交網(wǎng)絡(luò)里面的圖結(jié)構(gòu)等,都可以說(shuō)是推薦方法浇揩。
參考架構(gòu)