面試題目一大鍋附件微服務(wù)講義_第1頁(yè)
面試題目一大鍋附件微服務(wù)講義_第2頁(yè)
面試題目一大鍋附件微服務(wù)講義_第3頁(yè)
面試題目一大鍋附件微服務(wù)講義_第4頁(yè)
面試題目一大鍋附件微服務(wù)講義_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Springclouddubbo什么是Springcloud,Springcloud與springboot的關(guān)系?微服務(wù)架構(gòu)改造的過程中你有遇到哪些比較的點(diǎn)自己的進(jìn)程中,服務(wù)間通訊采用輕量級(jí)通信機(jī)制(通常用HTTPRESTFULAPI),這些服4服務(wù)之間通過HTTP協(xié)議相互通信。微服務(wù)的“微”是按照業(yè)務(wù)來劃分的。一個(gè)大的業(yè)務(wù)可以拆分成若干小的業(yè)務(wù),一個(gè)小的HTTP按照業(yè)務(wù)劃分的微服務(wù)單元獨(dú)立部署,并運(yùn)行在各自的進(jìn)程中。微服務(wù)單元之間的通信方式一般傾向于使用HTTP這種簡(jiǎn)單的通信機(jī)制,的時(shí)候是使用阻STfulAPI的。這種接HTTP模式非常高效,并且這種通信機(jī)制與平臺(tái)和語(yǔ)言無關(guān)。例如用Java寫的服務(wù)可以消費(fèi)用Go語(yǔ)言寫的服務(wù),用Go寫的服務(wù)又可以消費(fèi)用Ruby寫的服務(wù)。不同的服務(wù)可以HTTP系。數(shù)據(jù)庫(kù)獨(dú)立,每個(gè)服務(wù)的數(shù)據(jù)量少,易于,性能也有明顯的優(yōu)勢(shì)。MongDBRedis在微服務(wù)架構(gòu)中,系統(tǒng)會(huì)被拆分為若干個(gè)微服務(wù),每個(gè)微服務(wù)又是一個(gè)獨(dú)立的應(yīng)用程序。Docker容器技術(shù)的推進(jìn),以及自動(dòng)化部署工具(例如開源組件Jenkins)的出現(xiàn),自動(dòng)化SpringCloudEurekaZookeeperConsul微服務(wù)架構(gòu)是分布式架構(gòu),分布式系統(tǒng)比單體系統(tǒng)更加復(fù)雜,主要體現(xiàn)在服務(wù)的獨(dú)立性和服務(wù)相用的可靠性,以及分布式事務(wù)、全局鎖、全局Id等,而單體系統(tǒng)不需要該服務(wù)不可用。由于服務(wù)的相互依賴,可能會(huì)導(dǎo)致整個(gè)系統(tǒng)的不可用,這就是“雪崩效2.2SpringCloudDubbo1、Dubbo只是實(shí)現(xiàn)了服務(wù)治理,而SpringCloud子項(xiàng)目分別覆蓋了微服務(wù)架構(gòu)下的眾2、Dubbo支持各種通信協(xié)議,而且消費(fèi)方和服務(wù)方使用長(zhǎng)方式交互,通信速度上略勝SpringCloud,如果對(duì)于系統(tǒng)的響應(yīng)時(shí)間有嚴(yán)格要求,長(zhǎng)更合適。需要嚴(yán)格的管理版本依賴。而SpringCloud通過Json交互,省略了版本管理的問題,但是具體字段含義需要統(tǒng)一管理,自身RestAPI方式交互,為跨平臺(tái)調(diào)用奠定了基礎(chǔ)。 2.2SpringCloudSpringCloud是在SpringBootSpringCloud的首要目標(biāo)就是通過提供一系列開發(fā)組件和框架,幫助開發(fā)者迅速搭建一個(gè)分布式的微服務(wù)系統(tǒng)。SpringCloud是通過包裝其他技術(shù)框架來實(shí)現(xiàn)的,例如包裝開源的Netflixoss組件,實(shí)現(xiàn)了一套通過基于注解、Java配置和基于模版開發(fā)的微服SpringCloud框架來自于SpringResoucesPivotalNetflix司和一些其他的開發(fā)者提供技術(shù)上的更新法代。SpringCloud提供了開發(fā)分布式微服務(wù)系統(tǒng)的一些常用組件,例如服務(wù)和發(fā)現(xiàn)、配置中心、熔斷器、智能路由、微、控2.2SpringCloud(1)服務(wù)和發(fā)現(xiàn)組件利用Eureka組件可以很輕松地實(shí)現(xiàn)服務(wù)的和發(fā)現(xiàn)的功能。Eureka組件提供了服務(wù)的UIEurekaUIEureka解服務(wù)單元的運(yùn)行情況。另外SpringCloud也支持Consul和Zookeeper,用于和發(fā)現(xiàn)服務(wù)。(2)熔斷組件Hystrix務(wù)限流的功能。另外Hystrix提供了熔斷器的健康監(jiān)測(cè),以及熔斷器健康數(shù)據(jù)的API接HystrixDashboardTurbine(3)負(fù)載均衡組件Ribbon是一個(gè)負(fù)載均衡組件,它通常和Eureka、Zuul、RestTemte、Feign配合RibbonZuul中。Ribbon和IRestTemte、Feign配合,在消費(fèi)服務(wù)時(shí)能夠做到負(fù)載均衡(4)ZuulAPIZuul內(nèi)部服務(wù)的API接口不直接,防止了內(nèi)部服務(wù)敏感信息對(duì)外。在默認(rèn)的情況下,Zuul和Ribbon相結(jié)合,能夠做到負(fù)載均衡、智能路由。Zuul的過濾功能是通過請(qǐng)求來實(shí)現(xiàn)的,可以對(duì)一些用戶的角色和權(quán)限進(jìn)行判斷,起到安全驗(yàn)證的作用,同時(shí)也可以用于輸山實(shí)時(shí)的請(qǐng)(5)SpringCloudSpringCloudConfigSpringCloudConfig端 端,Server端本地倉(cāng)庫(kù)或者倉(cāng)庫(kù)的配置文件,所有 ServerSpringCloudConfigCloudBus相互配合刷新指 或所 的配置文件(6)SpringCloudSpringCloudSecuritySpringSecuritySpringCloudSecurity向服SpringCloud少見的,一般它會(huì)配合SpringSecurity0Auth2組件一起使用,通過搭建服務(wù),驗(yàn)JWT(7)SpringCloudSpringCloudSleuthDapperZipkin(8)SpringCloudSpringCloudStreamSpringCloudRabbitMqActiveMqKafkaRedisSpringCloudStreamSpringCloud2.3SpringCloudSpringCloud行節(jié)奏,都著自己的發(fā)布版本號(hào)。SpringCloud通過一個(gè)資源BOM(Billof當(dāng)一個(gè)版本的SpringCloud項(xiàng)目的發(fā)布內(nèi)容積累到臨界點(diǎn)或者解決了一個(gè)嚴(yán)重后,就會(huì)發(fā)布一個(gè)“servicereleases”版本,簡(jiǎn)稱SRX版本,其中X是一個(gè)遞增數(shù)字。當(dāng)前mon-all(公共類工程hshop-parentpom.xml<?xmlversion="1.0"<projectxmlns="xsi:schemaLocation="633 1<?xmlversion="1.0"<project 17詳情結(jié)構(gòu)請(qǐng)查看源 micro-CREATECREATETABLE`order_primary``order_id`int(10unsignedNOTNULLAUTO_INCREMENTCOMMENT'訂單`order_money``order_money`int(11DEFAULTNULLCOMMENT'訂單金額`order_status`tinyint(4DEFAULTNULLCOMMENT'訂單狀態(tài)PRIMARYKEYENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_general_ciCOMMENCREATECREATETABLE`stock_info``wp_id`int(11NOTNULLCOMMENT'商品庫(kù)存`product_id`int(11NOTNULLCOMMENT'商品`product_amount`int(11DEFAULTNULLCOMMENT'當(dāng)前商品數(shù)量PRIMARYKEYENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_general_ciCOMMEN服務(wù)提供者112publicclassGetGoodsByIdRes3 privateInteger6 privateString9 privateInteger privateString17112publicclassGetGoodsByIdReq3 privateInteger56112publicinterfaceGoodsInfoCtlApi3 *@description根據(jù)商品id*@authorXuejun*@date2019/5/3*@param*publicResult<GetGoodsByIdRes>getGoodsById(Integer1211publicclassGoodsInfo2@Column(name=@GeneratedValue(strategy=privateInteger7@Column(name=privateString@Column(name=privateInteger@Column(name=privateString1611publicinterfaceGoodsInfoRepositoryextendsJpaRepository<GoodsInfo,Integer>{45667publicclassGoodsInfoBiz3privateGoodsInfoRepository6 publicGetGoodsByIdResgetGoodsById(Integer8Optional<GoodsInfo>goodsInfo=GetGoodsByIdResgetGoodsByIdRes=newreturnreturn}}20 publicclassGoodsInfoCtlimplementsGoodsInfoCtlApi4GoodsInfoBiz789 publicGetGoodsByIdResgetGoodsById(@PathVariable("id")IntegerId)returnreturn}13publicclassGoodsServiceApp3publicstaticvoidmain(String[]args)}711publicclassAddOrderRes2 privateInteger4 privateInteger6 privateInteger8 privateInteger121public1publicclassAddOrderReq2 privateInteger4 privateInteger6778112publicinterfaceOrderCtlApi3 *@description*@authorXuejun*@date2019/6/25*publicResult<AddOrderRes>addOrder(AddOrderReq12@Table(name=publicclassOrderPrimary4@GeneratedValue(strategy=@Column(name=privateInteger@Column(name=privateInteger@Column(name=privateInteger@Column(name=privateString1511*@authorXuejun*@version*@description: *@date2019/6/25 publicinterfaceOrderPrimaryRepositoryextendsJpaRepository<OrderPrimary,Integer>{}publicclassOrderBiz34privateOrderPrimaryRepository7RestTemterestTem *@description*@authorXuejun*@date2019/6/25*@param*publicAddOrderResaddOrder(AddOrderReqaddOrderReq)GetGoodsByIdResgetGoodsByIdRes=restTemte.getForObject("thrownewRuntimeException("商品不存在}OrderPrimaryorderPrimary=new AddOrderResaddOrderRes=newreturn}38 publicclassOrderCtlimplementsOrderCtlApi45privateOrderBiz8 *@description*@authorXuejun*@date2019/6/25* publicResult<AddOrderRes>addOrder(AddOrderReqaddOrderReq)returnnew}22publicclassOrderServiceApp3public te returnnew 8publicstaticvoidmain(String[]args)}13Eureka服務(wù)與發(fā)微服務(wù)將傳統(tǒng)的"巨石"應(yīng)用拆分成一個(gè)一個(gè)的組件應(yīng)用,每個(gè)組件應(yīng)用提供特定的服務(wù),可以是一個(gè),也可以是多個(gè),并且組件所含服務(wù)應(yīng)該是可以動(dòng)態(tài)擴(kuò)展的,隨著時(shí)間推移、系統(tǒng)進(jìn)化,可任意拆分、合并。組件化應(yīng)用和顆?;姆?wù),遍布在系統(tǒng)的各個(gè)角落,由不同的項(xiàng)目成員進(jìn)行維護(hù),微服務(wù)的是化整為零、各司其職,這就要求開發(fā)人員不得操作其業(yè)務(wù)或服務(wù)范圍以外的數(shù)據(jù)模型等資源,只能通過接口的,使用某一服務(wù)。由于服務(wù)的跨度很大(公司很大的情況下)、數(shù)量很多(數(shù)以百計(jì)甚至),為保障系統(tǒng)的正常運(yùn)行,必然需要有一個(gè)中心化的組件完成對(duì)各個(gè)服務(wù)的整合,即將分散于各處的服務(wù)進(jìn)行匯總,匯總的信息可以是提供服務(wù)的組件名稱、地址、數(shù)量等,每個(gè)組件擁有一個(gè)設(shè)備,當(dāng)本組件內(nèi)的某個(gè)服務(wù)的狀態(tài)變化告至中心化的組件進(jìn)行狀態(tài)的更新。服務(wù)的調(diào)用方在請(qǐng)求某項(xiàng)服務(wù)時(shí)首先到中心化組件獲取可提供該項(xiàng)服務(wù)的組件信息(IP、端口等),通過默認(rèn)或自定義的策略選擇該服務(wù)的某一提供者進(jìn)行,實(shí)現(xiàn)服務(wù)的調(diào)用。SpringCloud:Zookeeper、ConSul、EurekaEurekaServer:中心服務(wù)端,用于和管理服務(wù)列表 :中心客戶端,向中心服務(wù)的應(yīng)用都可叫做 (包括EurekaServer本身)編寫Eureka ."<?xmlversion="1.0"<project20publicclasspp4publicstaticvoidmain(String[]args) 7 9112 port:4 fetch‐registry:registerregister‐with‐eureka: .serviceUrl.defaultZone:eurekasever地 服務(wù)至Eureka工程hshop-service-impl-order、hshop-service-impl-goods為demo-eureka-name: 1231234publicclassEurekaProviderServiceApp45publicstaticvoidmain(String[]args)}9publicclassEurekaConsumerServieApp4public te 7returnnew}89publicstaticvoidmain(String[]args)}1488name: 修改工程demo-eureka-consumer-1、為OrderBiz類注入 對(duì)3;1publicAddOrderResaddOrder(AddOrderReq1publicAddOrderResaddOrder(AddOrderReqaddOrderReq) Stringfor(ServiceInstanceinstanceInfo:instances)StringipAddr=intport=}GetGoodsByIdResgetGoodsByIdRes=restTemte.getForObject("http://"+athrownewRuntimeException("商品不存在}OrderPrimaryorderPrimary=newAddOrderResaddOrderRes=newreturn27、啟動(dòng)運(yùn)行demo-eureka-consumer-service和demo-eureka-provider-service,請(qǐng)求負(fù)載均衡SpringCloudRibbon是一個(gè)基于HTTP和TCP的客戶端負(fù)載均衡工具,它基于NetflixRibbon實(shí)現(xiàn)。通過SpringCloud的封裝,可以讓我們輕松地將面對(duì)服務(wù)的REST模塊請(qǐng)求自動(dòng)轉(zhuǎn)換成客戶端負(fù)載均衡的服務(wù)調(diào)用。SpringCloudRibbon幾乎存在于每一個(gè)SpringCloud構(gòu)建的微服務(wù)和基礎(chǔ)設(shè)施中工程demo-eureka-consumer-service改為demo-ribbon-consumer-public te 4returnnew}5 te添加@LoadBalance注11publicAddOrderResaddOrder(AddOrderReqaddOrderReq)2GetGoodsByIdResgetGoodsByIdRes= 5thrownewRuntimeException("商品不存在}9OrderPrimaryorderPrimary=newAddOrderResaddOrderRes=newreturn19配置publicclassRibbonConfiguration3publicIRule}89112(name="demo‐eureka‐provider‐service",configurationConfiguration.class3public Configuration45從SpringCloudNetflix1.2.0開始,Ribbon支持使用屬性自定義Ribbon客戶端。這種支持的屬性如下,配置的前綴是 NFLoadBalancerRuleClassName:NFLoadBalancerRuleClassName: AvailabilityFilteringRule 否選擇某個(gè)server,前一個(gè)判斷判定一個(gè)zone的運(yùn)行性能是否可用,剔除不可用的zoneFeign式調(diào)用REST接器、SpringCloud增加了對(duì)SpringMVC注釋的支持,并HttpMessageConverters在SpringWeb中使用了默認(rèn)使用的相同方式。SpringCloud集成了Ribbon和Eureka,在使 (name= publicinterfaceGoodsCtlApi45 publicGetGoodsByIdResgetGoodsById(@PathVariable("id")Integer89 publicAddOrderResaddOrder(AddOrderReqaddOrderReq)2 44//GetGoodsByIdResgetGoodsByIdRes=restTem emo‐ribbon‐provider‐service/goods/goods_info/"+addOrderReq.getProductId(),GetGoodsByIdRes.class);GetGoodsByIdResgetGoodsByIdRes=goodsCtlApi.getGoodsById(addOrderReq.gthrownewRuntimeException("}OrderPrimaryorderPrimary=newAddOrderResaddOrderRes=newreturn}25 publicstaticvoidmain(String[]args)returnnew}9 publicclassFeignConsumerServiceApp5public te 16熔斷器(RPC)。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個(gè)服務(wù)出現(xiàn)應(yīng).Hystrix是Netflix公司開源的一個(gè)項(xiàng)目,它提供了熔斷器功能,能夠分布式系統(tǒng)中的聯(lián)Hystrix提供的能8.4Hystrix1、創(chuàng)建工程demo-hystrix-consumer-servicedemo-hystrix-provider-service116 publicclassHystrixConsumerServiceApp6public te returnnew}publicstaticvoidmain(String[]args)}18 publicclassOrderCtlimplementsOrderCtlApi4privateOrderBiz78mand(fallbackMethod=commandProperties={@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1000")},threadPoolProperties={@HystrixProperty(name="coreSize",value=@HystrixProperty(name="maxQueueSize",value=) publicResult<AddOrderRes>addOrder(AddOrderReqaddOrderReq)AddOrderResaddOrderRes=Resultresult=newreturn} publicResult<AddOrderRes>addOrderFallback(AddOrderReqreturnnew}2829??啟動(dòng)服務(wù)消費(fèi)者,和中心,請(qǐng)求消費(fèi)者服返回默認(rèn)的值{"productId":-1,"productName":"出錯(cuò)了","price":null,"description":null} 8.511refreshable:5show‐details:1212 yyhasnotyetsuccessfullyconnectedtoaEureka1hystrix":{"status":"CIRCUIT_OPEN","details1hystrix":{"status":"CIRCUIT_OPEN","details":{"openCircuitBreakers":["OrdecommandPropertiescommandProperties=@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3000")38.5Hystrix策Hystrix的資源策略有兩種,分別為:線程池和信號(hào)量Hystrix的主要是為每個(gè)依賴組件提供一個(gè)的線程環(huán)境,提供兩種模式的.線程池模式:使用一個(gè)線程池來處理當(dāng)前的請(qǐng)求,線程池對(duì)請(qǐng)求作處理,設(shè)置任務(wù)返回處理超時(shí)時(shí)間,堆積的請(qǐng)求堆積進(jìn)入線程池隊(duì)列。這種方式需要為每個(gè)依賴的服務(wù)申請(qǐng)線程池,有一定的資源消耗,好處是可以應(yīng)對(duì)突發(fā)流量(流量洪峰來臨時(shí),處理不完可將數(shù)據(jù)到線程池隊(duì)里慢慢處理).信號(hào)量模式:使用一個(gè)原子計(jì)數(shù)器(或信號(hào)量)來記錄當(dāng)前有多少個(gè)線程在運(yùn)行,請(qǐng)求來先判斷計(jì)數(shù)器的數(shù)值,若超過設(shè)置的最大線程個(gè)數(shù)則丟棄改類型的新請(qǐng)求,若不超過則執(zhí)行計(jì)數(shù)操作請(qǐng)求來計(jì)數(shù)器+1,請(qǐng)求返回計(jì)數(shù)器-1。這種方式是嚴(yán)格的控制線程且立即返回模式,無法應(yīng)對(duì)突發(fā)流量(流量洪峰來臨時(shí),處理的線程超過數(shù)量,其他的請(qǐng)求會(huì)直接返回,不繼續(xù)去請(qǐng)求依賴的服務(wù))如何程池和信號(hào)量之間做選擇程池策略,這樣的話,可以保證大量的容器(tomcat)線程可用,不會(huì)由于服務(wù)原因,1、對(duì)OrderCtl.addOrder1、對(duì)OrderCtl.addOrderthreadPoolProperties={@HystrixProperty(name="coreSize",value=@HystrixProperty(name

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論