国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
淺談服務(wù)治理、微服務(wù)與Service Mesh(二) Spring Cloud從入門到精通到放棄

作為本系列文章的第二篇(第一篇:淺談服務(wù)治理、微服務(wù)與Service Mesh(一)Dubbo的前世今生),本文主要為大家介紹下微服務(wù)概念中非?;馃岬腟pring Cloud開發(fā)框架。由于網(wǎng)上關(guān)于Spring Cloud的文章多如牛毛,為了讓大家閱讀后能有不一樣的收獲,因此本文將用一個相對輕松的敘述方式來為大家講解一下Spring Cloud框架和微服務(wù)。雖然不可能通過一篇文章讓大家對Spring Cloud做到從“入門到精通到放棄”,但是希望大家通過閱讀本文能對Spring Cloud和微服務(wù)有一個更加清晰的認識和了解,為后面學習Service Mesh做好一個鋪墊。

Spring Cloud 之“出身名門望族”

作為當下最火熱的微服務(wù)框架,Spring Cloud的名字可以說是無人不知、無人不曉,憑借之前Spring Framework的良好群眾基礎(chǔ)和Cloud這個具有時代感的名字,Spring Cloud一出現(xiàn)便被大家認知。

提到Spring Cloud,便會讓人想起剛剛發(fā)布了2.0版本的Spring Boot。Spring Boot和Spring Cloud都是出自Pivotal公司,Spring Boot和Spring Cloud雖然火熱,但是了解Pivotal公司的人在國內(nèi)卻是不多。實際上Pivotal公司在云計算、大數(shù)據(jù)、虛擬化等領(lǐng)域都有所建樹,這里先給大家簡單八卦下Pivotal的情況。

Pivotal公司是由EMC和VMware聯(lián)合成立的一家公司,GE(通用電氣)也對Pivotal進行了股權(quán)收購,同時GE也是Pivotal的一個重要大客戶。除了Spring Framework、Spring Boot和Spring Cloud之外,我們?nèi)粘i_發(fā)中經(jīng)常使用的Reids、RabbitMQ、Greenplum、Gemfire、Cloud Foundry等,目前都是歸屬于Pivotal公司的產(chǎn)品。其中Gemfire也是被中國鐵路總公司12306使用的分布式內(nèi)存數(shù)據(jù)庫,也就是說你過年回家買不到火車票,這個鍋Pivotal的Gemfire也會跟著一起背(開個小玩笑,哈哈)。

Spring Cloud 之“入門”

Spring Cloud作為一個微服務(wù)的開發(fā)框架,其包括了很多的組件,包括:Spring Cloud Netflix(Eureka、Hystrix、Zuul、Archaius)、Spring Cloud Config、Spring Cloud Bus、Spring Cloud Cluster、Spring Cloud Consul、Spring Cloud Security、Spring Cloud Sleuth、Spring Cloud Data Flow、Spring Cloud Stream、Spring Cloud Task、Spring Cloud Zookeeper、Spring Cloud Connectors、Spring Cloud Starters、Spring Cloud CLI等。

在上述組件中,Spring Cloud Netflix是一套微服務(wù)的核心框架,由互聯(lián)網(wǎng)流媒體播放商Netflix開源后并入Spring Cloud大家庭,它提供了的微服務(wù)最基礎(chǔ)的功能:服務(wù)發(fā)現(xiàn)(Service Discovery)、動態(tài)路由(Dynamic Routing)、負載均衡(Load Balancing),和邊緣服務(wù)器(Edge Server)等。

Spring Boot是Spring的一套快速配置腳手架,可以基于Spring Boot快速開發(fā)單個微服務(wù)。Spring Boot簡化了基于Spring的應(yīng)用開發(fā),通過少量的代碼就能創(chuàng)建一個獨立的、生產(chǎn)級別的Spring應(yīng)用。由于Spring Cloud是基于Spring Boot進行的開發(fā),因此使用Spring Cloud就必須使用到Spring Boot。

下圖是一個常見的關(guān)于Spring Cloud的架構(gòu)圖。下面此圖為例,對Spring Cloud最常用的幾個組件做一個簡單的介紹:

