微服務架構 - 技術選型


微服務架構技術選型

 

綜述

微服務架構是當前主流的分布式應用系統架構體系,而 Spring Cloud 當屬其中翹楚。

SpringCloud 是一套微服務架構的規范,抽象了一套通用的開發模式,它的目的是通過抽象出這套通用的模式,讓開發者更快更好地開發業務。

Spring Cloud Netflix 是由 Netflix 公司提供的一套相對完整成熟的 Spring Cloud 微服務實現方案,包括 Ribbon、Feign、Eureka、Hystrix 等一整套組件。

Spring Cloud Alibaba 是由 Alibaba 公司 提供的新晉的 Spring Cloud 微服務實現方案,包括 Nacos、Sentinel、Dubbo、Seata 等開源套件

微服務核心:服務注冊與發現、配置中心、客戶端代理、負載均衡、熔斷降級限流、網關、鏈路追蹤。

 

一、Spring Cloud

1、簡介

Spring Cloud 是一個基於 SpringBoot 實現的微服務架構開發工具。

它為微服務架構中涉及的配置管理、服務治理、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態管理等操作

提供了一種簡單的開發方式。

2、發展歷程

2014年10月7日 privotal 發布了第一個Spring Cloud的版本:1.0.0.M1。

2016 年 1 月發布第一個 Angel.SR5 版本,

2017 年初,Spring Cloud迭代到E版本,對應SpringBoot 4.x,達到最穩定的狀態,各個環節的變化變慢,趨於穩定。

到 2020 年 3 月發布 Hoxton.SR3 版本。

Spring Cloud 在 2019 年 12 月對外宣布后續 RoadMap:

下一個版本 Ilford 版本是一個大版本。這個版本基於 Spring Framework 5.3 & Spring Boot 2.4,會在 2020 Q4 左右發布;

3、組件

  • Spring Cloud Netflix:核心組件,對多個Netflix OSS 開源套件進行整合。
  • Spring Cloud Alibaba:Alibaba提供的微服務開發的一站式解決方案。
  • Spring Cloud Config:配置管理工具。支持使用GIT、SVN、文件存儲配置內容,可以使用它實現應用配置的外部化存儲,並支持客戶端配置信息刷新、加密/解密配置內容等。
  • Spring Cloud Bus:事件、消息總線,用於傳播集群中的狀態變化或事件,以觸發后續的處理,比如用來動態刷新配置。
  • Spring Cloud Cluster:針對ZooKeeper、Redis、Hazelcast、Consul的選舉算法和通用狀態模式的實現。
  • Spring Cloud Cloudfoundry:與PivotalCloudfoundry的整合支持。
  • Spring Cloud Consul:服務發現與配置管理工具。
  • Spring Cloud Stream:通過Redis、Rabbit、或者Kafka實現的消費微服務,可以通過簡單的聲明式模型來發送和接受消息。
  • Spring Cloud AWS:用於簡化整合AmazonWebService的組件。
  • Spring Cloud Security:安全工具包,提供在Zuul代理中對OAuth2 客戶端請求的中繼器。
  • Spring Cloud Sleuth:Spring Cloud應用的分布式跟蹤實現,可以完美整合Zipkin。
  • Spring Cloud ZooKeeper:基於Zookeeper的服務發現與配置管理組件。
  • Spring Cloud Starters:Spring Cloud 的基礎組件,它是基於SpringBoot風格項目的基礎依賴模塊。
  • Spring Cloud CLI: 用於在Groovy中快速創建SpringCloud應用的SpringBoot CLI 插件。

 

二、Spring Cloud Netflix

1、簡介

Spring Cloud Netflix 是 Netflix推出的一套基於 Spring Cloud 微服務規范的微服務架構套件的具體實現。是目前比較成熟的 Spring Cloud 微服務實現方案。

2、發展歷程

 

3、發展趨勢

Eureka:

1.x  開源項目維護中;

最新Release版本:v1.9.25

最新發布時間:2020.7.1

2.x 開源項目停止;

Hystrix:

維護模式:

最新Release版本:Re-release stable 1.5.11 as 1.5.18

最新發布時間:2018.11.17

Netflix 官方推薦替換方案:Resilience4j

 

