文|吳復(fù)磊
簡而言之,微服務(wù)就是一些協(xié)同工作小而自治的服務(wù)。微服務(wù)將一個完整的應(yīng)用從數(shù)據(jù)存儲到業(yè)務(wù)邏輯開發(fā)垂直切分為多個不同的服務(wù),每個服務(wù)都具有自己的獨(dú)立生命周期和服務(wù)邊界,可以獨(dú)立部署、獨(dú)立維護(hù)、獨(dú)立擴(kuò)展,服務(wù)與服務(wù)之間通過統(tǒng)一風(fēng)格協(xié)議(RESTFUL)的API進(jìn)行通信。微服務(wù)架構(gòu)相對于傳統(tǒng)單體架構(gòu)具有足多優(yōu)勢:技術(shù)異構(gòu)性、系統(tǒng)融錯性好、高可擴(kuò)展性、部署簡單。
1.主要技術(shù)框架。SpringCloud 是一系列框架的有序集合。它利用Spring Boot的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊、配置中心、消息總線、負(fù)載均衡、熔斷器、數(shù)據(jù)監(jiān)控等,都可以用Spring Boot的開發(fā)風(fēng)格做到一鍵啟動和部署。
SpringCloud核心組件包括:服務(wù)發(fā)現(xiàn)組件Eureka、服務(wù)間的調(diào)用組件Feign、熔斷器Hystrix、微服務(wù)網(wǎng)關(guān)Zuul、基于JWT的Token認(rèn)證機(jī)制JJWT等。
2.系統(tǒng)設(shè)計和實現(xiàn)。針對文件存儲系統(tǒng)的特點,結(jié)合微服務(wù)架構(gòu)的拆分原則,將其劃分為用戶服務(wù)、文件服務(wù)、索引服務(wù)和接入層服務(wù)。
(1)整體架構(gòu)。系統(tǒng)分為用戶服務(wù)、文件服務(wù)、索引服務(wù)和接入層服務(wù)。用戶服務(wù)作為一個基礎(chǔ)服務(wù),主要關(guān)注與用戶相關(guān)的數(shù)據(jù)操作,主要有用戶管理、部門管理、角色管理、權(quán)限管理、密碼管理等功能。文件服務(wù)實現(xiàn)文件的上傳下載、共享、刪除、目錄管理等功能,后臺使用mongodb 的gridfs存儲文件。索引服務(wù)使用ElasticSearch分布式搜索引擎實現(xiàn)對文件的全文檢索功能。接入層服務(wù)是提供給用戶的接口,做數(shù)據(jù)聚合展示。
(2)數(shù)據(jù)庫設(shè)計。數(shù)據(jù)庫庫的設(shè)計與三個服務(wù)相匹配。用戶服務(wù)采用關(guān)系型數(shù)據(jù)庫MySQL;文件服務(wù)使用非結(jié)構(gòu)化數(shù)據(jù)庫MongoDB,主要使用MongoDB的Gridfs文件系統(tǒng)存儲文件;索引服務(wù)使用ElasticSearch分布式索引引擎保存文件的索引。(a)用戶服務(wù)設(shè)計的數(shù)據(jù)庫包括用戶表、角色表、權(quán)限菜單表、部門表存。(b)文件服務(wù)使用MongoDB數(shù)據(jù)庫。GridFS是MongoDB的一個子模塊,用于存儲文件,通常用來存儲超過16M的大文件。文件存儲系統(tǒng)主要用來存儲大文件,剛好符合GridFS的特點。(c)索引服務(wù)使用ElasticSearch分布式搜索引擎存儲文件的索引,使用logstash工具自動從MongoDB的document集合中搜集 filename字段和content字段的內(nèi)容,交給ElasticSearch做索引。Logstash工具實現(xiàn)mongodb數(shù)據(jù)庫和ElasticSearch的自動同步。
(3)微服務(wù)的實現(xiàn)和部署。用戶微服務(wù)的實現(xiàn)使用SpringDataJpa,文件服務(wù)的實現(xiàn)使用SpringDataMongoDB,索引服務(wù)使用ElasticSearch+logstash實現(xiàn)。微服務(wù)通過docker容器進(jìn)行部署,部署前修改每個服務(wù)的yml配置文件,添加注冊Eureka服務(wù)的配置和Zuul網(wǎng)關(guān)的配置。使用dockerfile生成鏡像,部署在k8s+docker集群中,運(yùn)行服務(wù),服務(wù)會根據(jù)配置文件中的Eureka的注冊地址進(jìn)行注冊。微服務(wù)之間通過Feign相互調(diào)用。Zuul網(wǎng)關(guān)為外部請求提供一個統(tǒng)一的地址。SpringCloud各個組件的調(diào)用關(guān)系如下圖所示。
1.完善微服務(wù)架構(gòu)基礎(chǔ)環(huán)境。微服務(wù)架構(gòu)的基礎(chǔ)環(huán)境包括服務(wù)器、存儲、網(wǎng)絡(luò)和軟件。建議搭建k8s+docker集群,一個存儲(NAS或SAN)。搭建本地yum倉庫和docker鏡像倉庫,便于部署k8s+docker集群。
2.開發(fā)公共基礎(chǔ)微服務(wù)。首先開發(fā)基礎(chǔ)服務(wù)比如部門、用戶、權(quán)限等公共的服務(wù),后期開發(fā)其它應(yīng)用是可直接調(diào)用這些基礎(chǔ)服務(wù)。
3.分析現(xiàn)有應(yīng)用,逐步向微服務(wù)架構(gòu)遷移。對先有應(yīng)用進(jìn)行分析,按照微服務(wù)的設(shè)計原則,拆分出具有獨(dú)立功能內(nèi)聚性很強(qiáng)的功能,作為一個微服務(wù)開發(fā)部署。有計劃有步驟的將現(xiàn)有應(yīng)用完成微服務(wù)的改造。
4.加強(qiáng)學(xué)習(xí)培訓(xùn)。微服務(wù)架構(gòu)涉及的新技術(shù)較多,SpringCloud架構(gòu)下就需要掌握7個以上的關(guān)鍵技術(shù)。建議多組織相關(guān)的培訓(xùn),科技人員也要通過自學(xué)掌握微服務(wù)的技術(shù),為向微服務(wù)架構(gòu)轉(zhuǎn)型做好技術(shù)及知識儲備。