● Eureka:服務(wù)注冊中心,一個基于REST的服務(wù),用于定位服務(wù),以實現(xiàn)微服務(wù)架構(gòu)中服務(wù)發(fā)現(xiàn)和故障轉(zhuǎn)移。
● Hystrix:熔斷器,容錯管理工具,旨在通過熔斷機制控制服務(wù)和第三方庫的節(jié)點,從而對延遲和故障提供更強大的容錯能力。
● Turbine:Turbine是聚合服務(wù)器發(fā)送事件流數(shù)據(jù)的一個工具,用來監(jiān)控集群下Hystrix的Metrics情況。
● Zuul:API網(wǎng)關(guān),Zuul是在微服務(wù)中提供動態(tài)路由、監(jiān)控、彈性、安全等邊緣服務(wù)的框架。
● Ribbon:提供微服務(wù)中的負載均衡功能,有多種負載均衡策略可供選擇,可配合服務(wù)發(fā)現(xiàn)和斷路器使用。
● Feign:Feign是一種聲明式、模板化的HTTP客戶端。
● Spring Cloud Config:配置管理工具包,讓你可以把配置放到遠程服務(wù)器,集中化管理集群配置,目前支持本地存儲、Git以及Subversion。
● Spring Cloud Security:基于Spring Security的安全工具包,為微服務(wù)的應(yīng)用程序添加安全控制。
● Spring Cloud Sleuth:日志收集工具包,封裝了Dapper和log-based追蹤以及Zipkin和HTrace操作,為SpringCloud應(yīng)用實現(xiàn)了一種分布式追蹤解決方案。

除了上面介紹的基礎(chǔ)組件外,常見的Spring Cloud組件還有非常多種,涉及到了微服務(wù)以及應(yīng)用開發(fā)的方方面面:
● Spring Cloud Starters:Spring Boot式的啟動項目,為Spring Cloud提供開箱即用的依賴管理。
● Archaius:配置管理API,包含一系列配置管理API,提供動態(tài)類型化屬性、線程安全配置操作、輪詢框架、回調(diào)機制等功能。
● Consul:封裝了Consul操作,Consul是一個服務(wù)發(fā)現(xiàn)與配置工具,與Docker容器可以無縫集成。
● Spring Cloud Stream:數(shù)據(jù)流操作開發(fā)包,封裝了與Redis,Rabbit、Kafka等發(fā)送接收消息。
● Spring Cloud CLI:基于 Spring Boot CLI,可以讓你以命令行方式快速建立云組件。
● Spring Cloud Task:提供云端計劃任務(wù)管理、任務(wù)調(diào)度。
● Spring Cloud Bus:事件、消息總線,用于在集群(例如,配置變化事件)中傳播狀態(tài)變化,可與Spring Cloud Config聯(lián)合實現(xiàn)熱部署。
● Spring Cloud Data Flow:大數(shù)據(jù)操作工具,作為Spring XD的替代產(chǎn)品,它是一個混合計算模型,結(jié)合了流數(shù)據(jù)與批量數(shù)據(jù)的處理方式。
● Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服務(wù)發(fā)現(xiàn)和配置管理。
● Spring Cloud Connectors:便于云端應(yīng)用程序在各種PaaS平臺連接到后端,如:數(shù)據(jù)庫和消息代理服務(wù)。

Spring Cloud 之“精通”

Spring Cloud雖然集成了眾多組件,可以構(gòu)建一個完整的微服務(wù)應(yīng)用,但是其中的各個組件卻并非完美無缺,很多組件在實際應(yīng)用中都存在諸多不足和缺陷。因此,需要我們對其中的一些組件進行替換和修改,方能構(gòu)建一個強大、靈活、健壯的微服務(wù)架構(gòu)應(yīng)用。

● 配置中心
Spring Cloud Config可以說是Spring Cloud家族中實現(xiàn)最Low的一個組件,直接采用了本地存儲/SVN/Git的方式進行存儲。同時,Spring Cloud Config也缺乏一個完整的可視化管理查詢后臺,當存在比較復(fù)雜的權(quán)限管理和版本管理需求時,Spring Cloud Config會顯得非常力不從心。如果需要在配置修改后,能自動進行配置信息推送的話,使用Spring Cloud Config也無法滿足要求,需要自行編寫代碼進行實現(xiàn)。

