SpringCloud
1.從面試題開始
- 什麼是微服務
- 微服務之間是如何獨立通信的
- SpringCloud和Dubbo有哪些區別
- SpringBoot和SpringCloud,請談談對他們的理解
- 什麼是服務熔斷?什麼是服務降級
- 微服務的優缺點分別是什麼?說下你在項目開發中碰到的坑
- 你所知道的微服務技術棧有哪些?
- Eureka和zookeeper都可以提供服務註冊與發現的功能,請說說兩個的區別
2.微服務概述
微服務是什麼?
微服務化的核心就是將傳統的一站式應用,根據業務拆分成一個一個的服務,徹底地去耦合,每一個微服務提供單獨的業務服務,一個服務只做自己負責的一件事情,從技術角度看就是一種小而獨立的處理過程,類似於進程概念,能夠自動單獨啓動或者銷燬,擁有自動獨立的數據庫。
微服務和微服務架構?
微服務
強調的是服務的大小,他關注的是某一個業務點,是具體解決某一問題/提供對應服務的一個服務應用,狹義的講,可以看成maven工程中的一個module。
微服務架構
微服務架構是一種架構模式,他提倡將單一的應用程序拆分成一組小的服務,服務之間相互調協調、相互配合、對外提供最終的價值。每一個服務運行獨立的進程中,服務和服務之間通過輕量級的通信進行相互調用(通常使用的是Http協議的RESTful API協議)。每一個服務都圍繞自己具體的業務構建,可以單獨的部署到測試或者類生產環境等當中,另外,避免統一的集中式的服務管理機制、對某一個服務來說、可以根據自己的業務情況選擇合適的語言和工具進行構建。
微服務的優點和缺點
優點
- 每一個服務都足夠內聚、足夠小、代碼容易理解
- 開發簡單、開發效率高,一個微服務只做一件事情
- 微服務能夠讓一個小團隊單獨開發
- 微服務是鬆耦合的、無論是在開發階段或是部署階段都是獨立的
- 可以使用不同的語言
- 易於和第三方集成,持續集成工具
- 可以良好的集成最新技術
- 微服務只是邏輯代碼,不會和HTML和CSS或者其他頁面混合
- 都有自己的存儲能力,可以有自己單獨的數據庫,也可以統一的數據庫
缺點
- 運維人員要求比較高
- 數據一致性
- 開發人員需要處理分佈式程序的複雜性
- 系統之間依賴性
- 系統測試
- 服務器間通信成本
微服務技術棧有哪些?
微服務條目 | 落地實現 | 備註 |
---|---|---|
服務開發 | Springboot、Spring、SpringMVc | |
服務配置與管理 | Netflix公司的Archaius、阿里的Diamond | |
服務的註冊和發現 | Eureka、Consul、Zookeeper等 | |
服務的調用 | Rest、RPC、gRPC | |
服務熔斷器 | Hystrix、Envoy等 | |
負載均衡 | Ribbon、Nginx等 | |
服務接口調用(客戶端調用服務端的簡化工具) | Feign等 | |
消息隊列 | Kafaka、RabbitMQ、ActiveMQ等 | |
服務配置中心管理 | SpringCloudConfig、chef等 | |
服務路由(API網關) | Zuul等 | |
服務監控 | Zabbix、Nagios、Metrics、Spectator等 | |
全鏈路追蹤 | Zipkin、Brave、Dapper等 | |
服務部署 | Docker、OpenStack、Kubernetes等 | |
數據量操作開發包 | SpringCloud Stream(封裝與Rdis、Rabbit、Kafaka等收發消息) | |
事件消息總線 | SpringCloud Bus | |
爲什麼選用SpringCloud作爲微服務架構?
選型依據
- 整體解決方案和框架成熟度
- 社區熱度
- 可維護性
- 學習曲線
當前各大互聯網公司的微服務架構有哪些?
- 阿里的Dubbo/HSF
- 京東JSF
- 新浪微博Motan
- 噹噹網Dubbox
各大微服務框架對比
功能點/服務框架 | Netflix/Spring cloud | Motan | gRPC | Thrift | Dubbo/Dubbox |
---|---|---|---|---|---|
功能定位 | 完整的微服務框架 | RPC框架、單整合了ZK或者Consul,實現集羣環境的基本服務註冊/發現 | RPC框架 | RPC框架 | 服務框架 |
支持Rest | 是,Ribbon支持多種可插拔的序列化選擇 | 否 | 否 | 否 | 否 |
支持RPC | 否 | 是(Hession2) | 是 | 是 | 是 |
支持多語言 | 是(Rest) | 否 | 是 | 是 | 否 |
服務註冊/發現 | 是(Eureka)Eureka服務註冊表,Karyon服務端框架支持服務自注冊和健康檢查 | 是(ZK/Consul) | 否 | 否 | 是 |
負載均衡 | 服務端Zuul+客戶端Ribbon;Zuul服務動態路由,雲端負載均衡;Eureka針對中間層服務器 | 是(客戶端) | 否 | 否 | 是(客戶端) |
配置服務 | Netflix Archaius SpringCloud Config Server集中配置 | 是(ZK提供) | 否 | 否 | 否 |
服務調用鏈監控 | 是(Zuul),Zuul提供邊緣服務,API網關 | 否 | 否 | 否 | 否 |
高可用/容錯 | 是(服務端Hystrix+客戶端Ribbon) | 是(客服端) | 否 | 否 | 是(客戶端) |
典型應用案例 | Netfilx | Sina | |||
社區活躍 | 高 | 一般 | 高 | 一般 | 停止了五年 |
學習難度 | 中等 | 低 | 高 | 一般 | 低 |
文檔豐富度 | 高 | 一般 | 一般 | 一般 | 高 |
3.SpringCloud入門概述
是什麼?
SpringCloud,基於Springboot提供的一套微服務解決方案,包括服務註冊和發現、配置中心、全鏈路監控、服務網關、負載均衡、熔斷器等組件,除了基於Netflix的開源組件做了高度抽象的封裝之外,還有一些選型中立的開源組件。
SpringCloud利用Springboot的開發便利性巧妙地簡化了分佈式開發系統的基礎設施的開發,SpringCloud爲開發人員提供了快速構建分佈式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等,它們都可以用Springboot的開發風格做到一鍵啓動和部署。
Springboot並沒有重複的造輪子,它只是將目前各家公司開發的比價成熟、經得起實際考研的服務框架組合起來,通過SpringBoot風格進行在封裝屏蔽了複雜的配置和實現原理,最終給開發者留出了一套簡單易用、易部署和易維護的分佈式系統開發工具包。
SpringCloud=分佈式微服務架構下的一站式解決方案,是各個微服務架構落地技術的集合體,俗稱服務全家桶。
SpringCloud和Springboot是什麼關係?
- SpringBoot專注於快速方便的開發單個個體微服務。
- SpringCloud是關注全局的微服務協調治理架構。
- SpringBoot可以單獨使用開發項目、單SpringCloud離不開SpringBoot。
Dubbo是怎麼到SpringCloud的?那些優缺點?
- 最大區別SpringCloud拋棄了RPC通信,採用是基於HTTP的REST方式
- 品牌機和組裝機的區別
- 社區支持和更新力度
成熟的互聯網架構(分佈式+服務治理Dubbo)
見各大微服務框架對比
總結Cloud和Dubbo
- Dubbo的定位始終是一款RPC框架、而SpringCloud的目標是微服務架構的一站是解決方案
- Cloud和Dubbo只能二選一
能幹啥?
上邊的特性都有。