<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
微服務架構是一種架構風格,它將一個大的系統構建為多個微服務的集合,這些微服務是圍繞業務功能構建的,服務關注單一的業務功能,這些服務具有以下特點:
微服務架構能夠快速、頻繁、可靠地交付大型、複雜的應用程式,通過業務拆分實現服務元件化,使用元件進行組合從而快速開發系統。
我們首先進行微服務的劃分,在實際的專案開發中,我們通常採用兩種微服務劃分策略,第一種方式是通過業務職能進行微服務邊界的劃分,第二種方式是通過DDD的界限上下文進行微服務邊界的劃分,我們這裡採用大家比較容易理解的業務職能的方式進行微服務劃分,再次貼上我們電商專案的思維導圖:
從以上思維導圖可以看出整個電商系統功能還是比較多的,我們根據業務職能做如下微服務的劃分:
一般對使用者端我們都會採用HTTP介面的方式提供服務,那是不是以上劃分的這些微服務都需要直接提供HTTP介面對外提供服務呢?這樣當然可以,架構整體看起來也比較簡單。
BFF層的引入解決了我們上面遇到的問題,但增加一層就會增加架構的複雜度,所以如果你的服務是一個單體應用的話,那麼BFF是不必要的,引入它不會增加任何價值。對於我們這個專案來說,我們的應用程式依賴於微服務,同時我們需要面向業務功能提供HTTP介面和要保證介面的高可用,所以BFF對於我們這個專案來說是一個合適的選擇。
我們可以提供多個BFF嗎?答案是當然可以。BFF的目的是為使用者端提供一個集中的介面,例如行動端頁面和瀏覽器頁面的資料協定不同,這種情況下為了更好的表示資料,可以使用兩個BFF,同時只供一個BFF如果該BFF異常就會導致所有的業務受影響,提供多個BFF也可以提高服務的可用性,降低業務異常的影響面。多個BFF架構圖如下:
我們的這個專案為了簡化只會採用一個BFF服務。
我們採用集中管理的方式,把所有的服務放到一個大倉庫中,倉庫的目錄結構如下:
lebron為工程名,lebron下面有apps和pkg兩個目錄,其中apps存放的是我們所有的微服務,比如order為訂單相關的微服務,pkg目錄為所有服務共同依賴的包的存放路徑,比如所有的服務都需要依賴鑑權就可以放到pkg目錄下。
在每個服務目錄下我們又會分為多個服務,主要會有如下幾類服務:
apps目錄下每個服務的結構如下:
大多服務都會拆分成rpc、rmq和admin來滿足對內提供rpc介面和運營資料的需求,同時通過rmq來處理流式任務。比較特殊的是app下只有api服務,因為app是BFF所有隻有api服務,後面可能會增加rmq服務,比如來流式處理使用者每天首次登陸加經驗之類的邏輯,我們後面可以隨時擴充套件,暫時先只提供api服務。recommend只有rpc服務,因為推薦服務需要依賴AI團隊或者巨量資料團隊提供的資料,我們只需要請求對應的資料介面和做一些滿足業務的處理即可,所以這裡recommend只有rpc服務。
整個工程的結構已經定義清楚了,下面我們做服務程式碼的初始化
我們使用goctl來進行專案的初始化,比如我們先初始化order,先進入order目錄下:
$ cd lebron/apps/order
執行如下命令即可初始化order rpc程式碼
$ goctl rpc new rpc
生成的程式碼結構如下:
執行如下命令即可初始化order admin程式碼,注意order admin為api服務,直接對前端提供HTTP介面
$ goctl api new admin
生成的程式碼結構如下:
生成的服務程式碼我們可以直接執行,預設偵聽在8888埠
$ go run admin.go Starting server at 0.0.0.0:8888...
對於rmq服務我們會使用go-zero提供的 kq 功能,這裡先初始化main.go
到這裡order服務的程式碼初始化已經完成,其他服務和order服務類似,這裡就不再贅述了。
pkg下目前不需要初始化,當我們需要提供業務通用功能的時候我們再進行新增。
本篇我們講解了微服務的定義,微服務是圍繞業務功能構建的,服務關注單一的業務,服務間採用輕量級的通訊機制,每個微服務都可以獨立的部署和測試。
我們根據商城功能進行了微服務的拆分,主要拆分了購物車、訂單、支付、商品、評論、推薦、賬號等服務,然後我們又說明了為什麼需要引入BFF服務,BFF本質上是一個用於做資料組裝的服務,對外提供面向業務功能的或者說面向使用者端UI的HTTP介面。
接著我們定義了我們這個工程的目錄結構,主要分為api、rpc、rmq和admin等服務,不同服務的職責不同,api對外提供HTTP介面,rpc對內提供RPC介面,rmq做流式資料的處理,admin面向運營後臺提供HTTP介面。
最後我們通過goctl對專案做了初始化,使用goctl可一鍵生成專案框架程式碼,大大提供了生產力。
程式碼倉庫:github.com/zhoushuguan…
參考
https://microservices.io/index.html
專案地址:https://github.com/zeromicro/go-zero
更多關於go zero服務拆分的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45