基于SpringCloud的微服務(wù)架構(gòu)演變史臀栈?

前言

一段時期以來 “微服務(wù)架構(gòu) ”一直是一個熱門詞匯蔫慧,各種技術(shù)類公眾號或架構(gòu)分享會議上,關(guān)于微服務(wù)架構(gòu)的討論和主題也都非常多权薯。對于大部分初創(chuàng)互聯(lián)網(wǎng)公司來說姑躲,早期的單體應(yīng)用結(jié)構(gòu)才是最合適的選擇,只有當業(yè)務(wù)進入快速發(fā)展期盟蚣,在系統(tǒng)壓力黍析、業(yè)務(wù)復(fù)雜度以及人員擴展速度都快速上升的情況下,如何快速屎开、穩(wěn)妥有序的將整個互聯(lián)網(wǎng)軟件系統(tǒng)升級成微服務(wù)架構(gòu)阐枣,以滿足業(yè)務(wù)發(fā)展需要及技術(shù)組織的重新塑造,才是進行微服務(wù)架構(gòu)的最主要的動力奄抽,否則空談微服務(wù)架構(gòu)是沒有意義的蔼两。

而一旦決定將整個應(yīng)用體系按照微服務(wù)架構(gòu)體系進行升級,就需要有組織有計劃的進行業(yè)務(wù)系統(tǒng)逞度、基礎(chǔ)架構(gòu)额划、運維體系等多個方面的升級配套。而另一個比較尷尬的現(xiàn)實是档泽,一般業(yè)務(wù)發(fā)展進入到需要進行微服務(wù)架構(gòu)層面的時候俊戳,業(yè)務(wù)發(fā)展往往又都是非常迅猛的,這種業(yè)務(wù)快速發(fā)展和增長的壓力往往又會給整個技術(shù)團隊帶來非常大的挑戰(zhàn)馆匿,因為此時你需要取舍抑胎,是簡單方案快速支撐呢?還是選擇適當長遠一點的方案渐北?當然這種情況大部分是技術(shù)細節(jié)方面的問題阿逃,掌控的“度”大部分情況是掌握在具體的工程師手中。

而如何整體上確保應(yīng)用體系及組織結(jié)構(gòu)向微服務(wù)時代快速、有序的跨越盆昙,是一件十分考驗團隊能力以及架構(gòu)管理水平的事羽历。能做到80分已然算優(yōu)秀了焊虏,因為這是有其客觀規(guī)律的淡喜!

作者自身親歷了一個快速發(fā)展的互聯(lián)網(wǎng)公司從單體應(yīng)用~以SpringCloud為技術(shù)棧的微服務(wù)架構(gòu)體系的全過程。本文將主要從技術(shù)角度與大家探討如何利用SpringCloud進行微服務(wù)架構(gòu)拆分诵闭,以及在這個過程中一點自己的思考炼团。水平有限,不足之處還請包涵疏尿!

系統(tǒng)架構(gòu)演變概述

在公司業(yè)務(wù)初創(chuàng)時期瘟芝,面對的主要問題是如何將一個想法變成實際的軟件實現(xiàn),在這個時候整個軟件系統(tǒng)的架構(gòu)并沒有搞得那么復(fù)雜褥琐,為了快速迭代锌俱,整個軟件系統(tǒng)就是由“App+后臺服務(wù)”組成,而后臺服務(wù)也只是從工程角度將應(yīng)用進行Jar包的拆分敌呈。此時軟件系統(tǒng)架構(gòu)如下:

而此時整個軟件系統(tǒng)的功能也比較簡單贸宏,只有基本的用戶、訂單磕洪、支付等功能吭练,并且由于業(yè)務(wù)流程沒有那么復(fù)雜,這些功能基本耦合在一起析显。而隨著App的受歡迎程度(作者所在的公司正好處于互聯(lián)網(wǎng)熱點)鲫咽,所以App下載量在2017年迅猛增長,在線注冊人數(shù)此時也是蹭蹭往上漲谷异。

