微服務框架
微服務(Microservices)是一種架構風格,一個大型復雜軟件應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關注於完成一件任務並很好地完成該任務。在所有情況下,每個任務代表着一個小的業務能力。
以往我們開發應用程序都是單體型,雖然開發和部署比較方便,但后期隨着業務的不斷增加,開發迭代和性能瓶頸等問題,將會困擾開發團隊,微服務就是解決此問題的有效手段。
那么我們在具體實踐落地微服務時,我們又需要做什么?一個微服務框架到底又有什么呢?特別是對於.NET生態圈的小伙伴們,一直都有很多困惑,不知該如何下手。
既然我們不知道,又要高清楚,那最好的辦法是什么呢?我認為最有效的方式是研究成熟的產品。市面上成熟的微服務框架有一些, 而SpringCloud就是可供研究的對象,下面我們一起來看看SpringCloud是什么?
SpringCloud
SpringCloud技術棧
從上面的技術棧圖中可以看出:
- 微服務框架核心是服務治理
- 服務治理的核心組件包括網關、服務注冊與發現、服務調用
SpringCloud核心組件
組件 | 選型 | 備注 |
---|---|---|
網關 | Zuul | |
服務注冊與發現 | Eureka Consul zookeeper |
|
服務調用 | Feign | 根據注解和選擇機器,拼接Url地址,發起請求 簡化服務調用 |
負載均衡 | Ribbon | 服務調用負載均衡,配合Feign和Euraka使用 |
斷路器 | Hystrix | 隔離、熔斷以及降級的一個框架 服務線程池隔離,實現不同服務的調度隔離,避免服務雪崩 |
核心組件工作原理
Eureka:服務啟動時,Eureka會將服務注冊到EurekaService,並且EurakeClient還可以返回過來從EurekaService拉去注冊表,從而知道服務在哪里
Ribbon:服務間發起請求的時候,基於Ribbon服務做到負載均衡,從一個服務的對台機器中選擇一台
Feign:基於fegin的動態代理機制,根據注解和選擇機器,拼接Url地址,發起請求
Hystrix:發起的請求是通過Hystrix的線程池來走,不同的服走不同的線程池,實現了不同的服務調度隔離,避免服務雪崩的問題
Zuul:如果前端后端移動端調用后台系統,統一走zull網關進入,有zull網關轉發請求給對應的服務
說明:如果.Net Core平台下想要使用SpringCloud,可通過steeltoe來實現,具體可參考 https://steeltoe.io/
微服務架構組件
一個較完整的微服務架構包含的如下的組件
組件 | 選型 |
---|---|
網關 | Zuul Ocelot Kong Tyk Orange Spring Cloud Gateway apiaxle api-umbrella |
服務注冊與發現 | Eureka Consul zookeeper |
服務調用 | Feign restTemplate |
負載均衡 | Ribbon |
斷路器 | Hystrix |
配置管理 | Spring Cloud Config apollo |
鏈路追蹤 | Spring Cloud Sleuth Zipkin HTrace SkyWalking |
安全 | Spring Cloud Security Auth2 IdentityServer4 |
監控 | spectator atlas |
消息、事件總線 | Spring Cloud Bus (Redis、RabbitMQ、Kafaka) |
最后
上面已經介紹了一個微服務框架所包含的架構組件,那么.NET下如何落地呢?接下來我們從網關開始來一步一步實踐。 .NET下的網關,我們推薦使用Ocelot,來開始我們的Ocelot之旅. .Net微服務實踐(二):Ocelot介紹和快速開始