成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

開發(fā)框架掃盲之Spring Cloud選型介紹

IT那活兒 / 3298人閱讀
開發(fā)框架掃盲之Spring Cloud選型介紹

筆者公司近年來基于SRE理念的運維模式?jīng)Q定一線運維們得有自己的運維場景提煉沉淀的運維支撐平臺。筆者公司基本在全國各地均有自己的運維團隊,這種情況下如果運維平臺使用單體架構(gòu),會導(dǎo)致在單體架構(gòu)下跨地域,跨開發(fā)小組協(xié)調(diào)困難。因為業(yè)務(wù)團隊(運維團隊)分布全國各地并基于本地的實際需要,在一些通用場景的基礎(chǔ)上提出大量本地自己的運維場景實現(xiàn)需求,因為是全國性的SRE團隊,內(nèi)部對應(yīng)配備多個場景開發(fā)小組,基于單體架構(gòu)會給各開發(fā)小組之間的協(xié)調(diào)和溝通帶來昂貴成本。所以,基于實際情況及業(yè)務(wù)場景需要,我們在相關(guān)產(chǎn)品選型初期就確定微服務(wù)架構(gòu),筆者今天就來講講微服務(wù)的相關(guān)入門知識。




什么是微服務(wù)



微服務(wù)一個相對較小且獨立的功能單元,是用戶可以感知的最小功能集,如一個網(wǎng)站有訂單管理、用戶管理、商品管理等模塊,我們就可以把其中的訂單管理、用戶管理做成微服務(wù)。




微服務(wù)架構(gòu)



微服務(wù)架構(gòu)風(fēng)格是一種使用一套小服務(wù)來開發(fā)單個應(yīng)用的方式突進,每個服務(wù)運行在自己的進程中,并且使用輕量級通信如HTTPAPI,這些服務(wù)基于業(yè)務(wù)能力構(gòu)建,并能夠通過自動化部署機制來獨立部署,這些服務(wù)可以使用不同的編程語言,以及不同的數(shù)據(jù)儲存技術(shù)等。




為什么使用微服務(wù)



項目開始階段,運維場景功能并不是很齊全、體量小,單體架構(gòu)可以滿足業(yè)務(wù)需要。但伴隨著業(yè)務(wù)能力拓展、自動化服務(wù)越來越集中,尤其是筆者公司希望給地場景能像貨幣一樣流通,單體架構(gòu)會帶來一些問題:

復(fù)雜性逐漸變高


單體架構(gòu)系統(tǒng)本身過于龐大和復(fù)雜,以至于任何一個開發(fā)者都很難以理解它的全部。這種極度的復(fù)雜度會形成惡性循環(huán),由于代碼難以理解,因此開發(fā)人員更改更容易出錯,每一次更改系統(tǒng)更復(fù)雜、更難懂。

技術(shù)債務(wù)逐漸上升


隨著時間推移、需求變更和人員更迭,會逐漸形成應(yīng)用程序的技術(shù)債務(wù),并且越積越多。“不壞不修”,這在軟件開發(fā)中非常常見,在單體應(yīng)用中,這種思想更嚴重。已使用的系統(tǒng)設(shè)計或代碼難以被修改,因為應(yīng)用程序中的其他模塊可能會以意料之外的方式使用它。

部署速度逐漸變慢


隨著代碼的增多,構(gòu)建和部署的時間也會增加。而在單體應(yīng)用中,每次功能的變更或缺陷的修復(fù)都會導(dǎo)致重新部署整個應(yīng)用,而且全量部署的方式耗時長、影響范圍大、風(fēng)險高。

阻礙技術(shù)創(chuàng)新


單體應(yīng)用往往使用統(tǒng)一的技術(shù)平臺或方案解決所有的問題,團隊中的每個成員必須使用相同的開發(fā)語言和框架,要想引入新框架或新技術(shù)平臺會非常困難。例如,一個使用Struts2構(gòu)建的、有百萬行代碼的單體應(yīng)用,如果想要換用SpringMVC,毫無疑問切換的成本是非常高的。