隨著流量的迅猛增長分尸,此時整個后臺服務(wù)的壓力變得非常大,為了抗住壓力只能不斷的加機器歹嘹,平行擴展后臺服務(wù)節(jié)點箩绍。此時的部署架構(gòu)如下:

通過這種方式,整個軟件系統(tǒng)抗住了一波壓力荞下,然而系統(tǒng)往往還是會偶爾出點事故伶选,特別是因為api中的某個接口性能問題導(dǎo)致整個服務(wù)不可用,因為這些接口都在一個JVM進程中尖昏,雖然此時部署了多個節(jié)點仰税,但因為底層數(shù)據(jù)庫、緩存系統(tǒng)都是一套抽诉,所以還是會出現(xiàn)一掛全掛的情況陨簇。

另一方面,隨著業(yè)務(wù)的快速發(fā)展迹淌,以往相對簡單的功能變得復(fù)雜起來河绽,這些功能除了有用戶看得見的己单、也會包括很多用戶看不見的,就好像百度搜索耙饰,用戶能看見的可能只是一個搜索框纹笼,但是實際上后臺對應(yīng)的服務(wù)可能是成百上千,如有些增長策略相關(guān)的功能:紅包苟跪、分享拉新等廷痘。還有些如廣告推薦相關(guān)的變現(xiàn)功能等。

此外件已,流量/業(yè)務(wù)的增長也意味著團隊人數(shù)的迅速增長笋额,如果此時大家開發(fā)各自的業(yè)務(wù)功能還是用一套服務(wù)代碼,很難想象百十來號人篷扩,在同一個工程在疊加功能會是一個什么樣的場景兄猩。所以如何劃分業(yè)務(wù)邊界、合理的進行團隊配置也是一件十分迫切的事情了鉴未!

為了解決上述問題枢冤,適應(yīng)業(yè)務(wù)、團隊發(fā)展歼狼,架構(gòu)團隊決定進行微服務(wù)拆分掏导。而要實施微服務(wù)架構(gòu),除了需要合理的劃分業(yè)務(wù)模塊邊界外羽峰,也需要一整套完整的技術(shù)解決方案趟咆。

在技術(shù)方案的選擇上,服務(wù)拆分治理的框架也是有很多梅屉,早期的有如WebService值纱,近期的則有各種Rpc框架(如Dubbo、Thirft坯汤、Grpc)虐唠。而Spring Cloud則是基于Springboot提供的一整套微服務(wù)解決方案,因為技術(shù)棧比較新惰聂,并且各類組件的支撐也非常全面疆偿,所以Spring Cloud就成為了首選。

經(jīng)過一系列的重構(gòu)+擴展搓幌,整個系統(tǒng)架構(gòu)最終形成了以app為中心的一套微服務(wù)軟件系統(tǒng)杆故,結(jié)構(gòu)如下:

到這里,整個軟件系統(tǒng)就基于SpringCloud初步完成了微服務(wù)體系的拆分溉愁。支付处铛、訂單、用戶、廣告等核心功能抽離成獨立的微服務(wù)撤蟆,與此同時各自微服務(wù)對應(yīng)的數(shù)據(jù)庫也按照服務(wù)邊界進行了拆分奕塑。

在完成服務(wù)的拆分以后,原來功能邏輯之間的代碼調(diào)用關(guān)系家肯,轉(zhuǎn)換成了服務(wù)間網(wǎng)絡(luò)的調(diào)用關(guān)系龄砰,而各個微服務(wù)需要根據(jù)各自所承載的功能提供相應(yīng)的服務(wù),此時服務(wù)如何被其他服務(wù)發(fā)現(xiàn)并調(diào)用息楔,就成了整個微服務(wù)體系中比較關(guān)鍵的部分寝贡,使用過Dubbo框架的同學(xué)知道,在Dubbo中服務(wù)的注冊&發(fā)現(xiàn)是依賴于Zookeeper實現(xiàn)的值依,而在SpringCloud中我們是通過Consul來實現(xiàn)。另外在基于SpringCloud的架構(gòu)體系中碟案,提供了配置中心(ConfigServer)來幫助各個微服務(wù)管理配置文件愿险,而原本的api服務(wù),隨著各個功能的抽離价说,逐步演變成前置網(wǎng)關(guān)服務(wù)了辆亏。