目前開源社區(qū)中,已經(jīng)有了很多的開源配置中心實現(xiàn)方案,同時很多公司也自研了自己的配置中心方案。包括淘寶的統(tǒng)一配置中心Diamond(已經(jīng)多年未更新)、百度的分布式配置管理平臺Disconf、攜程的開源分布式配置中心Apollo、360的分布式配置管理工具QConf等等。目前,筆者公司采用的是自己公司自研的配置中心,沒有采用開源實現(xiàn)的主要原因是因為需要同時適配Spring Cloud和Dubbo等多種場景的應(yīng)用。

● 注冊中心
作為Spring Cloud的服務(wù)注冊中心,從分布式CAP理論來看,Eureka采用是AP型設(shè)計,強調(diào)的是注冊中心的高可用性。和Dubbo常用的服務(wù)注冊中心Zookeeper相比,Zookeeper則是采用的CP型設(shè)計,強調(diào)的是注冊中心數(shù)據(jù)的一致性。

Eureka的設(shè)計確實簡單易用,但是默認沒有實現(xiàn)對注冊中心數(shù)據(jù)的持久化。同時,在極端場景下,也會出現(xiàn)多個Eureka注冊中心節(jié)點數(shù)據(jù)不一致,甚至服務(wù)注冊數(shù)據(jù)丟失的情況。當然,從分布式CAP理論來看,理論上是沒辦法做到同時兼顧CAP三點的。目前也有一些互聯(lián)網(wǎng)公司對Eureka進行了改造,支持了數(shù)據(jù)的持久化,但是尚不能完整的支持CAP的全部要求。

● API網(wǎng)關(guān)
API網(wǎng)關(guān)可以說是微服務(wù)需求最多,也是最有難點的一個組件。Spring Cloud中集成的Zuul應(yīng)該說更多的是實現(xiàn)了服務(wù)的路由功能,對于負載均衡等其他功能,需要結(jié)合Ribbon等組件來實現(xiàn)。對于很多個性化的需求,需要開發(fā)者自己來進行編碼實現(xiàn)。

和大部分基于Java的Web應(yīng)用類似,Zuul也采用了Servlet架構(gòu),因此Zuul處理每個請求的方式是針對每個請求是用一個線程來處理。同時,由于Zuul是基于JVM的實現(xiàn),因此性能也會在高并發(fā)訪問場景下成為瓶頸。雖然網(wǎng)上一些文章評測Zuul和Nginx性能接近,但是在性能要求較高的場景下,JVM的內(nèi)存管理和垃圾回收問題,仍然是一個很大的問題。所以在實際的應(yīng)用場景中,通常會采用在多個Zuul幾點前面再添加一層Nginx或者OpenResty來進行代理。

為了解決Zuul的性能問題,Netflix將自己的網(wǎng)關(guān)服務(wù)Zuul進行了升級,新的Zuul 2將HTTP請求的處理方式從同步變成了異步,并且新增諸如HTTP/2、websocket等功能。但是遺憾的是,開源版本的Zuul 2一直處于難產(chǎn)狀態(tài)中,始終沒有和大家正式見面。

● 熔斷器
微服務(wù)中對于服務(wù)的限流、降級、熔斷的需求是多種多樣的,需要在API網(wǎng)關(guān)和各個具體服務(wù)接口中分別進行控制,才能滿足復(fù)雜場景下微服務(wù)架構(gòu)的應(yīng)用需求。

單獨使用Spring Cloud中的Hystrix無法完整的滿足上述的復(fù)雜需求,需要結(jié)合API網(wǎng)關(guān),并通過Kubernetes對資源、進程和命名空間來提供隔離,并通過部分自定義編碼方能實現(xiàn)對全部服務(wù)的限流、降級、熔斷等需求。

● 監(jiān)控系統(tǒng)
無論是Spring Cloud中集成的Spring Cloud Sleuth,還是集成經(jīng)典的ELK,都只是對日志級別的追蹤和監(jiān)控。在大中型微服務(wù)應(yīng)用架構(gòu)中,尤其是基于JVM的項目,還需要添加APM的監(jiān)控機制,才能保證及時發(fā)現(xiàn)各種潛在的性能問題。

