SpringCloud學習筆記(一) 微服務概述&SpringCloud概述

微服務概述

微服務是什麼

微服務架構提出者馬丁福勒論文

就目前而言,對於微服務業界並沒有一個統一的、 標準的定義(While there is no precise definition of this architectural style)。
但通常而言,微服務架構是一種架構模式或者說是一種架構風格,它提倡將單一應用程序劃分成一組小的服務,每個服務運行在其獨立的自己的進程中,服務之間互相協調、互相配合,爲用戶提供最終價值。服務之間採用輕量級的通信機制互相溝通(通常是基於HTTP的RESTful API)。每個服務都圍繞着具體業務進行構建,並且能夠被獨立地部署到生產環境、類生產環境等。另外,應儘量避免統一的、 集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建,可以有一個非常輕量級的集中式管理來協調這些服務, 可以使用不同的語言來編寫服務,也可以使用不同的數據存儲。

技術維度理解

微服務化的核心就是將傳統的一站式應用,根據業務拆分成一個一個的服務,徹底地解耦合,每一個微服務提供單個業務功能的服務,一個服務做一件事,從技術角度看就是一種小而獨立的處理過程,類似進程概念,能夠自行單獨啓動或銷燬,擁有自己獨立的數據庫。

微服務與微服務架構

微服務

強調的是服務的大小,它關注的是某一個點, 是具體解決某一個問題/提供落地對應服務的一個服務應用,狹意得看,可以看作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、 Kubernetes等
數據流操作開發包 SpringCloud Stream (封裝與Redis,Rabbit、Kafka等發送接收消息)
事件消息總線 Spring Cloud Bus
…… ……

使用SpringCloud作爲微服務架構

選型依據

  1. 整體解決方案和框架成熟度
  2. 社區熱度
  3. 可維護性
  4. 學習曲線

當前各大IT公司用的微服務架構

  1. 阿里Dubbo/HSF(Dubbo停更多年又重啓;HSF是分佈式的高速框架 可理解爲第二代dubbo)
  2. 京東JSF
  3. 新浪微博Motan
  4. 噹噹網DubboX

各微服務框架對比

功能點/服務框架 ######### Netflix/Spring cloud Motan gRPC Thrift Dubbo/DubboX
功能定位 完整的微服務框架 RPC框架,但整合了ZK 或Consul,實現集羣環境的基本的服務註冊/發現 RPC框架 RPC框架 服務框架
支持Rest 是 Ribbon支持多種可插拔的序列化選擇
支持RPC 是(Hession2)
支持多語言 是(Rest形式)?
服務註冊/發現 是(Eureka) Eureka服務註冊表,Karyon服務端框架支持服務自注冊和健康檢查 是(zookeeper/consul)
負載均衡 是(服務端zuul+客戶端Ribbon) Zuul-服務,動態路由 雲端負載均衡 Eureka(針對中間層服務器) 是(客戶端) 是(客戶端)
配置服務 Netflix Archaius SpringCloud Config Server集中配置 是(zookeeper提供)
服務調用鏈監控 是(zuul) Zuul提供邊緣服務,API網關
高可用/容錯 是(服務端Hystrix+客戶端Ribbon) 是(客戶端) 是(客戶端)
典型應用案例 Netflix Sina Google Facebook
社區活躍程度 一般 一般 已經不維護了
學習難度 中等
文檔豐富度 一般 一般 一般
其他 Spring Cloud Bus爲我們的應用程序帶來了更多管理端點 支持降級 Netlix內郵在開發集成gRPC IDL定義 實踐的公司比較多

SpringCloud入門概述

概述

SpringCloud,基於SpringBoot提供了一套微服務解決方案,包括服務註冊與發現,配置中心,全鏈路監控,服務網關,負載均衡,熔斷器等組件,除了基於NetFlix的開源組件做高度抽象封裝之外,還有一些選型中立的開源組件。