Ribbon

最新Release版本:v2.7.17

最新發布時間:2019.5.30

 

Feign

停止維護

代替方案:OpenFeign

最新Release版本:OpenFeign 10.10.1

最新發布時間:2020.4.27

 

Zuul

最新Release版本:v2.1.5 - Minor fixes

最新發布時間:2019.7.16

 

4、主要功能

主要提供的功能包括:服務發現、斷路器和監控、智能路由、客戶端負載均衡等。

5、主要組件

  • Eureka:服務治理組件,包含服務注冊中心,服務注冊與發現機制的實現。
  • Ribbon:客戶端負載均衡的服務調用組件。
  • Feign:基於Ribbon和Hystrix的聲明式服務調用組件。
  • Zuul:網關組件,提供智能路由、訪問過濾等功能。
  • Hystrix:容錯管理組件,實現斷路器模式,幫助服務依賴中出現的延遲和為故障提供強大的容錯能力。
  • Hystrix Dashboard:監控面板,他提供了一個界面,可以監控各個服務上的服務調用所消耗的時間等。
  • Turbine:監控聚合,使用Hystrix監控,我們需要打開每一個服務實例的監控信息來查看。而Turbine可以幫助我們把所有的服務實例的監控信息聚合到一個地方統一查看。這樣就不需要挨個打開一個個的頁面一個個查看。
  • Archaius:外部化配置組件。

 

三、Spring Cloud Alibaba

1、簡介

Spring Cloud Alibaba 致力於提供微服務開發的一站式解決方案。

此項目包含開發分布式應用微服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕松使用這些組件來開發分布式應用服務。

依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,

通過阿里中間件來迅速搭建分布式應用系統。

2、發展歷程

  • 2018年7月27日 在 Spring Cloud 孵化器倉庫提交第一次代碼;
  • 2018年10月31日,Spring Cloud Alibaba正式入駐Spring Cloud官方孵化器並發布了第一個預覽版本
  • 2019年8月1日 在 Alibaba 倉庫發布第一個畢業版本。

3、發展趨勢

社區活躍,持續更新中。

spring-cloud-alibaba

最新Release版本:v.2.0.2.RELEASE

最新發布時間:2020.4.15

Sentinel

最新Release版本:v1.7.2
最新發布時間:2020.4.8

Nacos

最新Release版本:1.3.1(July 10, 2020)
最新發布時間:2020.7.9

4、主要功能

  • 服務限流降級:默認支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級功能的接入,可以在運行時通過控制台實時修改限流降級規則,還支持查看限流降級 Metrics 監控。
  • 服務注冊與發現:適配 Spring Cloud 服務注冊與發現標准,默認集成了 Ribbon 的支持。
  • 分布式配置管理:支持分布式系統中的外部化配置,配置更改時自動刷新。
  • 消息驅動能力:基於 Spring Cloud Stream 為微服務應用構建消息驅動能力。
  • 分布式事務:使用 @GlobalTransactional 注解, 高效並且對業務零侵入地解決分布式事務問題。。
  • 阿里雲對象存儲:阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
  • 分布式任務調度:提供秒級、精准、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。同時提供分布式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到所有 Worker(schedulerx-client)上執行。
  • 阿里雲短信服務:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。

 

5、主要組件

  • [開源]Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
  • [開源]Nacos:一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平台。
  • [開源]RocketMQ:一款開源的分布式消息系統,基於高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。
  • [開源]Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
  • [開源]Seata:阿里巴巴開源產品,一個易於使用的高性能微服務分布式事務解決方案。
  • [商用]Alibaba Cloud ACM:一款在分布式架構環境中對應用配置進行集中管理和推送的應用配置中心產品。
  • [商用]Alibaba Cloud OSS: 阿里雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
  • [商用]Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分布式任務調度產品,提供秒級、精准、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。
  • [商用]Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。

 

四、微服務每個組成部分的多種實現方式對比

服務注冊與發現:Eureka、Nacos、Consul、Zookeeper、Etcd 等等

 

配置中心:Spring Cloud Config、Nacos 對比

 

spring cloud config:

性能夠用

config: 單獨服務,是從git倉庫拉取配置信息,然后服務端從config服務里面拉取配置信息緩存到本地倉庫,