APM整體上主要完成3點功能:1.日志追蹤、2.監(jiān)控報警、3.性能統(tǒng)計。目前,國內(nèi)外商業(yè)版本的APM方案已經(jīng)有很多,開源版本的APM方案也開始豐富起來。國內(nèi)開源的APM方案主要有:大眾點評的CAT和Apache孵化中的SkyWalking。這里給大家重點推薦下SkyWalking,SkyWalking是針對分布式系統(tǒng)的應(yīng)用性能監(jiān)控系統(tǒng),特別針對微服務(wù)、Cloud Native和容器化(Docker, Kubernetes, Mesos)架構(gòu),項目的關(guān)注度和發(fā)展速度都很快,中文文檔資料也比較齊全。

Spring Cloud 之“放棄”

Spring Cloud可以說是一個完美的微服務(wù)入門框架,如果你是在一個中小型項目中應(yīng)用Spring Cloud,那么你不需要太多的改造和適配,就可以實現(xiàn)微服務(wù)的基本功能。但是如果是在大型項目中實踐微服務(wù),可能會發(fā)現(xiàn)需要處理的問題還是比較多,尤其是項目中老代碼比較多,沒辦法全部直接升級到Spring Boot框架下開發(fā)的話,你會非常希望能有一個侵入性更低的方案來實施微服務(wù)架構(gòu)。在這種場景下,Service Mesh將會成為你的最佳選擇,經(jīng)過一段時間的發(fā)展,目前Service Mesh這個概念已經(jīng)開始逐步被大家了解和認知。同時,一些Service Mesh的實現(xiàn)方案也逐步成熟和落地,例如Istio、Linkerd、Envoy等。在本系列文章的下一篇中,將為大家對Service Mesh概念做一個系統(tǒng)的介紹。但是在了解Service Mesh概念之前,還是建議大家先對微服務(wù)和Spring Cloud這些概念和框架有一個深入的了解,這樣才能體會到應(yīng)用Service Mesh的價值和意義。

Spring Cloud 與 Dubbo

網(wǎng)上關(guān)于Spring Cloud和Dubbo對比的文章很多,大多數(shù)對比結(jié)果都是Spring Cloud壓倒性優(yōu)勢戰(zhàn)勝Dubbo,下表是對Dubbo和Spring Cloud做的一個基礎(chǔ)功能的對比:

實際上,Dubbo的關(guān)注點在于服務(wù)治理,并不能算是一個真正的微服務(wù)框架。包括目前在開發(fā)中的Dubbo 3.0,也不能完整覆蓋微服務(wù)的各項功能需求。而Spring Cloud一方面是針對微服務(wù)而設(shè)計,另外一方面Spring Cloud是通過集成各種組件的方式來實現(xiàn)微服務(wù),因此理論上可以集成目前業(yè)內(nèi)的絕大多數(shù)的微服務(wù)相關(guān)組件,從而實現(xiàn)微服務(wù)的全部功能。

而對Dubbo而言,如果一定要應(yīng)用到微服務(wù)的使用場景中的話,上表中欠缺的大多數(shù)功能都可以通過集成第三方應(yīng)用和組件的方式來實現(xiàn),跟Spring Cloud相比主要的缺陷在于集成過程中的便利性和兼容性等問題。

Spring Cloud 與 Docker

雖然網(wǎng)上也有很多文章寫到如何使用Docker來實現(xiàn)微服務(wù),但是事實上單獨使用Docker是沒辦法完整的實現(xiàn)微服務(wù)的所有功能的。在實際上微服務(wù)架構(gòu)中,Spring Cloud和Docker更多的是一種協(xié)作的關(guān)系,而不是一種競爭的關(guān)系。通過Docker容器化技術(shù),可以更好的解決引入Spring Cloud微服務(wù)后帶來的部署和運維的復(fù)雜性。

Spring Cloud生態(tài)圈中的Pivotal Cloud Foundry (PCF)作為 PAAS 實現(xiàn),也提供一些類似于Docker的功能支持,但是無論上功能上還是易用性上和Docker還是存在比較大的差異。Pivotal Cloud Foundry和Docker之間的關(guān)系更多的是一種兼容關(guān)系,而不是競爭關(guān)系,Pivotal Cloud Foundry的主要競爭對手是Red Hat的OpenShift。目前,Pivotal Cloud Foundry支持的IAAS包括:AWS、AZURE、GCP、vSphere、OpenStack等。

