因爲一路一來看過不少的技術體系,也見證一些技術體系中止維護,想用本身以爲比較好的一套技術體系來作一個分佈式微服務系統,包括開發層面,中間件層面和運維層面的技術,做爲本身但願的一個技術團隊裏的技術棧。
這年SpringCloud開始把之前的技術給中止維護了,如eureka、feign、zuul,還有當當網的那個elastic-job,噹噹網都要掛了。因此出於這些緣由,想換一套好使的技術棧。前端
並且我看了其餘的商城的項目,要麼就是不使用微服務的,要麼就是隻寫了後端或者前端的,或者是知識純粹用技術把功能給寫出來,搬磚實現玩功能,作完而已,因此仍是想本身按照真實一點的樣子來開發,試着解決和作如何可靠和穩定分佈式服務方案。vue
個人公衆號 :地藏思惟java
此次主要轉站SpringCloudAlibabagit
springCloud Dubbo,由於SpringCloud原來那套都中止維護了。
雖然此次用回dubbo了,可是有些人說問是否後悔從dubbo轉springCloud,不會後悔呀,由於那時候dubbo只有服務調度治理功能,沒啥周邊配套的。
服務降級也是由於Hystrix不用了,因此用Sentinelspring
之前呆過的公司,是由一個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,看看哪一個好使。mvc
這個是我本身作的一個框架,concise-mvc,簡約mvc生成器,由於微服務如今都是用dubbo調用了,沒有http協議的接口給springCloudgateway或者上層應用使用。因此搞了個根據某個特製的註解下的interface,都生成:/ #{interface名字}/#{方法名字}的uri。這樣開發者就能夠只開發dubbo接口,自動生成好http接口讓gateway來調用。
前端目前只作小程序端,不作pc端,此次前端也是我本身寫,使用uniapp,這個框架呢是能夠用一份代碼,實現微信、抖音、百度等小程序的編譯,他編譯會自動轉換爲他們須要的接口。爲何不用他來實現pc端的前端代碼,是由於pc比較大,樣式佈局就不同了。
是使用vueadmin的框架,也是跟uniapp那樣給你作好了導航欄那些,跳轉那些。在裏面寫實現就行了。
運維設施方面技術棧是我在貸款公司裏以爲比較好使的一些組件,後面去的公司也不少都用那些,其中最好的是之前貸款公司基於k8s開發的系統,由於其餘的公司搞的k8s部署就只能一個test環境和prod環境。
其實那框裏面不少都是本項目中我不會去作的,由於沒有時間作太多,可能會找別人幫忙部署。
我看不少個系統裏都有個叫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
本文由博客一文多發平臺 OpenWrite 發佈!