1. 程式人生 > >微服務學習與思考(04):微服務技術體系

微服務學習與思考(04):微服務技術體系

前面微服務3篇文章: - [微服務學習與思考(01):什麼是微服務?微服務的優勢和劣勢](https://www.cnblogs.com/jiujuan/p/13280473.html) - [微服務學習與思考(02):微服務實施前有哪些問題需要思考?](https://www.cnblogs.com/jiujuan/p/13284412.html) - [微服務學習與思考(03):微服務總體架構圖解](https://www.cnblogs.com/jiujuan/p/13295147.html) ## 一、微服務技術體系 下圖列出了微服務的技術體系: ![](https://img2020.cnblogs.com/blog/650581/202007/650581-20200714192039539-1038488973.png) ## 二、Golang微服務技術棧 ### 微服務框架 - [go-micro](https://github.com/micro/go-micro) - [go-kit](https://github.com/go-kit/kit) 國內的bilibili和鬥魚也出了一個微服務框架: - [kratos](https://github.com/go-kratos/kratos) bilibili出品 - [jupiter](https://github.com/douyu/jupiter) 鬥魚出品 ### 閘道器 - [kong](https://github.com/Kong/kong) - [nginx](https://github.com/nginx/nginx)+lua - [traefik](https://docs.traefik.io) - [apisix](https://github.com/apache/incubator-apisix) ### 服務註冊和發現 - [consul](https://github.com/hashicorp/consul) - [etcd](https://github.com/etcd-io/etcd) - [zookeeper](https://zookeeper.apache.org) ### 配置中心 - [Apollo](https://github.com/ctripcorp/apollo), - [Nacos](https://github.com/alibaba/Nacos) ... ... ### 服務治理 斷路器: - [hystrix-go](https://github.com/afex/hystrix-go) 流量控制: - [sentinel-golang](https://github.com/alibaba/sentinel-golang) 從限流、流量整形、熔斷降級、系統負載保護等多個維度來幫助您保障微服務的穩定性。 ### 鏈路監控 zipkin,pinpoint,skywalking,jaeger ### 日誌、業務、系統監控 [prometheus](https://prometheus.io/) [ELK](https://www.elastic.co/) ### CI/CD - [jenkins](https://www.jenkins.io) - [drone](https://drone.io/) ...... > golang技術學習和微服務學習,[這裡有個學習路線圖](https://github.com/jiujuan/go-collection),可以去學習 ## 三、java微服務技術棧 用java技術開發微服務,比較主流的選擇有:Spring Cloud 和 Dubbo。 ### Spring Cloud [Spring Cloud](https://github.com/spring-cloud)是在Spring基礎上構建的,它後面有2大公司支撐,Pivotal和Netfix的技術支援。它的核心就是Netflix貢獻的原始碼,也是這家公司構建了整套微服務體系,才使得微服務架構逐漸流行開來,所以說Netflix在微服務上的貢獻是巨大的。 #### Pivotal的SpingCloud框架 [Spring Cloud](https://github.com/spring-cloud) ,這個是Pivotal集成了Netfix,或者重新改寫了它的框架。 Spring是一個全家桶,Spring Cloud也是一個全家桶,它由很多技術框架組合而成: - 服務治理 - 服務註冊和發現:Netflix Eureka 當然我們也有其他的選擇,比如consul,etcd,zookeeper等 - 斷路器:Hystrix - 呼叫端負載均衡:Ribbon - REST客戶端:Feign - 閘道器 API 閘道器:Zuul 當然我們也可以選擇其他的,比如Spring Cloud Gateway,kong,nginx+lua,apisix等 - 分散式鏈路監控 - Spring Cloud Sleuth:埋點和傳送資料 當然還有其他的比如zipkin,pinpoint,skywalking,jaeger等 - 訊息元件 - Spring Cloud Stream - Spirng Cloud Bus 訊息中介軟體的其他軟體:RocketMQ,Kafka,RabbitMQ - 配置中心 - Spring Cloud Config 配置中心可以有其他的替代,比如Apollo,Nacos等 - 安全控制 - Spring Cloud Security [https://spring.io/projects/spring-cloud](https://spring.io/projects/spring-cloud) 這個地址列出了springcloud各種框架,就是它的文件地址。 #### 阿里巴巴的SpringCloud 阿里巴巴在SpringCloud之上,開發了自己的微服務框架[spring-cloud-alibaba](https://github.com/alibaba/spring-cloud-alibaba) 。 - [spring-cloud-alibaba wiki](https://github.com/alibaba/spring-cloud-alibaba/wiki) ##### 主要功能 - **服務限流降級**:預設支援 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級功能的接入,可以在執行時通過控制檯實時修改限流降級規則,還支援檢視限流降級 Metrics 監控。 - **服務註冊與發現**:適配 Spring Cloud 服務註冊與發現標準,預設集成了 Ribbon 的支援。 - **分散式配置管理**:支援分散式系統中的外部化配置,配置更改時自動重新整理。訊息驅動能力:基於 Spring Cloud Stream 為微服務應用構建訊息驅動能力。 - **分散式事務**:使用 @GlobalTransactional 註解, 高效並且對業務零侵入地解決分散式事務問題。 - **阿里雲物件儲存**:阿里雲提供的海量、安全、低成本、高可靠的雲端儲存服務。支援在任何應用、任何時間、任何地點儲存和訪問任意型別的資料。 - **分散式任務排程**:提供秒級、精準、高可靠、高可用的定時(基於 Cron 表示式)任務排程服務。同時提供分散式的任務執行模型,如網格任務。網格任務支援海量子任務均勻分配到所有 Worker(schedulerx-client)上執行。 - **阿里雲簡訊服務**:覆蓋全球的簡訊服務,友好、高效、智慧的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。 > 看上面介紹,集成了阿里雲的一些服務。 ##### 元件 [Sentinel](https://github.com/alibaba/Sentinel):把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。 [Nacos](https://github.com/alibaba/Nacos):一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。 [RocketMQ](https://rocketmq.apache.org/):一款開源的分散式訊息系統,基於高可用分散式叢集技術,提供低延時的、高可靠的訊息釋出與訂閱服務。 [Dubbo](https://github.com/apache/dubbo):Apache Dubbo™ 是一款高效能 Java RPC 框架。 [Seata](https://github.com/seata/seata):阿里巴巴開源產品,一個易於使用的高效能微服務分散式事務解決方案。 [Alibaba Cloud ACM](https://www.aliyun.com/product/acm):一款在分散式架構環境中對應用配置進行集中管理和推送的應用配置中心產品。 Alibaba Cloud OSS: 阿里雲物件儲存服務(Object Storage Service,簡稱 OSS),是阿里雲提供的海量、安全、低成本、高可靠的雲端儲存服務。您可以在任何應用、任何時間、任何地點儲存和訪問任意型別的資料。 Alibaba Cloud SchedulerX: 阿里中介軟體團隊開發的一款分散式任務排程產品,提供秒級、精準、高可靠、高可用的定時(基於 Cron 表示式)任務排程服務。 Alibaba Cloud SMS: 覆蓋全球的簡訊服務,友好、高效、智慧的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。 > 也是集成了一些阿里雲的服務 ### Dubbo 從上面spring-cloud-alibabba元件組成來看,Dubbo是它的一個子框架。 Dubbo的治理能力相當豐富,文件也很完善。[中文文件](http://dubbo.apache.org/zh-cn/docs/user/quick-start.html) [英文文件](http://dubbo.apache.org/en-us/docs/user/quick-start.html),這是它的一個優勢。 Dubbo具有排程、發現、監控、治理、服務發現等功能。 優點: - Dubbo 支援 RPC 呼叫,服務之間的呼叫效能會很好 - 支援多種序列化協議,如 Hessian、HTTP、WebService。 - Dobbo Admin後臺管理功能強大,提供了路由規則、動態配置、訪問控制、權重調節、均衡負載等功能。 - 在國內影響力比較大,中文社群文件較為全面。 缺點: - 它只是微服務的一個子集,一個子框架。服務治理 - 國內公司用的多,阿里以前不維護,現在重啟維護 阿里以前沒有進行維護,現在重啟維護,而且還捐獻給了apache基金會。 ### Dubbo和Spring Cloud對比 ![](https://img2020.cnblogs.com/blog/650581/202007/650581-20200714192202818-1795575891.png) Dubbo是專注於RPC和服務治理,Spring Cloud是一個微服務的全家桶,也可以說是微服務生態,功能齊全,社群維護也積極。 SpringCloud國內外公司應用多,dubbo主要是國內公司用的多。 ### java微服務框架總結 就微服務體系來說,Dubbo只是整個微服務的一部分。Spring Cloud是一整套微服務體系,它是一個完整的解決方案。Spring Cloud社群強大,也很活躍。 ## 參考 - https://spring.io/projects/spring-cloud - https://github.com/spring-cloud - https://github.com/spring-projects/spring-cloud - https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md - https://blog.csdn.net/karamos/article/details/80127976 網易考拉海購Dubbok框架優化詳解 - https://www.zhihu.com/question/45413135 spring cloud 和 dubbo 各自的優缺點是什麼? - https://www.cnblogs.com/xishuai/p/dubbo-and-spring-cloud.html Java微服務框架選型(Dubbo 和 Spring Clo