Spring Cloud 與 Kubernetes

網(wǎng)上也有一些“Spring Cloud與Kubernetes哪個更好”,“當已經(jīng)有了Kubernetes之后,還需要使用Spring Cloud么”之類的文章。首先說筆者并不認為Spring Cloud與Kubernetes是競爭關(guān)系,但是也不否認二者確實在諸多功能上存在一些重合。下圖是對Spring Cloud與Kubernetes在微服務(wù)架構(gòu)中的一些基礎(chǔ)功能上的對比:

通過對比可以看出,Spring Cloud和Kubernetes確實存在一些功能上的重合,但是二者的定位其實差別很大。Spring Cloud是一個基于Java語言的微服務(wù)開發(fā)框架,而Kubernetes是一個針對容器應(yīng)用的自動化部署、伸縮和管理的開源系統(tǒng),它兼容多種語言且提供了創(chuàng)建、運行、伸縮以及管理分布式系統(tǒng)的原語。Spring Cloud更多的是面向有Spring開發(fā)經(jīng)驗的Java語言開發(fā)者,而Kubernetes不是一個針對開發(fā)者的平臺,它的目的是供有DevOps思想的IT人員使用。

為了區(qū)分Spring Cloud和Kubernetes兩個項目的范圍,下面這張圖列出了幾乎是端到端的微服務(wù)架構(gòu)需求,從最底層的硬件,到最上層的DevOps和自服務(wù)經(jīng)驗,并且列出了如何關(guān)聯(lián)到Spring Cloud和Kubernetes平臺。

總結(jié)

通過Spring Cloud、Docker和Kubernetes的組合,可以構(gòu)建更加完整和強大的微服務(wù)架構(gòu)程序。通過三者的整合,使用Spring Boot提供應(yīng)用的打包,Docker和Kubernetes提供應(yīng)用的部署和調(diào)度。Spring Cloud通過Hystrix線程池提供應(yīng)用內(nèi)的隔離,而Kubernetes通過資源、進程和命名空間來提供隔離。Spring Cloud為每個微服務(wù)提供健康終端,而Kubernetes執(zhí)行健康檢查,且把流量導(dǎo)到健康服務(wù)。Spring Cloud外部化配置并更新它們,而Kubernetes分發(fā)配置到每個微服務(wù)。

對于一名開發(fā)人員或者架構(gòu)師來說,想要精通微服務(wù)設(shè)計與開發(fā),能夠在大中型項目中應(yīng)用微服務(wù)架構(gòu),單純掌握Spring Cloud是遠遠不夠的,Docker和Kubernetes等都是需要學習和掌握的內(nèi)容。同時,由于采用微服務(wù)架構(gòu)后帶來了分布式的相關(guān)問題,對于分布式系統(tǒng)理論也必須有一定的了解。當然,最重要的還是對系統(tǒng)業(yè)務(wù)的深入理解,對整體業(yè)務(wù)進行合理的規(guī)劃和拆分,才能真正行之有效的應(yīng)用微服務(wù)架構(gòu),構(gòu)建高效、健壯、靈活、可擴展的微服務(wù)應(yīng)用。

參考鏈接:

https://springcloud.cc

https://www.kubernetes.org.cn

https://my.oschina.net/u/3677020/blog/1570248

http://blog.csdn.net/rickiyeat/article/details/60792925

http://www.uml.org.cn/wfw/201711271.asp

https://projects.spring.io/spring-cloud/

轉(zhuǎn)載自 易商阜極 微信公眾號。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
常見微服務(wù)架構(gòu)方案:Spring Cloud、消息隊列、Docker Swarm等
微服務(wù)架構(gòu)下的核心話題 (三):微服務(wù)架構(gòu)的技術(shù)選型
大廠都在玩的微服務(wù),小團隊如何應(yīng)用?
Istio 可以代替 SpringCloud 嗎?
微服務(wù)化很難?一文簡單理解服務(wù)拆分與服務(wù)發(fā)現(xiàn)
微服務(wù)并非Spring Cloud和Dubbo,下一代微服務(wù)是什么?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服