這里配置的變更比較麻煩,他需要結合bus組件,同時約束了只能用rabbitmq和kafka來進行通知服務端進行配置變更。

但是保證了數據的一致性,因為他的配置信息在git倉庫上,git倉庫只有一個,就會數據一致

 

nacos :

性能最好

他同時支持AP和CP模式,他根據服務注冊選擇臨時和永久來決定走AP模式還是CP模式,

他這里支持CP模式對於我的理解來說,應該是為了配置中心集群,因為nacos可以同時作為注冊中心和配置中心,

因為他的配置中心信息是保存在nacos里面的,假如因為nacos其中一台掛掉后,還沒有同步配置信息,就可能發生配置不一致的情況.,

配置中心的配置變更是服務端有監聽器,配置中心發生配置變化,然后服務端會監聽到配置發生變化,從而做出改變

 

熔斷、降級:Hystrix、Sentinel 對比

比較項 Sentinel Hystrix 說明
隔離策略 信號量隔離(並發線程數限流)(模擬信號量) 線程池隔離/信號量隔離

Sentinel不創建線程依賴tomcat或jetty容器的線程池,

存在的問題就是運行容器的線程數量限制了sentinel設置值的上限可能設置不准。

比如tomcat線程池為10,sentinel設置100是沒有意義的,同時隔離性不好 hystrix使用自己創建的線程池,隔離性會更好

熔斷降級策略 基於響應時間、異常比率、異常數 基於異常比率 快速失敗的本質功能
實時統計實現 滑動窗口(LeapArray) 滑動窗口(基於 RxJava)  
動態規則配置 支持多種數據源 支持多種數據源  
擴展性 多個擴展點 插件的形式  
注解 支持 支持  
限流 基於 QPS,支持基於調用關系的限流 有限的支持(並發線程數或信號量大小) 快速失敗的本質功能
流量整形 支持預熱模式、勻速器模式、預熱排隊模式 不支持(排隊)  
系統自適應保護 支持(僅對linux/unix生效) 不支持 設置一個服務器最大允許處理量的閾值
控制台 提供開箱即用的控制台,可配置規則、查看秒級監控、機器發現等 簡單的監控查看接近實時數據 控制台是非常有競爭力的功能,因為能集中配置限制數據更方便,但是展示數據和實時性沒有hystrix直觀。
配置持久化 ZooKeeper, Apollo, Nacos、本地文件 Git/svn/本地文件 Sentinel客戶端采用直接鏈接持久化存儲,應用客戶端引用了更多的依賴,同樣的存儲鏈接可能有多個配置
動態配置 支持 支持  
黑白名單 支持 不支持  
springcloud集成 非常高 Spring boot使用hystrix集成度更高
整體優勢 集中配置設置及監控+更細的控制規則 漂亮的界面+接近實時的統計結果 docker容器化部署之后sentinel可能更會發揮作用

網關:Zuul、Spring Cloud Gateway

Spring Cloud Gateway基於Spring 5、Project Reactor、Spring Boot 2,使用非阻塞式的API,內置限流過濾器,支持長連接(比如 websockets),

在高並發和后端服務響應慢的場景下比Zuul1的表現要好。

Zuul基於Servlet2.x構建,使用阻塞的API,沒有內置限流過濾器,不支持長連接。

Spring Cloud Gateway,使用起來比 Zuul 更簡單,配置更方便

兩者都能與Sentinel(是阿里開源的一款高性能的限流框架)集成。

 

 

五、整體方案的優勢對比

1、Spring Cloud Netflix

成熟度:推出較早,相對成熟

更新持續性:更新緩慢,部分停更

社區活躍度:社區活躍

發展趨勢:趨緩

文檔便捷性:英文為主

難易程度:一般

性能:基於http協議,性能一般

配套:無配置中心,使用 Spring Cloud Config;

商業優勢:

2、Spring Cloud Alibaba

成熟度:2019年8月1日 在 Alibaba 倉庫發布第一個畢業版本,相對較新。

更新持續性:持續更新中

社區活躍度:社區活躍

發展趨勢:發展迅猛

文檔便捷性:官方中文文檔

難易程度:一般

性能:底層基於dubbo rpc 通信,性能較高

