SpringCloud Netflix入門簡介

回顧微服務架構

微服務架構4個核心問題:
	1. 服務不少,客戶端該怎麼訪問?
	2. 這麼多服務,服務之間如何通訊?
	3. 這麼多服務,如何治理?
	4. 某個服務掛了怎麼辦?
	
解決方案:
	springCoud:它是一種生態!它是基於springboot構建的
	它落地的流行實現有如下三個:
	
	1.Spring Cloud NetFlix 一站式解決方案!(NetFlix停更不停用)
	
		api網關:zuul組件
		Feign:它是基於HttpClient的,也就是基於Http的通訊方式:同步阻塞的
		eureka:服務註冊與發現,就是來服務治理的
		Hystrix:熔斷機制,某個服務掛了採用的機制
		。。。。等其餘組件
		
	
	
	2.Apache Dubbo Zookeeper 半自動,須要整合別人的東西! 
	
		API網關:沒有,須要找第三方組件,或者本身實現
		Dubbo: RPC框架,用於服務間通訊(很專業)
		Zookeeper: 服務註冊與發現
		熔斷機制:沒有,能夠藉助Hystrix組件
	
		能夠得出個結論:Dubbo這個方案並不完善
	
	
	3.Spring Cloud Alibaba 最新的一站式解決方案! 更簡單
	
	
新概念:服務網格  server Mesh
	   它的表明落地實現: istio
	   
	   
	   
	   
萬變不離其宗:
	1.API網關解決服務路由
	2.HTTP,RPC解決服務通訊
	3.服務註冊與發現,實現高可用
	4.熔斷機制,解決服務掛了的問題,也就是服務降級
	
本質: 網絡不可靠

常見面試題

1.1 什麼是微服務?html

1.2 微服務之間是如何獨立通信的?ios

1.3 SpringCloud 和 Dubbo有那些區別?git

1.4 SpringBoot 和 SpringCloud,請談談你對他們的理解github

1.5 什麼是服務熔斷?什麼是服務降級?面試

1.6 微服務的優缺點分別是什麼?說下你在項目開發中遇到的坑spring

1.7 你所知道的微服務技術棧有哪些?列舉一二數據庫

1.8 Eureka和Zookeeper均可以提供服務註冊與發現的功能,請說說二者的區別api

springboot

微服務概述

什麼是微服務?

微服務(Microservice Architecture) 是近幾年流行的一種架構思想,關於它的概念很難一言以蔽之。服務器

究竟什麼是微服務呢?咱們在此引用ThoughtWorks 公司的首席科學家 Martin Fowler 於2014年提出的一段話:

原文:https://martinfowler.com/articles/microservices.html

漢化:http://www.javashuo.com/article/p-kujxclul-w.html

  • 就目前而言,對於微服務,業界並無一個統一的,標準的定義。
  • 但一般而言,微服務架構是一種架構模式,或者說是一種架構風格,它體長將單一的應用程序劃分紅一組小的服務,每一個服務運行在其獨立的本身的進程內,服務之間互相協調,互相配置,爲用戶提供最終價值,服務之間採用輕量級的通訊機制(HTTP)互相溝通,每一個服務都圍繞着具體的業務進行構建,而且能狗被獨立的部署到生產環境中,另外,應儘可能避免統一的,集中式的服務管理機制,對具體的一個服務而言,應該根據業務上下文,選擇合適的語言,工具(Maven)對其進行構建,能夠有一個很是輕量級的集中式管理來協調這些服務,可使用不一樣的語言來編寫服務,也可使用不一樣的數據存儲。

再來從技術維度角度理解下:

  • 微服務化的核心就是將傳統的一站式應用,根據業務拆分紅一個一個的服務,完全地去耦合,每個微服務提供單個業務功能的服務,一個服務作一件事情,從技術角度看就是一種小而獨立的處理過程,相似進程的概念,可以自行單獨啓動或銷燬,擁有本身獨立的數據庫。

微服務與微服務架構

微服務