無法按需伸縮


單體應(yīng)用只能作為一個整體進行擴展,無法根據(jù)業(yè)務(wù)模塊的需要進行伸縮。例如,應(yīng)用中有的模塊是計算密集型的,它需要強勁的CPU;有的模塊則是IO密集型的,需要更大的內(nèi)存。由于這些模塊部署在一起,不得不在硬件的選擇上做出妥協(xié)。


綜上,隨著業(yè)務(wù)需求的發(fā)展,功能的不斷增加,單體架構(gòu)很難滿足互聯(lián)網(wǎng)時代快速變化的需要。




使用微服務(wù)的優(yōu)點與缺點



優(yōu)點如下:


  • 易于開發(fā)和維護

微服務(wù)易于被一個開發(fā)人員理解,修改和維護,實現(xiàn)了模塊化的解決方案。


  • 獨立部署啟動快

微服務(wù)架構(gòu)模式是每個微服務(wù)獨立的部署,開發(fā)者不再需要協(xié)調(diào)其它服務(wù)部署對本服務(wù)的影響,這種改變可以加快部署速度。


  • 技術(shù)棧不受限

這種架構(gòu)使得每個微服務(wù)都可以有專門開發(fā)團隊來開發(fā),開發(fā)者可以自由選擇開發(fā)技術(shù),提供API服務(wù)。這種自由意味著開發(fā)者不需要被迫使用某項目開始時采用的過時技術(shù),他們可以選擇現(xiàn)在的技術(shù)。甚至于,因為微服務(wù)都是相對簡單,即使用現(xiàn)在技術(shù)重寫以前代碼也不是很困難的事情。


  • 按需伸縮

微服務(wù)架構(gòu)模式使得每個微服務(wù)獨立擴展,你可以根據(jù)每個微服務(wù)的規(guī)模來部署滿足需求的規(guī)模。甚至于,你可以使用更適合于微服務(wù)資源需求的硬件。比如,你可以把依賴CPU計算能力的指標管理微服務(wù)部署在高配置的多核CPU實例上,把視頻管理模塊部署在高內(nèi)存、I/O讀寫能力強的實例上。


缺點如下:


  • 運維要求高

對于單體架構(gòu)來講,我們只需要維護好這一個項目就可以了,但是對于微服務(wù)架構(gòu)來講,由于項目是由多個微服務(wù)構(gòu)成的,每個模塊出現(xiàn)問題都會造成整個項目運行出現(xiàn)異常,想要知道是哪個模塊造成的問題往往是不容易的,因為我們無法一步一步通過debug的方式來跟蹤,這就對運維人員提出了很高的要求。


  • 分布式的復(fù)雜性

對于單體架構(gòu)來講,我們可以不使用分布式,但是對于微服務(wù)架構(gòu)來說,分布式幾乎是必會用的技術(shù),由于分布式本身的復(fù)雜性,導(dǎo)致微服務(wù)架構(gòu)也變得復(fù)雜起來。


  • 接口調(diào)整成本高

比如,用戶微服務(wù)是要被訂單微服務(wù)和電影微服務(wù)所調(diào)用的,一旦用戶微服務(wù)的接口發(fā)生大的變動,那么所有依賴它的微服務(wù)都要做相應(yīng)的調(diào)整,由于微服務(wù)可能非常多,那么調(diào)整接口所造成的成本將會明顯提高。


  • 重復(fù)造輪子

對于單體架構(gòu)來講,如果某段業(yè)務(wù)被多個模塊所共同使用,我們便可以抽象成一個工具類,被所有模塊直接調(diào)用,但是微服務(wù)卻無法這樣做,因為這個微服務(wù)的工具類是不能被其它微服務(wù)所直接調(diào)用的,從而我們便不得不在每個微服務(wù)上都建這么一個工具類,從而導(dǎo)致代碼的重復(fù)。




