小程序商城Mall,打造最佳SpringCloudAlibaba最佳實踐


背景

由於一路一來看過很多的技術體系,也見證一些技術體系停止維護,想用自己覺得比較好的一套技術體系來做一個分布式微服務系統,包括開發層面,中間件層面和運維層面的技術,作為自己希望的一個技術團隊里的技術棧。
這年SpringCloud開始把以前的技術給停止維護了,如eureka、feign、zuul,還有當當網的那個elastic-job,當當網都要掛了。所以出於這些原因,想換一套好使的技術棧。

而且我看了其他的商城的項目,要么就是不使用微服務的,要么就是只寫了后端或者前端的,或者是知識純粹用技術把功能給寫出來,搬磚實現玩功能,做完而已,所以還是想自己按照真實一點的樣子來開發,試着解決和做如何可靠和穩定分布式服務方案。

上面背景圖也是我弄的,厲不厲害

本文目的

  1. 給大家介紹一下整體的設計和某些設計時,所用那款技術棧的原因。
  2. 介紹開發小程序所用工具,着手前端開發
  3. 以后逐一介紹每個技術場景的要點、技術難點
  4. 一些東西只是在開發中,也還沒完成。
  5. 本文也是為了自己寫一下自己喜歡的技術,留個底。

歡迎關注公眾號,文章更快一步

我的公眾號 :地藏思維

image

技術架構

這次主要轉站SpringCloudAlibaba

服務治理:

springCloud Dubbo,因為SpringCloud原來那套都停止維護了。
雖然這次用回dubbo了,但是有些人說問是否后悔從dubbo轉springCloud,不會后悔呀,因為那時候dubbo只有服務調度治理功能,沒啥周邊配套的。
服務降級也是因為Hystrix不用了,所以用Sentinel

服務網關:

以前呆過的公司,是由一個java服務作為app的服務端,再聚合下游多個服務再提供給接口包一層返回給app的,還有那些鑒權功能,這次使用SpringCloud gateway轉發和鑒權。鑒權部分換了方式,這個點比較關鍵,放到后面業務系統設計來說。

消息隊列:

使用RocketMq,而不用rabbitMq(慢),也不用Kafka(沒有tag分標簽的功能,一個隊列多個消費者會消費相同的東西)

分布式事務:

就是跨系統的事務,以前都是使用最終一致性,異步處理的方式,這次看有沒有場景使用到分布式同步的事務,之前了解的是用LCN國人開發的框架,這次想用阿里的Seata。(目前開發中的還沒有使用上)

規則引擎:

圖上沒寫,這里說一下是使用drools,就是用於營銷服務的,是做那個店鋪里的各個優惠的規則,如:滿100減去10,滿3件減10塊,滿多少送1個物品的這些規則。其實都可以用規則引擎來做,以前呆過的網貸公司,那時是用於對接n第三方時不同規則。

定時任務調度:

SchedulerX,而不用elastic-job,因為當當要掛了。唯品會用elastic-job封裝了一下搞兩個叫saturn,而虎牙又把saturn封裝,這次調研一下SchedulerX,看看哪個好使。

自研自動生成RestFul接口:

這個是我自己做的一個框架,concise-mvc,簡約mvc生成器,因為微服務現在都是用dubbo調用了,沒有http協議的接口給springCloudgateway或者上層應用使用。所以搞了個根據某個特制的注解下的interface,都生成:/ #{interface名字}/#{方法名字}的uri。這樣開發者就可以只開發dubbo接口,自動生成好http接口讓gateway來調用。

前端:

前端目前只做小程序端,不做pc端,這次前端也是我自己寫,使用uniapp,這個框架呢是可以用一份代碼,實現微信、抖音、百度等小程序的編譯,他編譯會自動轉換為各個平台需要的接口。他會搭建好導航欄,路由到哪個頁面,我們只需要寫邏輯、對接后端接口、樣式與交互就可以了。並且封裝好一些按鈕等組件樣式,可以到他們的市場上下載。

為什么不用他來實現pc端的前端代碼,是因為pc比較大,樣式布局就不一樣了。

后台管理系統

是使用vueadmin的框架,也是跟uniapp那樣給你做好了導航欄那些,跳轉那些。在里面寫實現就好了。

運維設施方面技術棧是我在貸款公司里覺得比較好使的一些組件,后面去的公司也很多都用那些,其中最好的是以前貸款公司基於k8s開發的系統,因為其他的公司搞的k8s部署就只能一個test環境和prod環境。

其實那框里面很多都是本項目中我不會去做的,因為沒有時間做太多,可能會找別人幫忙部署。

微服務划分

UDB系統

我看很多個系統里都有個叫security的服務,但是他們只是做鑒權功能。而這里為什么叫udb,是因為我在一個互聯網公司的時候這個系統不只是僅僅的鑒權,而是做了統一帳號的功能,就是讓微信、手機登陸、QQ的授權登錄,都統一一個地方,讓相同的人的微信號、qq號都綁定為一個號碼。並且生成出一個id,作為userId,讓業務其他系統都通過此id統一來交互。

微信授權其實也是oauth2的。

這樣統一個鑒權的地方,生成的token就可以包含userId,這個使得開發springCloudgateway,可以使用GatewayFilter統一攔截數據的接口,filter里先做鑒權,讓udb系統返回userid,然后把userid,塞到Http的body里面,讓gateway下游系統使用這個userId,這樣就能保證用戶自己才能修改自己的數據,不會修改了別人id的數據,除非你把token都給別人了。

通過這樣的結合Udb系統和springCloudgateway,就可以統一userId交互,統一鑒權,別各個項目,如一時電商一時點餐,當相同的人的時候就一個userId不同appId區分就好了,不然一個人來相同的企業有不同的身份證號,你看工商銀行app和e融app里面也是相同的自然人號,不同的業務id。

營銷服務

這里包括優惠券,促銷活動,商家活動的優惠方式,其中上文說到的店鋪優惠,一時滿100減去10,一時滿3件減10塊,如果你用傳統方式,都存到表里叫商店優惠規則,一個商店就有多個規則,那你優惠條件有很多種,每種又有不同結果,在代碼里if else很麻煩的,所以先建議使用drools,后再講怎么用。

其他的服務我覺得很常規,就看扣錢扣商品的時候是最終一致性還是要做分布式事務那些不詳細講了。

已開發完成樣例

結語

總有一天大家也會獨立完成自己喜歡的系統,搭建自己的玩具。
關注公眾號留言領項目工程結構。


歡迎關注公眾號,文章更快一步

我的公眾號 :地藏思維

掘金:地藏Kelvin

簡書:地藏Kelvin

我的Gitee: 地藏Kelvin https://gitee.com/kelvin-cai


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM