<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SpringBoot+SpringCloud

      摘自《Java微服務(wù)分布式架構(gòu)企業(yè)實戰(zhàn)》

      1 Spring Boot

        Spring Boot是用于構(gòu)建微服務(wù)的基礎(chǔ)框架,可以輕松地整合Spring Cloud實現(xiàn)系統(tǒng)服務(wù)化,在學(xué)習(xí)微服務(wù)之前學(xué)習(xí)Spring Boot的使用是非常有必要的,而且 Spring Boot與Spring MVC框架技術(shù)無縫銜接,使用自動化配置替代了原本需要手動完成的樣板化配置,摒棄之前開發(fā)過程中繁多的配置文件,測試部署起來也更加便捷。

        Spring技術(shù)的出現(xiàn),顛覆了傳統(tǒng)的Java EE技術(shù),如今Spring Boot框架的出現(xiàn)簡化了Spring應(yīng)用程序的開發(fā),開箱即用,非常方便。相信大家都聽說過“習(xí)慣優(yōu)于配置”這句話,該框架采用了特定的方式進行配置,因此,程序員在開發(fā)的過程中無須再進行樣板化配置,只需要少量配置和少量代碼就能完成,使得開發(fā)更加簡單、快速、方便。而且 Spring Boot內(nèi)嵌 Servlet(Tomcat)容器,可以直接啟動運行項目。Spring至今已經(jīng)發(fā)行多個版本,而且版本更新迭代也非常迅速,下面列舉版本更新的過程中的重要變更。

        1.Spring 1.x時代

        在Spring1.x時代,都是通過XML文件配置Bean,隨著項目的不斷擴大,需要將XML配置分放到不同的配置文件中,需要頻繁地在Java類和XML配置文件中切換。

        2.Spring 2.x時代

        隨著JDK 1. 5帶來的注解支持,Spring 2.x可以使用注解對Bean進行聲明和注入,大大地減少了XML配置文件,同時也大大簡化了項目的開發(fā)。

        3.Spring 3.x時代

        從Spring 3.x開始提供了Java配置方式,使用Java配置方式可以更好地理解配置的Bean,并且 Spring 4.x和Spring Boot都推薦使用Java配置的方式,之前的XML配置將會被Java配置替換掉。
        4.Spring 5.x時代

        Spring 5.x是Java界首個支持響應(yīng)式的Web框架,是Spring的一個重要版本,距離Spring 4.x差不多四年。在此期間,大多數(shù)增強都是在Spring Boot項目中完成的,其最大的亮點就是提供了完整的端到端響應(yīng)式編程的支持(新增 Spring WebFlux模塊)。

        Spring WebFlux同時支持使用舊的Spring MVC 注解聲明 Reactive Controller.和傳統(tǒng)的MVC Controller 不同、Reactive Controller操作的是非阻塞的ServerHttpRequest和ServerHttpResponse,而不再是Spring MVC里的 HttpServletRequest和HttpServletResponse.至此也代表著Java正式迎來了響應(yīng)式異步編程的時代。

        在之前開發(fā)的過程中,通常會有以下幾步來完成:

        (1)配置web.xml,加載Spring和Spring MVC;

        (2)配置數(shù)據(jù)庫連接、配置Spring事務(wù);

        (3)配置加載配置文件的讀取,開啟注解;

        (4)配置日志文件。

        配置完成之后部署Tomcat調(diào)試,但是如果使用Spring Boot將會變得更加簡單,只需要非常少的幾個配置就能夠迅速地搭建起來一套Web項目或者構(gòu)建一個微服務(wù)。

        5.Spring Boot的優(yōu)缺點

        優(yōu)點:快速構(gòu)建項目,對主流開發(fā)框架的無配置集成,項目可獨立運行,無須外部依賴Servlet容器,提供運行時的應(yīng)用監(jiān)控,極大地提高了開發(fā)、部署效率,與云計算的天然集成等。
        缺點:版本迭代速度很快,一些模塊改動很大,由于不用自己做配置,報錯時很難定位,網(wǎng)上現(xiàn)成的解決方案比較少等。

      2.Spring Cloud

        在分布式、微服務(wù)系統(tǒng)中,當(dāng)客戶端或者API網(wǎng)關(guān)想要訪問一個服務(wù)時,面對那么多的服務(wù),怎樣能夠動態(tài)地準(zhǔn)確獲取某個服務(wù)的IP和端口成了一個挑戰(zhàn),此時提出服務(wù)注冊與發(fā)現(xiàn)機制-每一個服務(wù)自動把自己的IP和端口注冊到一個專門的服務(wù)器上,讓調(diào)用方能夠從計算機名或者應(yīng)用ID、應(yīng)用名稱方便地調(diào)用到需要調(diào)用的服務(wù),就可以很好地解決這個問題。

        Spring Cloud是一個提供了全套的分布式系統(tǒng)解決方案的微服務(wù)框架,它雖然是Spring 家族的新成員,但是更新的速度特別快。Spring Cloud為開發(fā)人員提供了一系列分布式系統(tǒng)的解決方案,包括配置管理、服務(wù)注冊與發(fā)現(xiàn)、路由、控制總線、全局鎖等,同時Spring Cloud還能夠快速地對接云服務(wù)平臺,快速地啟動服務(wù)、構(gòu)建應(yīng)用,有了這些方案,讓開發(fā)分布式系統(tǒng)更加簡單,使開發(fā)人員真正享受到“開箱即用”特性所帶來的便捷。

      3.Netfix Eureka
        Spring Cloud Netfix的Eureka是一個服務(wù)注冊和發(fā)現(xiàn)模塊,它的作用與ZooKeeper的作用相似。在微服務(wù)的開發(fā)過程中服務(wù)的治理是非常核心的模塊,一個大型的應(yīng)用程序通常由非常多的服務(wù)構(gòu)成,然而每個服務(wù)不一定都會部署在一臺服務(wù)器上,因此客戶端在請求服務(wù)時通常要對服務(wù)的地址和IP進行解析,如圖6. 6所示。

       

        Spring Cloud 是使用 Netfix Eureka來實現(xiàn)服務(wù)注冊與發(fā)現(xiàn)的,Netfix Eureka 中不僅包含了客戶端也有服務(wù)端。服務(wù)端稱為服務(wù)注冊中心,持續(xù)提供服務(wù)的發(fā)現(xiàn)和注冊。客戶端是通過注解在應(yīng)用程序代碼中開啟的,當(dāng)應(yīng)用程序運行時,會將自身提供的服務(wù)注冊到Eureka服務(wù)端,同時通過持續(xù)周期性地發(fā)送心跳來判定服務(wù)是否一直可用,還會將從服務(wù)注冊中心查詢到的服務(wù)IP、端口等相關(guān)信息緩存到本地。

      4.Eureka高可用集群

        對于微服務(wù)系統(tǒng)來說,所有的服務(wù)都將會注冊到注冊中心,Eureka的可用性關(guān)乎整個應(yīng)用程序能否繼續(xù)正常地提供服務(wù),一旦部署Eureka服務(wù)的機器發(fā)生宕機或一些網(wǎng)絡(luò)因素的影響將可能致使整個應(yīng)用處于癱瘓狀態(tài)。因此,Eureka通常在企業(yè)的實際部署過程中都是以集群形式存在的,這樣即使一個節(jié)點癱瘓,還有其他節(jié)點保證服務(wù)的可用性,降低了風(fēng)險。

        Eureka的高可用實際上就是把一個或多個Eureka Server當(dāng)作一個普通的服務(wù),將Eureka Server本身像其他服務(wù)一樣注冊到另一個Eureka Server中,使服務(wù)注冊中心達到相互注冊的目的,這些注冊中心的數(shù)據(jù)都是同步的,因此無論哪一個注冊中心存在故障,都可以繼續(xù)使用其他的處于存活狀態(tài)的Eureka Server.

      5.Spring Cloud 創(chuàng)建服務(wù)消費者(Ribbon)

        微服務(wù)是面向服務(wù)進行開發(fā)的,一個個服務(wù)之間的聯(lián)系也是錯綜復(fù)雜的,隨著項目的深人或者水平擴展,服務(wù)與服務(wù)之間就像蜘蛛網(wǎng)一樣交織在一起,管理起來也會愈發(fā)困難,所以能夠讓服務(wù)的消費者更簡單地調(diào)用服務(wù),也是非常重要的。Spring Cloud也提供了相應(yīng)的解決方案,能夠使服務(wù)的調(diào)用輕松地實現(xiàn)REST模板請求,還能做到負(fù)載均衡的效果。

        Spring Cloud Ribbon 是基于Netflix Ribbon實現(xiàn)的HTTP和TCP客戶端負(fù)載均衡工具框架。在微服務(wù)項目中服務(wù)之間的調(diào)用、API Gateway的請求都是通過Ribbon(或者對Ribbon進一步的封裝框架)實現(xiàn)的。
      (1)RestTemplate 詳解
        Ribbon是通過 RestTemplate+@LoadBalance實現(xiàn)的,Spring為創(chuàng)建REST API提供了良好的支持,將資源的狀態(tài)以最適合的形式進行傳遞。借助RestTemplate,Spring 應(yīng)用能夠方便地使用REST資源,Spring的 RestTemplate 訪問使用了模板方法的設(shè)計模式。下面將詳細介紹 RestTemplate實現(xiàn)不同請求和參數(shù)的服務(wù)調(diào)用。

      6.負(fù)載均衡策略
        負(fù)載均衡在分布式系統(tǒng)中尤為重要,可以使系統(tǒng)實現(xiàn)高可用、提高系統(tǒng)的處理能力。實現(xiàn)負(fù)載均衡的方式有很多,包括硬件負(fù)載均衡和軟件負(fù)載均衡。軟件負(fù)載均衡的實現(xiàn)通常通過相應(yīng)的模塊來處理完成請求分發(fā)的功能,如反向代理負(fù)載均衡服務(wù)Nginx等,如圖7. 1所示。

       

        在部署單臺服務(wù)器時,如果這個服務(wù)器宕機了,那么用戶自然也無法繼續(xù)訪問了,如果同時有很多用戶試圖訪問服務(wù)器,超過了服務(wù)器本身處理能力的上限,就會出現(xiàn)加載速度緩慢或無法繼續(xù)提供服務(wù)的情況。為了應(yīng)對這種情況,可以將服務(wù)同時部署在多臺服務(wù)器中,當(dāng)客戶端發(fā)起請求時,可以使用負(fù)載均衡服務(wù)作為一個請求訪問節(jié)點,負(fù)載均衡服務(wù)器根據(jù)相應(yīng)的策略(如輪詢、權(quán)重、隨機等)來指定提供服務(wù)的服務(wù)器。這樣一來,可以防止單點故障或服務(wù)效率低下的問題發(fā)生,接下來將通過實例了解Ribbon中實現(xiàn)負(fù)載均衡的方式。

      7.Spring Cloud 創(chuàng)建服務(wù)消費者Feign  

        Ribbon的使用,在服務(wù)的調(diào)度方面都會利用RestTemplate的攔截來實現(xiàn)接口的調(diào)用,它使用HttpClient或RestTemplate 模擬HTTP請求,調(diào)用的過程中步驟非常煩瑣,而Feign是對Ribbon的進一步封裝,簡化了編寫步驟,使用起來更加方便,接下來將學(xué)習(xí)聲明式服務(wù)調(diào)用Feign的使用。

        Feign是一個聲明式的REST客戶端,它的目的就是讓REST風(fēng)格的API調(diào)用變得更加簡單。使用Feign,只需要創(chuàng)建一個接口并加上注解來配置就可以實現(xiàn)服務(wù)提供者的接口綁定。它具有可插拔的注解特性,而且擴展了對 SpringMVC注解的支持,它本身就是對Ribbon的進一步封裝,因此同樣具備負(fù)載均衡調(diào)用。Feign會完全代理 HTTP請求,只需要像調(diào)用方法一樣調(diào)用它就可以完成服務(wù)請求及相關(guān)處理。

      8.使用Hystrix 服務(wù)容錯保護
        微服務(wù)架構(gòu)中,服務(wù)被拆分得很細,每個服務(wù)都不在一個進程中,網(wǎng)絡(luò)的不穩(wěn)定性則會造成服務(wù)在遠程調(diào)用的過程中出現(xiàn)故障或延遲的情況發(fā)生。由于HTTP請求是同步的,如果不采取補救措施,服務(wù)調(diào)用方會一直處在等待的地步。后續(xù)的請求一旦造成積壓,線程同步就會造成阻塞,阻塞就會引起服務(wù)雪崩的效應(yīng),最終導(dǎo)致服務(wù)癱瘓。面對這種問題,Spring Cloud也給出了解決方案-Spring Cloud Hystrix熔斷器的使用。
      (1)熔斷器簡介
        在微服務(wù)架構(gòu)中,根據(jù)業(yè)務(wù)來拆分成一個個的服務(wù),服務(wù)與服務(wù)之間可以通過RPC相互調(diào)用,在Spring Cloud中可以用RestTemplate+Ribbon和Feign來調(diào)用。為了保證其高可用,單個服務(wù)通常會集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個服務(wù)出現(xiàn)問題,調(diào)用這個服務(wù)就會出現(xiàn)線程阻塞,此時若有大量的請求涌入,Servlet容器的線程資源會被消耗完畢,導(dǎo)致服務(wù)癱瘓。由于服務(wù)與服務(wù)之間的依賴性,故障會傳播,會對整個微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)故障的“雪崩”效應(yīng)。為了解決這個問題,業(yè)界提出了熔斷器模型。
        Netflix開源了 Hystrix組件,實現(xiàn)了熔斷器模式,Spring Cloud對這一組件進行了整合。在微服務(wù)架構(gòu)中,一個請求需要調(diào)用多個服務(wù)是非常常見的,如圖7. 9所示。

        請求通過瀏覽器或移動端發(fā)送至API網(wǎng)關(guān),調(diào)用服務(wù)A、服務(wù)B、服務(wù)C、服務(wù)D四個服務(wù),而服務(wù)A又會繼續(xù)調(diào)用服務(wù)AI,較底層的服務(wù)AI如果出現(xiàn)故障則不能及時返回結(jié)果,而服務(wù)A此時也沒有做服務(wù)降級處理,可能會導(dǎo)致服務(wù)A甚至整個系統(tǒng)的癱瘓。為了避免這種情況的發(fā)生可以在系統(tǒng)設(shè)計時使用一定的降級策略,保證即使出現(xiàn)某個服務(wù)提供方的服務(wù)不可用,即服務(wù)的調(diào)用的不可用達到一個閾值(Hystrix是5秒20次)時,熔斷器將會打開,服務(wù)調(diào)用方仍然可以切換到降級后的策略繼續(xù)執(zhí)行,如圖7. 10所示。

        圖7. 10中,當(dāng)服務(wù)AI出現(xiàn)故障后,服務(wù)熔斷開啟,服務(wù)A和服務(wù)AI之間啟動斷路器熔斷機制,為了避免連鎖故障,還可以通過Fallback()方法直接返回一個固定值,接下來將結(jié)合案例講解熔斷器的使用。

       9.路由網(wǎng)關(guān)分布式配置

        在微服務(wù)架構(gòu)中,需要幾個基礎(chǔ)的服務(wù)治理組件,包括服務(wù)注冊與發(fā)現(xiàn)、服務(wù)提供、服務(wù)消費、負(fù)載均囊、熔斷器、智能路由、配置管理等,這幾個基礎(chǔ)組件相互協(xié)作,共同組建了一個簡單的微服務(wù)系統(tǒng),本章將繼續(xù)學(xué)習(xí)路由網(wǎng)關(guān)服務(wù)和分布式配置中心的實現(xiàn)。

        (1)如果選擇將原有的單體應(yīng)用構(gòu)建成一組微服務(wù)時,首先就要考慮如何解決程序的客戶端與服務(wù)之間進行交互的問題,如果一個微服務(wù)架構(gòu)的應(yīng)用中有很多服務(wù),那么客戶端與微服務(wù)之間要想直接通信必然要在客戶端存儲每個服務(wù)的IP和端口,當(dāng)系統(tǒng)規(guī)模不斷增大時,服務(wù)也會越來越多,顯然這種做法是不現(xiàn)實的。因此,需要使用API網(wǎng)關(guān)服務(wù)器統(tǒng)一維護服務(wù)的IP和端口,這樣不僅可以完成請求路由的功能,還能實現(xiàn)負(fù)載均衡、驗證過濾等其他功能,一個簡單的微服務(wù)系統(tǒng)如圖8. 1所示。

        在圖8. 1中的Spring Cloud微服務(wù)系統(tǒng)中,一種常見的負(fù)載均衡方式是,客戶端的請求首先經(jīng)過負(fù)載均衡(Ngnix),再到達服務(wù)網(wǎng)關(guān)(Zuul集群),然后再到具體的服務(wù)。所有的服務(wù)將會統(tǒng)一注冊到高可用的服務(wù)注冊中心集群中,服務(wù)的所有的配置文件將交由配置服務(wù)來統(tǒng)一管理,配置服務(wù)的配置文件放在Git倉庫,方便開發(fā)人員可以隨時更改配置文件。Spring Cloud Zuul和Eureka結(jié)合,將自身服務(wù)注冊到Eureka服務(wù)注冊中心,同時獲取到其他服務(wù)的實例信息。

        Zuul的主要功能是路由轉(zhuǎn)發(fā)和過濾器。路由功能是微服務(wù)的一部分,如通過REST接口訪問/api/user就可以將請求轉(zhuǎn)發(fā)到User服務(wù),訪問/api/shop就可以將請求轉(zhuǎn)發(fā)到Shop服務(wù)。Zuul默認(rèn)和Ribbon結(jié)合實現(xiàn)了負(fù)載均衡的功能。

       10.Spring Cloud服務(wù)追蹤

           隨著項目的不斷擴展,微服務(wù)的問題也會不斷地顯現(xiàn)出來,一個客戶端請求在調(diào)用服務(wù)得到返回結(jié)果的過程中,也許會形成一條復(fù)雜的調(diào)用鏈路,一個服務(wù)可能會有多個鏈路依賴,幾個服務(wù)協(xié)同完成。這樣一來,如果其中一條鏈路發(fā)生故障或者出現(xiàn)延遲,都可能會引起請求的失敗。這時,就可以通過實現(xiàn)對請求調(diào)用的追蹤來迅速發(fā)現(xiàn)故障,監(jiān)控每條鏈路的性能并及時地排查解決問題。

        1)ZipKin簡介
        ZipKin是一個開放源代碼的分布式跟蹤系統(tǒng),由Twitter公司研發(fā),它致力于收集服務(wù)的定時數(shù)據(jù),以解決微服務(wù)架構(gòu)中的延遲問題,包括數(shù)據(jù)的收集、存儲、查找和展現(xiàn)。它的理論模型來自于Google Dapper的論文。

        每個服務(wù)向ZipKin報告計時數(shù)據(jù),ZipKin會根據(jù)調(diào)用關(guān)系通過ZipKin UI生成依賴關(guān)系圖,顯示了多少跟蹤請求通過每個服務(wù),該系統(tǒng)讓開發(fā)者可通過一個Web前端輕松地收集和分析數(shù)據(jù),例如用戶每次請求服務(wù)的處理時間等,可方便地監(jiān)測系統(tǒng)中存在的瓶頸。

        微服務(wù)架構(gòu)是通過業(yè)務(wù)來劃分服務(wù)的,使用REST調(diào)用。對外暴露的一個接口,可能需要很多個服務(wù)協(xié)同才能完成這個接口功能,如果鏈路上任何一個服務(wù)出現(xiàn)問題或者網(wǎng)絡(luò)超時,都會形成導(dǎo)致接口調(diào)用失敗。隨著業(yè)務(wù)的不斷擴張,服務(wù)之間互相調(diào)用會越來越復(fù)雜,如圖9. 1所示。

      posted @ 2022-04-14 16:17  嘉禾世興  閱讀(1065)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 在线视频中文字幕二区| 俄罗斯少妇性XXXX另类| 亚洲国产精品一二三四五| 亚洲中文字幕一区二区| 麻花传媒在线观看免费| 精品免费国产一区二区三区四区 | 色国产视频| 狠狠躁夜夜躁人人爽天天古典| 亚洲人成色77777在线观看| 日韩精品一区二区蜜臀av| 精品中文人妻在线不卡| 东方四虎在线观看av| 欧洲码亚洲码的区别入口| 又湿又紧又大又爽a视频| 日韩精品无码去免费专区 | 日本熟妇乱一区二区三区| 老鸭窝在线视频| 年日韩激情国产自偷亚洲| 怡红院一区二区三区在线| 国产精品久久中文字幕| 国产免费午夜福利蜜芽无码| 欧美日本中文| 亚洲婷婷综合色高清在线| 国产口爆吞精在线视频2020版 | 日韩卡1卡2卡三卡免费网站| 国内自拍偷拍福利视频看看| 伊人久久大香线蕉av五月天| 国产美女深夜福利在线一| 康保县| 九九热精彩视频在线免费| 韩国无码AV片午夜福利| 久久精品国产再热青青青| 亚洲av乱码久久亚洲精品| 实拍女处破www免费看| 极品少妇的粉嫩小泬看片| 日日躁夜夜躁狠狠躁超碰97| 蜜臀av久久国产午夜| 亚洲精品尤物av在线网站| 嫩草研究院久久久精品| 久久国产精品老人性| 蓝田县|