微服務(wù)架構(gòu)SpringCloud



SpringCloud為開發(fā)者提供了快速構(gòu)建分布式系統(tǒng)的通用模型的工具(包括配置管理springcloudconfig,服務(wù)發(fā)現(xiàn)Eureka,熔斷器Hystrix,服務(wù)網(wǎng)關(guān)Zuul,微代理,控制總線,一次性令牌,全局鎖,領(lǐng)導(dǎo)選舉,分布式會話,集群狀態(tài)等)。SpringCloud并沒有重復(fù)制造輪子,它只是將各家公司開發(fā)的比較成熟、經(jīng)得起實際考驗的服務(wù)框架組合起來,通過SpringBoot風(fēng)格進行再封裝屏蔽掉了復(fù)雜的配置和實現(xiàn)原理,最終給開發(fā)者留出了一套簡單易懂、易部署和易維護的分布式系統(tǒng)開發(fā)工具包。一般項目中用到SpringCloud的工具包微服務(wù)架構(gòu)如下:


服務(wù)發(fā)現(xiàn)Eureka介紹


Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個基于REST的服務(wù),用于定位服務(wù),以實現(xiàn)云端中間層服務(wù)發(fā)現(xiàn)和故障轉(zhuǎn)移。SpringCloud將它集成在其子項目spring-cloud-netflix中,以實現(xiàn)SpringCloud的服務(wù)發(fā)現(xiàn)功能,類似于Dubbo的注冊中心Zookeeper。實現(xiàn)原理如下:

EureKa采用C-S的設(shè)計架構(gòu),即包括了EurekaServer(服務(wù)端),EureKaclient(客戶端)。

  • EureKaServer提供服務(wù)注冊,各個節(jié)點啟動后,在EureKaserver中進行注冊

  • EureKaClient是一個Java客戶端,用于和服務(wù)端進行交互,同時客戶端也是一個內(nèi)置的默認使用輪詢負載均衡算法的負載均衡器。在應(yīng)用啟動后,會向EurekaServer發(fā)送心跳(默認30秒)。如果EurekaServer在多個心跳周期內(nèi)沒有接受到某個節(jié)點的心跳,EureKaServer將會從服務(wù)注冊表中將這個服務(wù)移出(默認90秒)。


在項目中業(yè)務(wù)量不大情況下,例如微服務(wù)消費者A可以通過url地址調(diào)用微服務(wù)生產(chǎn)者B的接口服務(wù),這種直接指定url調(diào)用有如下隱患:1、微服務(wù)B的IP和端口變了,那微服務(wù)A通過之前的url調(diào)用微服務(wù)B就會報錯;2、因業(yè)務(wù)量大增,微服務(wù)B需要擴容做成集群,如果微服務(wù)A還是通過指定url調(diào)用微服務(wù)B就無法做到集群的負載均衡以及高可用。


綜上所述,我們用Eureka來解決這一難題,各微服務(wù)啟動時都注冊服務(wù)名在Eureka中,例如微服務(wù)消費者A在Eureka中注冊服務(wù)名為’consumer,微服務(wù)生產(chǎn)者B在Eureka中注冊服務(wù)名為’producer’,那微服務(wù)消費者A就可以通過指定要調(diào)用的服務(wù)名’producer’通過Eureka的負載均衡返回實際微服務(wù)生產(chǎn)者B的url地址,這樣就解決了以上問題。


微服務(wù)之間通信Feign


微服務(wù)之間調(diào)用接口通過Feign,它是聲明式的Rest客戶端,基于接口的注解方式,它跟Eureka配套使用,Eureka中自帶了Ribbon實現(xiàn)了負載均衡。例如代碼中微服務(wù)消費者A通過Feign要調(diào)用微服務(wù)生產(chǎn)者B的接口服務(wù),只需在微服務(wù)A的Feign注解中指定微服務(wù)者生產(chǎn)B在Eureka中的注冊服務(wù)名即可,如下:


