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