強調的是服務的大小,它關注的是某一個點,是具體解決某一個問題/提供落地對應服務的一個服務應用,狹義的看,能夠看做是IDEA中的一個個微服務工程,或者Moudel。IDEA 工具裏面使用Maven開發的一個個獨立的小Moudel,它具體是使用SpringBoot開發的一個小模塊,專業的事情交給專業的模塊來作,一個模塊就作着一件事情。強調的是一個個的個體,每一個個體完成一個具體的任務或者功能。

微服務架構

一種新的架構形式,Martin Fowler 於2014年提出。

微服務架構是一種架構模式,它體長將單一應用程序劃分紅一組小的服務,服務之間相互協調,互相配合,爲用戶提供最終價值。每一個服務運行在其獨立的進程中,服務與服務之間採用輕量級的通訊機制(如HTTP)互相協做,每一個服務都圍繞着具體的業務進行構建,而且可以被獨立的部署到生產環境中,另外,應儘可能避免統一的,集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具(如Maven)對其進行構建。

微服務優缺點

優勢

  • 單一職責原則;
  • 每一個服務足夠內聚,足夠小,代碼容易理解,這樣能聚焦一個指定的業務功能或業務需求;
  • 開發簡單,開發效率高,一個服務可能就是專注的只幹一件事;
  • 微服務可以被小團隊單獨開發,這個團隊只需2-5個開發人員組成;
  • 微服務是鬆耦合的,是有功能意義的服務,不管是在開發階段或部署階段都是獨立的;
  • 微服務能使用不一樣的語言開發;
  • 易於和第三方集成,微服務容許容易且靈活的方式集成自動部署,經過持續集成工具,如jenkins,Hudson,bamboo;
  • 微服務易於被一個開發人員理解,修改和維護,這樣小團隊可以更關注本身的工做成果,無需經過合做才能體現價值;
  • 微服務容許利用和融合最新技術;
  • 微服務只是業務邏輯的代碼,不會和HTML,CSS,或其餘的界面混合;
  • 每一個微服務都有本身的存儲能力,能夠有本身的數據庫,也能夠有統一的數據庫;

缺點

  • 開發人員要處理分佈式系統的複雜性;
  • 多服務運維難度,隨着服務的增長,運維的壓力也在增大;
  • 系統部署依賴問題;
  • 服務間通訊成本問題;
  • 數據一致性問題;
  • 系統集成測試問題;
  • 性能和監控問題;

微服務技術棧有那些?

微服務技術條目 落地技術
服務開發 SpringBoot、Spring、SpringMVC等
服務配置與管理 Netfix公司的Archaius、阿里的Diamond等
服務註冊與發現 Eureka、Consul、Zookeeper等
服務調用 Rest、PRC、gRPC
服務熔斷器 Hystrix、Envoy等
負載均衡 Ribbon、Nginx等
服務接口調用(客戶端調用服務的簡化工具) Fegin等
消息隊列 Kafka、RabbitMQ、ActiveMQ等
服務配置中心管理 SpringCloudConfig、Chef等
服務路由(API網關) Zuul等
服務監控 Zabbix、Nagios、Metrics、Specatator等
全鏈路追蹤 Zipkin、Brave、Dapper等
數據流操做開發包 SpringCloud Stream(封裝與Redis,Rabbit,Kafka等發送接收消息)
時間消息總棧 SpringCloud Bus
服務部署 Docker、OpenStack、Kubernetes等

爲何選擇SpringCloud做爲微服務架構

  1. 選型依據

    • 總體解決方案和框架成熟度
    • 社區熱度
    • 可維護性
    • 學習曲線
  2. 當前各大IT公司用的微服務架構有那些?

    • 阿里:dubbo+HFS

    • 京東:JFS

    • 新浪:Motan

    • 噹噹網:DubboX

  3. 各微服務框架對比

    | 功能點/服務框架 | Netflix/SpringCloud | Motan | gRPC | Thri t | Dubbo/DubboX |
    | —————— | ———————————————————————————— | —————————————————- | ————————— | ———— | —————————— |
    | 功能定位 | 完整的微服務框架 | RPC框架,但整合了ZK或Consul,實現集羣環境的基本服務註冊發現 | RPC框架 | RPC框架 | 服務框架 |
    | 支持Rest | 是,Ribbon支持多種可拔插的序列號選擇 | 否 | 否 | 否 | 否 |
    | 支持RPC | 否 | 是(Hession2) | 是 | 是 | 是 |
    | 支持多語言 | 是(Rest形式) | 否 | 是 | 是 | 否 |
    | 負載均衡 | 是(服務端zuul+客戶端Ribbon),zuul-服務,動態路由,雲端負載均衡Eureka(針對中間層服務器) | 是(客戶端) | 否 | 否 | 是(客戶端) |
    | 配置服務 | Netfix Archaius,Spring Cloud Config Server 集中配置 | 是(Zookeeper提供) | 否 | 否 | 否 |
    | 服務調用鏈監控 | 是(zuul),zuul提供邊緣服務,API網關 | 否 | 否 | 否 | 否 |
    | 高可用/容錯 | 是(服務端Hystrix+客戶端Ribbon) | 是(客戶端) | 否 | 否 | 是(客戶端) |
    | 典型應用案例 | Netflix | Sina | Google | Facebook | |
    | 社區活躍程度 | 高 | 通常 | 高 | 通常 | 2017年後從新開始維護,以前中斷了5年 |
    | 學習難度 | 中等 | 低 | 高 | 高 | 低 |
    | 文檔豐富程度 | 高 | 通常 | 通常 | 通常 | 高 |
    | 其餘 | Spring Cloud Bus爲咱們的應用程序帶來了更多管理端點 | 支持降級 | Netflix內部在開發集成gRPC | IDL定義 | 實踐的公司比較多 |

SpringCloud入門概述

SpringCloud是什麼?

Spring官網:https://spring.io/image-20210811200151772

image-20210811200348631

SpringCloud和SpringBoot的關係

  • SpringBoot專一於開發方便的開發單個個體微服務;
  • SpringCloud是關注全局的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務,整合並管理起來,爲各個微服務之間提供:配置管理、服務發現、斷路器、路由、爲代理、事件總棧、全局鎖、決策競選、分佈式會話等等集成服務;
  • SpringBoot能夠離開SpringCloud獨立使用,開發項目,但SpringCloud離不開SpringBoot,屬於依賴關係;
  • SpringBoot專一於快速、方便的開發單個個體微服務,SpringCloud關注全局的服務治理框架;

Dubbo 和 SpringCloud技術選型

1. 分佈式+服務治理Dubbo

目前成熟的互聯網架構,應用服務化拆分 + 消息中間件

image-20210811201915889

2. Dubbo 和 SpringCloud對比

能夠看一下社區活躍度:

https://github.com/dubbo

https://github.com/spring-cloud

對比結果:

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

最大區別:Spring Cloud 拋棄了Dubbo的RPC通訊,採用的是基於HTTP的REST方式

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

品牌機和組裝機的區別

社區支持與更新力度的區別

總結:兩者解決的問題域不同:Dubbo的定位是一款RPC框架,而SpringCloud的目標是微服務架構下的一站式解決方案。

SpringCloud能幹嗎?

  • Distributed/versioned configuration 分佈式/版本控制配置
  • Service registration and discovery 服務註冊與發現
  • Routing 路由
  • Service-to-service calls 服務到服務的調用
  • Load balancing 負載均衡配置
  • Circuit Breakers 斷路器
  • Distributed messaging 分佈式消息管理

SpringCloud下載

官網:http://projects.spring.io/spring-cloud/

版本號有點特別:

image-20210811211903262

SpringCloud有些並無採用數字編號的方式命名版本號,而是採用了倫敦地鐵站的名稱,同時根據字母表的順序來對應版本時間順序,好比最先的Realse版本:Angel,第二個Realse版本:Brixton,而後是Camden、Dalston、Edgware,目前最新的是2020.0.3 CURRENT GA通用穩定版。

自學參考書:

Spring Cloud 五大組件

  • 服務註冊與發現——Netflix Eureka
  • 負載均衡:
    • 客戶端負載均衡——Netflix Ribbon
    • 服務端負載均衡:——Feign(其也是依賴於Ribbon,只是將調用方式RestTemplete 更改爲Service 接口)
  • 斷路器——Netflix Hystrix
  • 服務網關——Netflix Zuul
  • 分佈式配置——Spring Cloud Config
相關文章
相關標籤/搜索