聊聊微服務以及Springcloud。
一、什麼是微服務
-
微服務化的核心就是將傳統的一站式,根據業務拆分成一個一個的服務,徹底地去耦合,每一個微服務提供單個業務功能的服務,一個服務做一件事,從技術角度看就是一種小而獨立的處理過程,類似程序概念,能夠自行單獨啟動或銷燬,擁有自己獨立的資料庫。
-
強調的是服務的大小,它關注的是某一點,是具體解決某一個問題/提供落地對應服務的一個服務應用,狹義的看,可以看作eclipse裡面的一個微服務工程/或者Module。 二、微服務架構
-
微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,為使用者提供最終價值。
-
每個服務執行在獨立的程序中,服務與服務間採用輕量級的通訊機制,互相協作(通常是基於Http協議的Restful Api)每個服務都圍繞著具體業務進行構建,並且能夠被獨立的部署到生產環境、類生產環境等。另外,應當儘量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建 三、微服務的優缺點
- 優點:
- 每個服務足夠內聚,足夠小,程式碼容易理解這樣能聚焦一個指定的業務功能或業務需求;
- 開發簡單、開發效率提高,一個服務可能就是專一的只幹一個指定的業務功能或業務需求;
- 微服務能夠被小團隊單獨開發,這個小團隊是2到5人的開發人員組成;
- 微服務是鬆耦合的,是具有功能意義的服務,無論是在開發階段或部署階段都是獨立的;
- 微服務能夠使用不同的語言開發;
- 易於和第三方整合,微服務允許容易且靈活的方式整合自動部署,通過 持續整合工具,如Jenkins,Hudson,bamboo;
- 微服務易於被一個開發人員理解,修改和維護,這樣小團隊能夠更關注自己的工作成果。無需通過合作才能體現價值;
- 微服務允許你利用融合最新技術;
- 微服務只是業務邏輯程式碼,不會和html,css或其他介面元件混合
- 每個微服務都有自己的儲存能力,可以有自己的資料庫,也可以有統一資料庫
- 缺點:
- 開發人員要處理分散式系統的複雜性。
- 多服務運維難度,隨著服務的增加,運維的壓力也在增大。
- 系統部署依賴。 四、微服務技術棧
微服務條目 | 落地技術 |
---|---|
服務開發 | Springboot,Spring,SpringMVC |
服務配置和管理 | Netflix公司的archaius,阿里的diamond |
服務註冊與發現 | eureka,consul,zookeeper |
服務呼叫 | rest,RPC,gRPC |
服務熔斷器 | hystrix,envoy等 |
負載均衡 | ribbon,nginx等 |
服務介面呼叫 | feign等 |
訊息佇列 | Kafka,rabbitmq,activemq |
服務配置中心管理 | Springcloudconfig,chef等 |
服務路由(API閘道器) | Zuul等 |
服務監控 | zabbix,nagios,metrics,spectator |
全鏈路追蹤 | zipkin,brave,dapper等 |
服務部署 | docker,openStack,kubernates等 |
資料流操作開發包 | Springcloud stream |
事件訊息匯流排 | Springcloud bus |
五.Springcloud的一些常用註解
- @EnableEurekaServer:申明此處為服務註冊中心
- @EnableEurekaClient:表明自己是一個生產者,服務提供者
- @EnableDiscoveryClient:表明自己是一個消費者。
- @EnableHystrix:表示開啟斷路器
- @EnableTransactionManagement:開啟事物管理
- @EnableHystrix:開啟斷路由
- @EnableHystrixDashboard:開啟斷路由儀表盤
- @EnableFeignClients:開啟feign
- @EnableZipkinServer:開啟zipkin服務追蹤
- @EnableZuulProxy:開啟ZUUL路由
六.Springcloud的通俗理解
Springcloud就是一個幫派的幫主,手下有許多小弟。
主要的小弟有:Spring Cloud Config、Spring Cloud Netflix(Eureka、Hystrix、Zuul、Archaius…)、Spring Cloud Bus、Spring Cloud for Cloud Foundry、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。
1.Spring Cloud Netflix 這個可是個大boss,地位僅次於老大,怎麼說一個幫派也得有個得力干將,老大各項服務依賴與它,與各種Netflix OSS元件整合,組成微服務的核心,它的小弟主要有Eureka, Hystrix, Zuul, Archaius… 太多了
2.Netflix Eureka 服務中心,雲端服務發現,一個基於 REST 的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。這個可是springcloud最牛鼻的小弟,服務中心,任何小弟需要其它小弟支援什麼都需要從這裡來拿,同樣的你有什麼獨門武功的都趕緊過報道,方便以後其它小弟來呼叫;它的好處是你不需要直接找各種什麼小弟支援,只需要到服務中心來領取,也不需要知道提供支援的其它小弟在哪裡,還是幾個小弟來支援的,反正拿來用就行,服務中心來保證穩定性和質量。
3.Netflix Hystrix 熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。比如突然某個小弟生病了,但是你還需要它的支援,然後呼叫之後它半天沒有響應,你卻不知道,一直在等等這個響應;有可能別的小弟也正在呼叫你的武功絕技,那麼當請求多之後,就會發生嚴重的阻塞影響老大的整體計劃。這個時候Hystrix就派上用場了,當Hystrix發現某個小弟不在狀態不穩定立馬馬上讓它下線,讓其它小弟來頂上來,或者給你說不用等了這個小弟今天肯定不行,該幹嘛趕緊幹嘛去別在這排隊了。
4.Netflix Zuul Zuul 是在雲平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。Zuul 相當於是裝置和 Netflix 流應用的 Web 網站後端所有請求的前門。當其它門派來找大哥辦事的時候一定要先經過zuul,看下有沒有帶刀子什麼的給攔截回去,或者是需要找那個小弟的直接給帶過去。
5.Spring Cloud Config 俗稱的配置中心,配置管理工具包,讓你可以把配置放到遠端伺服器,集中化管理叢集配置,目前支援本地儲存、Git以及Subversion。就是以後大家武器、槍火什麼的東西都集中放到一起,別隨便自己帶,方便以後統一管理、升級裝備。
6.Spring Cloud Bus 事件、訊息匯流排,用於在叢集(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。相當於水滸傳中日行八百里的神行太保戴宗,確保各個小弟之間訊息保持暢通。