配套:無配套網關,使用 Spring Cloud Gateway;配套分布式服務框架setea;

商業優勢:可更好的支持 阿里雲 相關商業產品,容易繼承。

 

總結:

1、個人意見

   推薦:Spring Cloud Alibaba

   理由

  具有 Alibaba 大廠背景;

  經過世界上最大最復雜的電商交易場景——雙11 的有效驗證;

  對阿里雲商用服務提供友好的支持;

  整體易用性,性能,及后續發展趨勢更勝一籌。

 

 

六、其他基礎設施

容器管理:k8s,swarm

對比項 k8s swarm
出品公司 google docker官方
生態 社區活躍,支持着眾多、行業事實標准 遜色於k8s
完善程度及功能 功能完善、復雜 功能略少、簡單
學習成本
服務器成本

 

數據庫:mysql

緩存:redis

消息隊列:kafka、RocketMQ

  個人建議:kafka

  原因:

  1、kafka幾乎是消息隊列的行業標准

  2、集成日志體系elk,也需要用到kafka

日志:elk

反向代理:nignx

監控:Prometheus、Grafana

 

 

 

參考資料:

精選文章

Spring Cloud Alibaba,中國 Javaer 的福音,為微服務續上 18年

Spring Cloud Alibaba 新一代微服務解決方案

太深啦!帶你“深入”Spring Cloud ALibaba微服務一探究竟

 

########################################################

SpringCloud Alibaba 簡介

Spring Cloud Alibaba 新一代微服務解決方案

Spring Cloud Alibaba 架構實戰

Spring Cloud Alibaba | Dubbo 與 Spring Cloud 完美結合

springboot,dubbo,nacos,spring-cloud-alibaba的整合

用SpringCloud Alibaba搭建屬於自己的微服務系列文章

說說我為什么看好Spring Cloud Alibaba

Spring Cloud Alibaba(三)Sentinel之熔斷降級

Spring Cloud Netflix 替代方案

 

阿里P8架構師談:微服務Dubbo和SpringCloud架構設計、優劣勢比較

最新版 Dubbo 和 Spring Cloud 生態對比

Dubbo和Spring Cloud微服務架構對比

 

springcloud in kubernetes 目錄

在Kubernetes上部署SpringCloud

spring-cloud-kubernetes官方demo運行實戰

Spring Cloud 簡介

Nepxion Discovery

一款集成Spring Cloud Alibaba、Nacos、Sentinel等阿里巴巴中間件,實現網關和服務的灰度發布、路由、權重、限流、熔斷、降級、隔離、監控、追蹤等功能的微服務開源解決。使用指南 請參考 Nepxion Discovery Guide

 

Spring cloud簡介及Netflix組件介紹?

Eureka 2.0 閉源--選擇Consul???

Eureka原理理解和Eureka集群搭建

微服務:注冊中心ZooKeeper、Eureka、Consul 、Nacos對比

服務發現:Zookeeper vs etcd vs Consul

 

sentinel與hystrix對比

Spring Cloud Config、Apollo、Nacos配置中心選型及對比

Zuul1與Spring Cloud Gateway對比

zuul和Spring Cloud Gateway的比較

Spring Cloud Gateway VS Zuul 比較,怎么選擇?

 

 

SpringCloudAlibaba筆記(六):Sleuth--鏈路追蹤

1-12、Spring Cloud Alibaba 鏈路追蹤

 

SpringCloud(第 046 篇)注解式Schedule配置定時任務,不支持任務調度

springBoot自帶定時任務schedule用法詳解

SpringCloud(第 010 篇)簡單 Quartz-Cluster 支持集群分布式且支持動態修改時間

Springcloud項目集成Quartz定時任務框架,實現批處理功能

 

Spring Cloud Task 簡單示例

 

RocketMQ的歷史發展

消息隊列Kafka、RocketMQ、RabbitMQ的優劣勢、技術應用及選擇

RocketMQ與kafka對比(18項差異)

要做技術選型,數據處理選kafka還是RocketMQ?我徹底蒙了

 

容器雲技術選擇之kubernetes和swarm對比

K8s 擊敗 Docker Swarm 了嗎 ? 

 

git

Eureka


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM