本文分別從整體層級、開發(fā)視圖、部署視圖三個角度,對整個系統(tǒng)的微服務(wù)架構(gòu)進(jìn)行“解剖”。整體層級關(guān)注調(diào)用的層級(從終端人機(jī)界面到物聯(lián)網(wǎng));開發(fā)視圖則主要面向開發(fā)人員,描述了系統(tǒng)工程結(jié)構(gòu)、模塊及關(guān)聯(lián)關(guān)系;部署視圖則是系統(tǒng)最終部署時的拓?fù)鋱D;通過這些視角可以較為清晰的明白整個微服務(wù)架構(gòu)設(shè)計思路。
創(chuàng)新互聯(lián)專注于寶山企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,成都商城網(wǎng)站開發(fā)。寶山網(wǎng)站建設(shè)公司,為寶山等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)自頂向下的一張調(diào)用層次關(guān)系圖:
詳細(xì)的說明,見下方的開發(fā)視圖和部署視圖。
下圖僅對微服務(wù)部分進(jìn)行描述,前端架構(gòu)不是本文重點部分,在下一節(jié)的部署圖中會作說明:
微服務(wù)開發(fā)視圖展示了java開發(fā)環(huán)境中有哪些具體的工程、工程之間的依賴關(guān)系,關(guān)鍵點說明如下:
上圖中的每一個組件框代表了一個工程,所有工程都采用spring boot構(gòu)建,都通過繼承基礎(chǔ)POM,通過maven來進(jìn)行多工程之間的依賴管理;
右側(cè)的基礎(chǔ)工程以jar包方式被所有微服務(wù)工程引用,通用服務(wù)則是單獨運行起來,供其所有工程以restful接口方式調(diào)用。
微服務(wù)目前劃分為5個,分別是公式超市、行業(yè)記錄、圖庫、用戶子系統(tǒng)、共用服務(wù),具體詳細(xì)設(shè)計時會進(jìn)行細(xì)化完善,設(shè)計為可以單獨運行(啟動多個獨立進(jìn)程),也可以合并(該工程通過引用jar包方式合并)在一個工程運行(啟動一個進(jìn)程),主要是視用戶規(guī)模來定(代碼工程為一套,只是打包時不一樣或作少量代碼配置修改即可完成不同的部署方式);
微服務(wù)分為客戶端和服務(wù)端,服務(wù)端支持HA部署,上圖設(shè)計和下方部署設(shè)計中客戶端不是直接調(diào)用服務(wù)端,也可以依據(jù)項目進(jìn)度緊迫性要求,先可以讓客戶端(前端)直接訪問微服務(wù),而是通過eurake注冊中心,還有熔斷、網(wǎng)關(guān)等服務(wù)通過spring cloud組件完成,只需少量配置即可。
部署圖更為直觀地展示了服務(wù)之間的調(diào)用關(guān)系、各服務(wù)部署情況。如下圖:
上圖中調(diào)用關(guān)系看起來較復(fù)雜,按以下思路看圖:
實際上都是以服務(wù)注冊中心和相關(guān)組件為中心,見上圖中的橙色部分,這部分的服務(wù)都可以直接采用spring cloud提供的現(xiàn)成組件,除網(wǎng)關(guān)可能有較多業(yè)務(wù)代碼外,其它只需要做少量配置即可,入門門檻很低;
業(yè)務(wù)類微服務(wù),見下方中間部分是具體restful接口api,同常規(guī)的spring boot工程沒有太大區(qū)別,關(guān)鍵在于充分的理解業(yè)務(wù),進(jìn)行較為合理的劃分;
通用類服務(wù),這部分主要一些通用服務(wù),其中消息對列(kafka/emq/rabbitmq等)可以直接采用開源組件即可,認(rèn)證授權(quán)是對整個受限訪問資源訪問控制,可以采用JWT方式進(jìn)行認(rèn)證,可以在業(yè)務(wù)類客戶端調(diào)用,也可以在網(wǎng)關(guān)調(diào)用(或者直接寫到網(wǎng)關(guān)代碼中); 消息推送服務(wù),主要是對一些需要即時推送的消息進(jìn)行立即推送服務(wù),pc瀏覽器可以采用webstocket方式推送,手機(jī)端可以采用極光等第三方推送服務(wù);
持久化部分,見左側(cè)部分,分別對不同的存儲場景,使用不同的存取方式,對大多數(shù)系統(tǒng)來說可能只需要一個關(guān)系型數(shù)據(jù)庫,但有些情況還是需要用到nosql、分布多文件系統(tǒng),但一般nosql用于解決關(guān)系簡單大表的存儲和查詢,常規(guī)的業(yè)務(wù)還是建議放到關(guān)系統(tǒng)數(shù)據(jù)庫中;
右側(cè)部分為客戶端部分,這里有兩種方式:
A.加入一層微服務(wù)客戶端,主要為了更好的處理訪問時的負(fù)載均衡、容斷、restful服務(wù);
B.直接調(diào)用網(wǎng)關(guān),網(wǎng)關(guān)再調(diào)用具體的微服務(wù),見上圖中虛線部分;
不管采用哪種方式,本案例中采用的是前后分離的開發(fā)模式,在ngnix中放置前端開發(fā)的代碼(如vue.js+elementUI或bootstrap、layui等)直接配置到ngnix中或者用node.js啟動后,在ngnix的配置文件中進(jìn)行代理。
最后看一下手機(jī)端,不管采用原生的開發(fā)還是html5+css3方式開發(fā),其調(diào)用接口將保持不變,建議一般要求不高的場景下采用html5開發(fā),這樣基本上前端人員即可完成移動端開發(fā)工作,原生開發(fā)則需要分別招聘andriod/ios開發(fā)人員。
個人認(rèn)為,其實大部分情況下中小型系統(tǒng)不適合采用微服務(wù)架構(gòu),一個系統(tǒng)跑下來,即使是一個小網(wǎng)站,也要啟動很多服務(wù)進(jìn)程,雖然解決了性能、HA單點問題,方便日后分模塊進(jìn)行升級,但對人員的要求相對要高很多,開發(fā)工作量要比單體應(yīng)用高出很多,如果沒有專業(yè)的團(tuán)隊,很可能實際的性能、可靠性反而降低了。另外開發(fā)微服務(wù)在開發(fā)過程中也需解決很多低效的開發(fā)問題,如應(yīng)采用代碼生成器和形成很多團(tuán)隊開的規(guī)范的約定。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。