聊到這里,基于SpringCloud我們進行了微服務(wù)拆分鳖目,而在這個體系結(jié)構(gòu)中扮叨,分別提到了Consul、ConfigServer领迈、網(wǎng)關(guān)服務(wù)這幾個關(guān)鍵組件彻磁,那么這幾個關(guān)鍵組件具體是如何支撐這個龐大的服務(wù)體系的呢?

SpringCloud關(guān)鍵組件

Consul

Consul是一個開源的狸捅,使用go語言開發(fā)的注冊中心服務(wù)衷蜓。它里面內(nèi)置了服務(wù)發(fā)現(xiàn)與注冊框架、分布一致性協(xié)議實現(xiàn)尘喝、健康檢查磁浇、Key/Value存儲、多數(shù)據(jù)中心等多個方案朽褪。在SpringCloud框架中還可以選擇Eurke作為注冊中心置吓,這里之所以選擇Consul主要原因在于Consul對異構(gòu)的服務(wù)的支持,如:grpc服務(wù)。

事實上缔赠,在后續(xù)的系統(tǒng)架構(gòu)演進中衍锚,在某些服務(wù)模塊進一步向子系統(tǒng)化拆分的過程中,就采用了grpc作為子系統(tǒng)服務(wù)間的調(diào)用方式橡淑。例如构拳,支付模塊的繼續(xù)擴張,對支付服務(wù)本身又進行了微服務(wù)架構(gòu)的拆分,此時支付微服務(wù)內(nèi)部就采用了grpc的方式進行調(diào)用置森,而服務(wù)注冊與發(fā)現(xiàn)本身則還是依賴于同一套Consul集群斗埂。

此時的系統(tǒng)架構(gòu)演進如下:

原有微服務(wù)架構(gòu)中的模塊服務(wù)在規(guī)模達到一定程度或復(fù)雜性達到一定程度后,都會朝著獨立的體系發(fā)展凫海,從而將整個微服務(wù)的調(diào)用鏈路變的非常長呛凶,而從Consul的角度看,所有的服務(wù)又都是扁平的行贪。

隨著微服務(wù)規(guī)模的越來越大漾稀,Consul作為整個體系的核心服務(wù)組件,在整個體系中處于關(guān)鍵的位置建瘫,一旦Consul掛掉崭捍,所有的服務(wù)都將停止服務(wù)。那么Consul到底是什么樣服務(wù)啰脚?其容災(zāi)機制又該如何設(shè)計呢殷蛇?

要保證Consul服務(wù)的高可用,在生產(chǎn)環(huán)境Consul應(yīng)該是一個集群(關(guān)于Consul集群的安裝與配置可以參考網(wǎng)絡(luò)資料)橄浓,這是毫無疑問的粒梦。而在Consul集群中,存在兩種角色:Server荸实、Client匀们,這兩種角色與Consul集群上運行的應(yīng)用服務(wù)并沒有什么關(guān)系,只是基于Consul層面的一種角色劃分准给。實際上泄朴,維持整個Consul集群狀態(tài)信息的還是Server節(jié)點,與Dubbo中使用Zookeeper實現(xiàn)注冊中心一樣圆存,Consul集群中的各個Server節(jié)點也需要通過選舉的方式(使用GOSSIP協(xié)議叼旋、Raft一致性算法,這里不做詳細展開沦辙,在后面的文章中可以和大家單獨討論)來選舉整個集群中的Leader節(jié)點來負責處理所有查詢和事務(wù)夫植,并向其他節(jié)點同步狀態(tài)信息。

Client角色則是相對無狀態(tài)的油讯,只是簡單的代理轉(zhuǎn)發(fā)RPC請求到Server節(jié)點详民,之所以存在Client節(jié)點主要是分擔Server節(jié)點的壓力,作一層緩沖而已陌兑,這主要是因為Server節(jié)點的數(shù)量不宜過多沈跨,因為Server節(jié)點越多也就意味著達成共識的過程越慢,節(jié)點間同步的代價也就越高兔综。對于Server節(jié)點饿凛,一般建議3-5臺狞玛,而Client節(jié)點則沒有數(shù)量的限制,可以根據(jù)實際情況部署數(shù)千或數(shù)萬臺涧窒。事實上心肪,這也只是一種策略,在現(xiàn)實的生產(chǎn)環(huán)境中纠吴,大部分應(yīng)用只需要設(shè)置3~5臺Server節(jié)點就夠了硬鞍,作者所在的公司一套生產(chǎn)集群中的Consul集群的節(jié)點配置就是5個Server節(jié)點,并沒有額外再設(shè)置Client節(jié)點戴已。

另外固该,在Consul集群中還有一個概念是Agent,事實上每個Server或Client都是一個consul agent糖儡,它是運行在Consul集群中每個成員上的一個守護進程伐坏,主要的作用是運行DNS或HTTP接口,并負責運行時檢查和保持服務(wù)信息同步休玩。我們在啟動Consul集群的節(jié)點(Server或Client)時著淆,都是通過consul agent的方式啟動的。例如:

consul agent -server -bootstrap -syslog \
    -ui \
    -data-dir=/opt/consul/data \
    -dns-port=53
    -recursor=10.211.55.3
    -config-dir=/opt/consul/conf \
    -pid-file=/opt/consul/run/consul.pid \
    -client=10.211.55.4 \
    -bind=10.211.55.4 \
    -node=consul-server01 \
    -disable-host-node-id &

以實際的生產(chǎn)環(huán)境為例拴疤,Consul集群的部署結(jié)構(gòu)示意圖如下:

實際生產(chǎn)案例中并沒有設(shè)置Client節(jié)點,而是通過5個Consul Server節(jié)點組成的集群独泞,來服務(wù)整套生產(chǎn)集群的應(yīng)用注冊&發(fā)現(xiàn)呐矾。這里有細節(jié)需要了解下,實際上5個Consul Server節(jié)點的IP地址是不一樣的懦砂,具體的服務(wù)在連接Consul集群進行服務(wù)注冊與查詢時應(yīng)該連接Leader節(jié)點的IP蜒犯,而問題是,如果Leader節(jié)點掛掉了荞膘,相應(yīng)的應(yīng)用服務(wù)節(jié)點罚随,此時如何連接通過Raft選舉產(chǎn)生的新Leader節(jié)點呢?難道手工切換IP不成羽资?

顯然手工切換IP的方式并不靠譜淘菩,而在生產(chǎn)實踐中,Consul集群的各個節(jié)點實際上是在Consul Agent上運行DNS(如啟動參數(shù)中紅色字體部分)屠升,應(yīng)用服務(wù)在連接Consul集群時的IP地址為DNS的IP潮改,DNS會將地址解析映射到Leader節(jié)點對應(yīng)的IP上,如果Leader節(jié)點掛掉腹暖,選舉產(chǎn)生的新Leader節(jié)點會將自己的IP通知DNS服務(wù)汇在,DNS更新映射關(guān)系,這一過程對各應(yīng)用服務(wù)則是透明的脏答。

通過以上分析糕殉,Consul是通過集群設(shè)計亩鬼、Raft選舉算法,Gossip協(xié)議等機制來確保Consul服務(wù)的穩(wěn)定與高可用的阿蝶。如果需要更高的容災(zāi)級別雳锋,也可以通過設(shè)計雙數(shù)據(jù)中心的方式,來異地搭建兩個Consul數(shù)據(jù)中心赡磅,組成一個異地災(zāi)備Consul服務(wù)集群魄缚,只是這樣成本會更高,這就看具體是否真的需要了焚廊。

ConfigServer(配置中心)

配置中心是對微服務(wù)應(yīng)用配置進行管理的服務(wù)虐急,例如數(shù)據(jù)庫的配置、某些外部接口地址的配置等等许溅。在SpringCloud中ConfigServer是獨立的服務(wù)組件寄月,它與Consul一樣也是整個微服務(wù)體系中比較關(guān)鍵的一個組件,所有的微服務(wù)應(yīng)用都需要通過調(diào)用其服務(wù)袒餐,從而獲取應(yīng)用所需的配置信息飞蛹。

隨著微服務(wù)應(yīng)用規(guī)模的擴大,整個ConfigServer節(jié)點的訪問壓力也會逐步增加灸眼,與此同時卧檐,各個微服務(wù)的各類配置也會越來越多,如何管理好這些配置文件以及它們的更新策略(確保不因生產(chǎn)配置隨意改動而造成線上故障風(fēng)險)焰宣,以及搭建高可用的ConfigServer集群霉囚,也是確保微服務(wù)體系穩(wěn)定很重要的一個方面。

在生產(chǎn)實踐中匕积,因為像Consul盈罐、ConfigServer這樣的關(guān)鍵組件,需要搭建獨立的集群闪唆,并且部署在物理機而不是容器里盅粪。在上一節(jié)介紹Consul的時候,我們是獨立搭建了5個Consul Server節(jié)點悄蕾。而ConfigServer因為主要是http配置文件訪問服務(wù)票顾,不涉及節(jié)點選舉、一致性同步這樣的操作笼吟,所以還是按照傳統(tǒng)的方式搭建高可用配置中心库物。具體結(jié)構(gòu)示意圖如下:

我們可以單獨通過git來管理應(yīng)用配置文件,正常來說由ConfigSeever直接通過網(wǎng)絡(luò)拉取git倉庫的配置供服務(wù)獲取就可以了贷帮,這樣只要git倉庫配置更新戚揭,配置中心就能立刻感知到。但是這樣做的不穩(wěn)定之處撵枢,就在于git本身是內(nèi)網(wǎng)開發(fā)用的代碼管理工具民晒,如果讓線上實時服務(wù)直接讀取精居,很容易將git倉庫拉掛了,所以潜必,我們在實際的運維過程中靴姿,是通過git進行配置文件的版本控制,區(qū)分線上分支/master與功能開發(fā)分支/feature磁滚,并且在完成mr后還需要手工(通過發(fā)布平臺觸發(fā))同步一遍配置佛吓,過程是將新的master分支的配置同步一份到各個configserver節(jié)點所在主機的本地路徑,這樣configserver服務(wù)節(jié)點就可以通過其本地目錄獲取配置文件垂攘,而不用多次調(diào)用網(wǎng)絡(luò)獲取配置文件了维雇。

而另一方面,隨著微服務(wù)越來越多晒他,git倉庫中的配置文件數(shù)量也會越來越多吱型。為了便于配置的管理,我們需要按照一定的組織方式來組織不同應(yīng)用類型的配置陨仅。在早期所有的應(yīng)用因為沒有分類津滞,所以導(dǎo)致上百個微服務(wù)的配置文件放在一個倉庫目錄,這樣一來導(dǎo)致配置文件管理成本增加灼伤,另外一方面也會影響ConfigServer的性能触徐,因為某個微服務(wù)用不到的配置也會被ConfigServer加載。