斷路器Hystrix


在微服務(wù)架構(gòu)中,根據(jù)業(yè)務(wù)來拆分成一個個的微服務(wù),微服務(wù)與微服務(wù)之間可以相互調(diào)用,為了保證其高可用,單個微服務(wù)通常會集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,微服務(wù)并不能保證100%可用,如果單個微服務(wù)出現(xiàn)問題,調(diào)用這個微服務(wù)就會出現(xiàn)線程阻塞,此時若有大量的請求涌入該微服務(wù)實例,會導(dǎo)致該實例的線程資源會被消耗完畢,導(dǎo)致服務(wù)癱瘓。因微服務(wù)與微服務(wù)之間的依賴性,所以故障會傳播,會對整個微服務(wù)系統(tǒng)造成災(zāi)難性的嚴重后果,這就是微服務(wù)故障的“雪崩”效應(yīng)。

綜上情況,我們使用到了斷路器Hystrix,當對特定的微服務(wù)的調(diào)用的不可用達到一個閥值(Hystric默認是5秒20次)斷路器將會被打開,下次請求過來微服務(wù)會直接通過fallback返回一個固定值快速失敗響應(yīng),不會走內(nèi)部邏輯占用資源。


斷路器還能自動回復(fù),在熔斷機制的異常情況邏輯中,當熔斷器打開的時候,會自動的啟動自動恢復(fù)休眠窗(一個計時器,默認10秒),在這個休眠期內(nèi),所有請求都會快速失敗。


但是當休眠期到期的時候,此時熔斷器會進入半開狀態(tài),讓下一次請求繼續(xù)調(diào)用內(nèi)部資源,而不是快速失敗。如果這時候調(diào)用成功,熔斷開關(guān)置為關(guān)閉狀態(tài)。


反之,熔斷開關(guān)繼續(xù)打開狀態(tài),再次進入快速失敗的狀態(tài),并繼續(xù)進行休眠,等待下一次嘗試恢復(fù)。斷路器提供了看板監(jiān)控如下:

服務(wù)網(wǎng)關(guān)zuul


所有從設(shè)備或網(wǎng)站來的請求都會經(jīng)過Zuul到達后端微服務(wù)應(yīng)用程序。作為一個邊界性質(zhì)的應(yīng)用程序,Zuul提供了動態(tài)路由、監(jiān)控、彈性負載和安全功能。Zuul底層利用各種filter實現(xiàn)如下功能:

  • 1、認證和安全:識別每個需要認證的資源,拒絕不符合要求的請求。

  • 2、性能監(jiān)測:在服務(wù)邊界追蹤并統(tǒng)計數(shù)據(jù),提供精確的生產(chǎn)視圖。

  • 3、動態(tài)路由:根據(jù)需要將請求動態(tài)路由到后端集群。

  • 4、壓力測試:逐漸增加對集群的流量以了解其性能。

  • 5、負載均衡:預(yù)先為每種類型的請求分配容量,當請求超過容量時自動丟棄。

  • 6、靜態(tài)資源處理:直接在邊界返回某些響應(yīng)。

  • 在項目中,一般用到zuul最多的是動態(tài)路由、負載均衡,它搭配Eureka使用,當用戶請求過來時,先實現(xiàn)動態(tài)路由映射,隱藏真實微服務(wù)的IP,在從Eureka拿到實際調(diào)用微服務(wù)的地址。沒用zuul是以下場景調(diào)用微服務(wù),需要直接配置微服務(wù)url接口地址:


配置了服務(wù)網(wǎng)關(guān)zuul后,不管微服務(wù)url接口地址是否改變,不影響外部調(diào)用:


配置中心SpringCloud Config