SpringCloud利用SpringBoot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,SpringCloud爲開發人員提供了快速構建分佈式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等。它們都可以用SpringBoot的開發風格做到一鍵啓動和部署。

SpringBoot並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過SpringBoot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包

SpringCloud=分佈式微服務架構下的一站式解決方案,是各個微服務架構落地技術的集合體,俗稱微服務全家桶。

SpringCloud與SpringBoot

SpringBoot專注於快速方便的開發單個個體微服務。

SpringCloud是關注全局的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合並管理起來,
爲各個微服務之間提供 配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等集成服務。

SpringBoot可以離開SpringCloud獨立使用開發項目,但是SpringCloud離不開SpringBoot,屬於依賴的關係。

SpringBoot專注於快速、 方便的開發單個微服務個體,SpringCloud關注全局的服務治理框架。

SpringCloud與Dubbo

對比

SpringCloud Dubbo
服務註冊中心 Spring Cloud Netflix Eureka Zookeeper
服務調用方式 REST API RPC
服務監控 Spring Boot Admin Dubbo-monitor
斷路器 Spring Cloud Netflix Hystrix 不完善
服務網關 Spring Cloud Netflix Zuul
分佈式配置 Spring Cloud Config
服務跟蹤 Spring Cloud Sleuth
消息總線 Spring Cloud Bus
數據流 Spring Cloud Stream
批量任務 Spring Cloud Task
…… …… ……

最大區別:SpringCloud拋棄了Dubbo的RPC通信,採用的是基於HTTP的REST方式。

嚴格來說,這兩種方式各有優劣。雖然從一定程度上來說,SpringCloud犧牲了服務調用的性能,但也避免了上面提到的原生RPC帶來的問題。而且REST相比RPC更爲靈活,服務提供方和調用方的依賴只依靠一紙契約, 不存在代碼級別的強依賴,這在強調快速演化的微服務環境下,顯得更加合適。

就像品牌機與組裝機的區別:

很明顯,SpringCloud的功能比DUBBO更加強大、涵蓋面更廣,而且作爲Spring的拳頭項目,它也能夠與Spring Framework、Spring Boot、 Spring Data、 Spring Batch等其他Spring項目完美融合,這些對於微服務而言是至關重要的。使用Dubbo構建的微服務架構就像組裝電腦,各環節我們的選擇自由度很高,但是最終結果很有可能因爲一條內存質量不行就點不亮了,總是讓人不怎麼放心,但是如果你是一 名高手,那這些都不是問題,而Spring Cloud就像品牌機,在SpringSource的整合下,做了大量的兼容性測試,保證了機器擁有更高的穩定性,但是如果要在使用非原裝組件外的東西,就需要對其基礎有足夠的瞭解。

社區支持與更新力度:

最爲重要的是,DUBBO停止了5年左右的更新,雖然2017.7重啓了。對於技術發展的新需求,需要由開發者自行拓展升級(比如噹噹網弄出了DubboX) , 這對於很多想要採用微服務架構的中小軟件組織顯然是不太合適的,中小公司沒有這麼強大的技術能力去修改Dubbo源碼+周邊的一整套解決方案,並不是每一個公司都有阿里的大牛+ 真實的線上生產環境測試過。

總結

Dubbo重啓維護開發的劉軍(主要負責人之一):

兩者所解決的問題域並不一樣——
Dubbo的定位始終是一款RPC框架,而SpringCloud的目標是微服務架構下的一站式解決方案。
如果非要比較的話,我覺得Dubbo可以類比到Netflix OSS技術棧,而Spring Cloud集成了Netflix OSS作爲分佈式服務治理解決方案,但除此之外Spring Cloud還提供了包括config、stream、security、sleuth等等分佈式問題解決方案。

鏈接

官網

Spring Cloud Netflix

spring Cloud Dalston中文文檔

Spring Cloud中國社區

Spring Cloud中文網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章