所以后期的實踐是狐赡,按照配置的層次關(guān)系進行組織锌介,將公司全局的項目配置抽象到頂層,由ConfigServer默認加載猾警,而其他所有的微服務(wù)則按照應(yīng)用類型進行分組(通過git項目空間的方式分組),相同的應(yīng)用放在一個組隆敢,然后這個組下單獨設(shè)立一個名為config的git倉庫來存放這個組下相關(guān)微服務(wù)的配置文件发皿。層次結(jié)構(gòu)如下:

這樣應(yīng)用加載配置的優(yōu)先級就是“本地配置->common配置->組公共配置->項目配置”這樣的順序。例如某服務(wù)A拂蝎,在項目工程的默認配置文件(“bootstrap.yml/application.yml”)中配置了參數(shù)A穴墅,同時也在本地項目配置“application-production.yml”配置了參數(shù)B,而與此同時温自,ConfigServer中的common倉庫下的配置文件“application.yml/application-production.yml”又分別存在參數(shù)C玄货、參數(shù)D,同時有個組叫“pay”悼泌,其下的默認配置文件“application.yml/application-production.yml”存在參數(shù)E松捉、參數(shù)F,具體項目pay-api又存在配置文件“pay-api-production.yml”其覆蓋了common倉庫中參數(shù)C馆里、參數(shù)D的值隘世。那么此時如果該應(yīng)用以“spring.profiles.active=production”的方式啟動可柿,那么其能獲取到的配置參數(shù)(通過鏈接訪問:http://{spring.cloud.config.uri}/pay-api-production.yml)就是A、B丙者、C复斥、D、E械媒、F目锭,其中C、D的參數(shù)值為pay-api-production.yml中最后覆蓋的值纷捞。

而對于ConfigServer服務(wù)本身來說痢虹,需要按照這樣的組織方式進行配置類型匹配,例如上述的例子中兰绣,假設(shè)還存在finance的配置倉庫世分,而pay組下的服務(wù)訪問配置中心的時候,是不需要finance空間下的配置文件的缀辩,所以ConfigServer可以不用加載臭埋。這里就需要在ConfigServer服務(wù)配置中進行一些配置。具體如下:

spring:
  application:
    name: @project.artifactId@
    version: @project.version@
    build: @buildNumber@
    branch: @scmBranch@
  cloud:
    inetutils:
      ignoredInterfaces:
        - docker0
    config:
      server:
        health.enabled: false
        git:
          uri: /opt/repos/config
          searchPaths: 'common,{application}'
          cloneOnStart: true
          repos:
            pay:
                pattern: pay-*
                cloneOnStart: true
                uri: /opt/repos/example/config
                searchPaths: 'common,{application}'
            finance:
                pattern: finance-*
                cloneOnStart: true
                uri: /opt/repos/finance/config
                searchPaths: 'common,{application}'

通過在ConfigServer服務(wù)本身的application.yml本地配置中臀玄,設(shè)置其配置搜索方式瓢阴,來實現(xiàn)這樣的目的。

網(wǎng)關(guān)服務(wù)&服務(wù)熔斷&監(jiān)控

通過上面兩小節(jié)的內(nèi)容健无,我們相對詳細地介紹了基于SpringCloud體系中比較關(guān)鍵的兩個服務(wù)組件荣恐。然而在微服務(wù)架構(gòu)體系中,還有很多關(guān)鍵的問題需要解決累贤,例如叠穆,應(yīng)用服務(wù)在Consul中部署了多個節(jié)點,那么調(diào)用方如何實現(xiàn)負載均衡臼膏?

關(guān)于這個問題硼被,在傳統(tǒng)的架構(gòu)方案中是通過Nginx實現(xiàn)的,但是在前面介紹Consul的時候只提到了Consul的服務(wù)注冊&發(fā)現(xiàn)渗磅、選舉等機制嚷硫,并沒有提到Consul如何在實現(xiàn)服務(wù)調(diào)用的負載均衡。難道基于SpringCloud的微服務(wù)體系中的應(yīng)用服務(wù)都是單節(jié)點在提供服務(wù)始鱼,哪怕即使部署了多個服務(wù)節(jié)點仔掸?事實上,我們在服務(wù)消費方通過@EnableFeignClients注解開啟調(diào)用医清,通過@FeignClient("user")注解進行服務(wù)調(diào)用時起暮,就已經(jīng)實現(xiàn)了負載均衡,為什么呢状勤?因為鞋怀,這個注解默認是會默認開啟Robbin代理的双泪,而Robbin是實現(xiàn)客戶端負載均衡的一個組件,通過從Consul拉取服務(wù)節(jié)點信息密似,從而以輪詢的方式轉(zhuǎn)發(fā)客戶端調(diào)用請求至不同的服務(wù)端節(jié)點來實現(xiàn)負載均衡焙矛。而這一切都是在消費端的進程內(nèi)部通過代碼的方式實現(xiàn)的。這種負載方式寄宿于消費端應(yīng)用服務(wù)上残腌,對消費端存在一定的代碼侵入性村斟,這是為什么后面會出現(xiàn)Service Mesh(服務(wù)網(wǎng)格)概念的原因之一,這里就不展開了抛猫,后面有機會再和大家交流蟆盹。

另一需要解決的關(guān)鍵問題是服務(wù)熔斷、限流等機制的實現(xiàn)闺金,SpringCloud通過集成Netflix的Hystrix框架來提供這種機制的支持逾滥,與負載均衡機制一樣也是在消費端實現(xiàn)。由于篇幅的關(guān)系败匹,這里也不展開了寨昙,在后面的文章中有機會再和大家交流。

此外還有Zuul組件來實現(xiàn)API網(wǎng)關(guān)服務(wù)掀亩,提供路由分發(fā)與過濾相關(guān)的功能舔哪。而其他輔助組件還有諸如Sleuth來實現(xiàn)分布式鏈路追蹤、Bus實現(xiàn)消息總線槽棍、Dashboard實現(xiàn)監(jiān)控儀表盤等捉蚤。由于SpringCloud的開源社區(qū)比較活躍,還有很多新的組件在不斷的被集成進來炼七,感興趣的朋友可以持續(xù)關(guān)注下缆巧!

微服務(wù)之運維形態(tài)

在微服務(wù)體系結(jié)構(gòu)下,隨著服務(wù)數(shù)量大量的增長豌拙,線上的部署&維護的工作量會變得非常大盅蝗,而如果還采用原有的運維模式的話,就能難滿足需要了姆蘸。此時運維團隊需要實施Devops策略,開發(fā)自動化運維發(fā)布平臺芙委,打通產(chǎn)品逞敷、開發(fā)、測試灌侣、運維流程推捐,關(guān)注研發(fā)效能。

另外一方面也需要推進容器化(Docker/Docker Swarm/k8s)策略侧啼,這樣才能快速對服務(wù)節(jié)點進行伸縮牛柒,這也是微服務(wù)體系下的必然要求堪簿。

微服務(wù)泛濫問題

這里還需要注意一個問題,就是實施微服務(wù)架構(gòu)后皮壁,如何在工程上管控微服務(wù)的問題椭更。盲目的進行微服務(wù)的拆分也不是一件很合理的事情,因為這會導(dǎo)致整個服務(wù)調(diào)用鏈路變得深不可測蛾魄,對問題排查造成難度虑瀑,也浪費線上資源。

重構(gòu)問題

在早期單體架構(gòu)方式向微服務(wù)架構(gòu)的轉(zhuǎn)變過程中滴须,重構(gòu)是一個非常好的方式舌狗,也是確保服務(wù)規(guī)范化,業(yè)務(wù)系統(tǒng)應(yīng)用架構(gòu)合理化的很重要的手段扔水。但是痛侍,一般來說,在快速發(fā)展階段也就意味著團隊規(guī)模的迅速增長魔市,短時間內(nèi)如何讓新的團隊有事可做也是一件非持鹘欤考驗管理水平的事情,因為如果招了很多人嘹狞,并且他們之間呈現(xiàn)一種過渡的競爭狀態(tài)的話岂膳,就會出現(xiàn)讓重構(gòu)這件事變得有些功利的情況,從而導(dǎo)致重構(gòu)不徹底磅网、避重就輕谈截,導(dǎo)致表象上看是很高大上的微服務(wù)架構(gòu),而業(yè)務(wù)系統(tǒng)實際上比較爛的情況涧偷。

另外簸喂,重構(gòu)是在一定階段后作出的重要決策,不僅僅是重新拆分燎潮,也是對業(yè)務(wù)系統(tǒng)的重新塑造喻鳄,所以一定要考慮好應(yīng)用軟件的系統(tǒng)結(jié)構(gòu)以及實施它們所需要付出的成本,切不可盲目确封!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末除呵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子爪喘,更是在濱河造成了極大的恐慌颜曾,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秉剑,死亡現(xiàn)場離奇詭異泛豪,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門诡曙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臀叙,“玉大人,你說我怎么就攤上這事价卤∪坝” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵荠雕,是天一觀的道長稳其。 經(jīng)常有香客問我,道長炸卑,這世上最難降的妖魔是什么既鞠? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮盖文,結(jié)果婚禮上嘱蛋,老公的妹妹穿的比我還像新娘。我一直安慰自己五续,他們只是感情好洒敏,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疙驾,像睡著了一般凶伙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上它碎,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天函荣,我揣著相機與錄音,去河邊找鬼扳肛。 笑死傻挂,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的挖息。 我是一名探鬼主播金拒,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼套腹!你這毒婦竟也來了绪抛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤电禀,失蹤者是張志新(化名)和其女友劉穎睦疫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞭呕,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了葫松。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓦糕。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腋么,靈堂內(nèi)的尸體忽然破棺而出咕娄,到底是詐尸還是另有隱情,我是刑警寧澤珊擂,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布圣勒,位于F島的核電站,受9級特大地震影響摧扇,放射性物質(zhì)發(fā)生泄漏圣贸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一扛稽、第九天 我趴在偏房一處隱蔽的房頂上張望吁峻。 院中可真熱鬧,春花似錦在张、人聲如沸用含。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啄骇。三九已至,卻和暖如春瘟斜,著一層夾襖步出監(jiān)牢的瞬間明未,已是汗流浹背壹蔓。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工佣蓉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疚膊,地道東北人寓盗。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像撩幽,于是被迫代替她去往敵國和親窜醉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一 概述 關(guān)于微服務(wù)的介紹目前已經(jīng)有很多文章做了介紹撒妈,本文不再對微服務(wù)的概念再做進一步闡述杰捂,重點將介紹微服務(wù)架構(gòu)具...
    java菜閱讀 5,373評論 0 5
  • 微服務(wù)架構(gòu)模式的核心在于如何識別服務(wù)的邊界,設(shè)計出合理的微服務(wù)。但如果要將微服務(wù)架構(gòu)運用到生產(chǎn)項目上瓤漏,并且能夠發(fā)揮...
    java菜閱讀 2,949評論 0 6
  • 背景 隨著公司業(yè)務(wù)量的飛速發(fā)展庸队,平臺面臨的挑戰(zhàn)已經(jīng)遠遠大于業(yè)務(wù)浅侨,需求量不斷增加鼓黔,技術(shù)人員數(shù)量增加崔步,面臨的復(fù)雜度也大...
    java菜閱讀 636評論 0 0
  • 愿夢想抱負瑞你、付出利他,誠敬謙和永遠和你同在虏缸!
    胡淑靜閱讀 201評論 0 2
  • 帶教老師最喜歡說:“煩死了宰缤。” 他最寵愛的是他的兒子缘挑,可以從這一點投其所好。 三甲醫(yī)院的人是多么優(yōu)秀桶略,而你只能在這...
    三千上司閱讀 282評論 3 2