我們知道,每個獨立的微服務(wù)都有配置文件,一個項目至少有幾個、甚至十幾個微服務(wù)以上,如果要修改微服務(wù)的配置文件參數(shù),需要登陸到每個微服務(wù)項目的resources目錄下進行修改,不方便維護。尤其是更新微服務(wù)項目配置后需要重啟,而重啟項目的代價還是很高的。而配置中心SpringCloudConfig提供了公有云遠程Git倉庫、本地Git倉庫,可以把每個微服務(wù)的配置文件統(tǒng)一集中管理,當配置文件內(nèi)容修改時,可以同步到每個微服務(wù)的內(nèi)存中,不需要重啟,實現(xiàn)了高可用,非常方便。

我們可以指定一個微服務(wù)為Configserver,實時同步遠程Git倉庫、本地Git倉庫的所有微服務(wù)配置文件,當配置文件參數(shù)有改動時程序會自動同步到上圖中的微服務(wù)A、B中,微服務(wù)A、B啟動時也會主動從微服務(wù)Configserver同步一次配置文件參數(shù)。


以上就是筆者對Spring Cloud在項目中使用原因說明及架構(gòu)講解,本次入門介紹分享結(jié)束,我們下次再見。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/130216.html

相關(guān)文章

  • Dubbo Cloud Native 路的實踐與思考

    摘要:可簡單地認為它是的擴展,負載均衡自然成為不可或缺的特性。是基于開發(fā)的服務(wù)代理組件,在使用場景中,它與和整合,打造具備服務(wù)動態(tài)更新和負載均衡能力的服務(wù)網(wǎng)關(guān)。類似的特性在項目也有體現(xiàn),它是另一種高性能代理的方案,提供服務(wù)發(fā)現(xiàn)健康和負載均衡。 摘要: Cloud Native 應(yīng)用架構(gòu)隨著云技術(shù)的發(fā)展受到業(yè)界特別重視和關(guān)注,尤其是 CNCF(Cloud Native Computing Fo...

    niceforbear 評論0 收藏0
  • 【推薦】最新200篇:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實現(xiàn)故障恢復(fù)自動化詳解哨兵技術(shù)查漏補缺最易錯過的技術(shù)要點大掃盲意外宕機不難解決,但你真的懂數(shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    BicycleWarrior 評論0 收藏0
  • 【推薦】最新200篇:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實現(xiàn)故障恢復(fù)自動化詳解哨兵技術(shù)查漏補缺最易錯過的技術(shù)要點大掃盲意外宕機不難解決,但你真的懂數(shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    tommego 評論0 收藏0
  • 微服務(wù)框架 | 潮流當前該如何選擇 SpringCloud、Dubbo or Istio?

    摘要:目前首個測試版是針對環(huán)境的,社區(qū)宣稱在未來幾個月內(nèi)會為虛擬機和等其他環(huán)境增加支持。查看下在上的更新時間,截止年月日所有項目均更新于小時內(nèi)。核心項目最近更新于一個月乃至數(shù)月前。所有項目均更新于分鐘內(nèi)。目前對比來看,則顯得稍遜下來。 showImg(https://segmentfault.com/img/remote/1460000010953149); 在 Kubernetes 容器云...

    k00baa 評論0 收藏0
  • Dubbo Cloud Native 實踐與思考

    摘要:可簡單地認為它是的擴展,負載均衡自然成為不可或缺的特性。類似的特性在項目也有體現(xiàn),它是另一種高性能代理的方案,提供服務(wù)發(fā)現(xiàn)健康和負載均衡。 Dubbo Cloud Native 實踐與思考 分享簡介 Cloud Native 應(yīng)用架構(gòu)隨著云技術(shù)的發(fā)展受到業(yè)界特別重視和關(guān)注,尤其是 CNCF(Cloud Native Computing Foundation)項目蓬勃發(fā)展之際。Dubbo...

    邱勇 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<