大四了,即將面臨畢業(yè)了,畢設(shè)也就如期而至,本科論文當(dāng)然是比較水的啦~選擇了一個自己比較喜歡的微服務(wù)化項目開始著手了。下面就大體說一下我是如何對一個單體服務(wù)進行拆分的
首先放上原項目的地址
https://github.com/stalary/personfilter

可以看出當(dāng)時做的時候用了不少中間件,LightMQ呢是為了替代kafka自己寫了一套較為簡單的消息隊列(弱雞學(xué)生機根本帶不動zk+kafka啊),MapDB則是一款嵌入式數(shù)據(jù)庫,而WebSocket則是為了做服務(wù)端推送(推送消息),大體就是提供了一個招聘系統(tǒng)的基本功能,下面我就介紹一下我是如何拆分的吧。
首先,要對各種中間件進行選型。
注冊中心:注冊中心并沒有選擇常用的Eureka或者Consul,而是選擇了阿里開源不久的Nacos,總體來說,Nacos還是不錯的,將注冊中心和配置中心集成,這樣我也就不用再去使用SpringCloud-Config(需要依賴于git修改配置)
流量監(jiān)控:因為Hystrix已經(jīng)停止開發(fā)了,所以選擇了阿里開源的Sentinel,由于開源已經(jīng)許久,所以沒有碰上什么坑,體驗還是不錯的。
鏈路追蹤:選擇了業(yè)界比較常規(guī)的Zipkin+Sleuth,其中遇到了一點小問題,就是和Nacos兼容不太好,Nacos地址強制不能輸入http前綴,但是Sleuth又需要,引起了一些小問題,所以需要單獨向Nacos注冊一個當(dāng)前服務(wù)器地址的服務(wù)。。。不然會一直報錯哦,這里跟Nacos提了Issue,但是好像對方并沒有懂我的意思。
網(wǎng)關(guān):網(wǎng)關(guān)沒有使用Zuul,因為聽說性能不太好(我這種小流量其實也感覺不出來),選擇了SpringCloud-Gateway,用起來還是比較舒服的,把登陸校驗的工作全部放在了網(wǎng)關(guān)中。這樣就不用在每一個服務(wù)中寫重復(fù)的攔截器了。
服務(wù)調(diào)用:既然使用了SpringCloud那就少不了Http調(diào)用了,我選擇了Feign,不得不說,封裝的真的很棒,用起來很爽~
部署:前一陣子剛學(xué)習(xí)了一波k8s,當(dāng)然要趁熱打鐵,所以服務(wù)全部Docker化,部署在了k8s上。
選型完成以后呢,就要對服務(wù)進行拆分了,我是拆分成了如下幾個子服務(wù),真正使用起來后發(fā)現(xiàn)其實拆的還是過于散了。?;ハ嗾{(diào)用過多。

我將整個項目拆分為了以上幾個部分
消費者服務(wù),基于LightMQ,用于消費簡歷投遞,簡歷處理,簡歷接收幾個消息。
網(wǎng)關(guān)服務(wù),這個就是SpringCloud-Gateway,做了一些登陸校驗的工作。
站內(nèi)信服務(wù),用于消息中心的消息發(fā)送,讀取等,未來考慮加入實時會話的功能。
外部服務(wù),將短信驗證碼,郵件服務(wù),上傳頭像的服務(wù)進行抽離。
push服務(wù),用來向前端推送消息中心消息數(shù)量。
招聘服務(wù),包括公司信息和崗位信息,提供一些增刪改查的操作。
簡歷服務(wù),用于對用戶簡歷的增刪查改,由于使用MongoDB,所以單獨抽離出來進行處理。
用戶服務(wù),用于用戶的登陸注冊等一些基礎(chǔ)服務(wù)(直接調(diào)用之前寫的UserCenter)。

一個單體架構(gòu)的微服務(wù)化就介紹到這里啦~感興趣的可以去github看一下源碼,滿意的話麻煩賞顆????
https://github.com/stalary/microservice-recruit