1.微服務概述
1.1.什么是微服務
微服務(Microservices):就目前而言,對于微服務業界并沒有一個統一的、標準的定義,(While there is no precise definition of this architectural style)
但通常來說,微服務就是將傳統的一站式應用,根據業務拆分成一個一個的服務,徹底地去耦合,每一個微服務提供單個業務功能的服務,一個服務做一件事,
1.2.微服務架構
- 微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,
- 每個服務運行在其獨立的行程中,服務與服務間采用輕量級的通信機制互相協作(通常是基于HTTP協議的RESTful API),
- 每個服務都圍繞著具體業務進行構建,并且能夠被獨立的部署到生產環境、類生產環境中,
- 并且盡量避免統一的、集中式的服務管理機制,
1.3.微服務的優缺點
優點:
- 每個服務足夠內聚,足夠小,代碼容易理解能聚焦到一個指定的業務功能或業務需求
- 開發簡單、效率高,一個服務可能就是專一地只干一件事
- 微服務能夠被小團隊單獨開發,這個小團隊僅需2到5個人的開發人員組成(根據實際專案情況)
- 微服務是松耦合的,是有功能意義的服務,無論是在開發階段或部署階段都是獨立的
- 微服務能使用不同的語言進行開發
- 易于和第三方集成,微服務允許容易且靈活的方式集成自動部署,通過持續集成工具,如Jenkins、Hudson、bamboo
- 微服務易于被一個開發人員理解,修改和維護,這樣小團隊能夠更關注自己的作業成果,無需通過合作才能體現價值
- 微服務允許你利用融合的最新技術
- 微服務可以只是業務邏輯的代碼,不會與HTML,CSS或其它界面組件混合
- 每個微服務都有自己的存盤能力,可以有自己的資料庫,也可以有統一的資料庫
缺點:
- 開發人員要處理分布式系統的復雜性
- 多服務運維難度,隨著服務的增加,運維壓力也在增大
- 系統部署依賴
- 服務間通信成本增加
- 資料一致性問題
- 系統集成測驗成本增加
- 性能監控難度
1.4.微服務的技術堆疊
| 微服務條目 | 落地技術 |
|---|---|
| 服務開發 | SpringBoot,Spring,SpringMVC |
| 服務配置與管理 | Netflix公司的Archaius、阿里的Diamond等 |
| 服務注冊與發現 | Eureka、Consul、Zookeeper等 |
| 服務呼叫 | Rest、RPC、gRPC |
| 服務熔斷器 | Hystrix、Envoy等 |
| 負載均衡 | Ribbon、Nginx等 |
| 服務介面呼叫(客戶端呼叫服務的簡化工具) | Feign等 |
| 訊息佇列 | Kafka、RabbitMQ、ActiveMQ等 |
| 服務配置中心管理 | SpringCloudConfig、Chef等 |
| 服務路由(API網關) | Zuul等 |
| 服務監控 | Zabbix、Nagios、Metrics、Specatator等 |
| 全鏈路追蹤 | Zipkin、Brave、Dapper等 |
| 服務部署 | Docker、OpenStack、Kubernetes等 |
| 資料流操作開發包 | SpringCloud Stream(封裝與Redis,Rabbit,Kafka等發送接收訊息) |
| 事件訊息總線 | SpringCloud Bus |
2.SpringCloud概述
2.1.SpringCloud是什么
SpringCloud,基于SpringBoot提供了一套微服務解決方案,包括服務注冊與發現,配置中心,全鏈路監控,服務網關,負載均衡,熔斷器等組件,除了基于NetFlix的開源組件做高度抽象封裝之外,還有一些選型中立的開源組件,
SpringCloud利用SpringBoot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,SpringCloud為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線,全域所、決策精選、分布式會話等等,他們都可以用SpringBoot的開發風格做到一鍵啟動和部署,
SpringCloud并沒有重復造輪子,它只是將各個公司成熟的框架組合起來,通過SpringBoot風格進行再封裝、屏蔽掉復雜的配置和實作原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包,
======一句話總結:SpringCloud是分布式微服務下的一站式解決方案,是各個微服務架構落地的集合體,俗稱微服務全家桶=======
2.2.SpringCloud與SpringBoot的關系
- SpringBoot專注于快速方便的開發單個個體微服務,
- SpringCloud是關注全域的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合并管理起來,為各個微服務之間提供配置管理、服務發現、斷路器、路由、微代理、事件總線、全域鎖、決策競選、分布式會話等等集成服務
- SpringBoot可以離開SpringCloud獨立使用開發專案,但是SpringCloud離不開SpringBoot,屬于依賴關系
- SpringBoot專注于快速、方便的開發單個微服務個體,SpringCloud關注全域的服務治理框架
2.3.SpringCloud和Dubbo對比
| Dubbo | Spring | |
|---|---|---|
| 服務注冊中心 | Zookeeper | Spring Cloud Netfilx Eureka |
| 服務呼叫方式 | RPC | REST API |
| 服務監控 | Dubbo-monitor | Spring Boot Admin |
| 斷路器 | 不完善 | Spring Cloud Netflix Hystrix |
| 服務網關 | 無 | Spring Cloud Netflix Zuul |
| 分布式配置 | 無 | Spring Cloud Config |
| 服務跟蹤 | 無 | Spring Cloud Sleuth |
| 訊息總線 | 無 | Spring Cloud Bus |
| 資料流 | 無 | Spring Cloud Stream |
| 批量任務 | 無 | Spring Cloud Task |
最大區別
(1)SpringCloud拋棄了Dubbo的RPC通訊,采用基于HTTP的REST方式,SpringCloud犧牲了服務呼叫的性能,但是同時也避免了原生RPC帶來的問題,REST比RPC更為靈活,不存在代碼級別的強依賴,意在強調微服務的快速演化
的微服務環境下,顯然更合適,
(2)Dubbo像組裝機,對技術選型人員要求高;SpringCloud像品牌機,保證了可靠性、穩定性
(3)社區的支持與力度:Dubbo曾經停運了5年,雖然重啟了,但是對于技術發展的新需求,還是需要開發者自行去拓展,對于中小型公司,顯然顯得比較費時費力,也不一定有強大的實力去修改原始碼
總結
解決的問題領域不一樣:Dubbo的定位是一款RPC框架,Spring Cloud的目標是微服務架構下的一站式解決方案
博文寫作參考:
https://www.bilibili.com/video/BV1ZW411G7Tf?p=15&spm_id_from=pageDriver
https://www.cnblogs.com/qdhxhz/p/9357357.html
SpringCloud相關學習網站推薦:
https://springcloud.cc/spring-cloud-netflix.html
中文API檔案:https://springcloud.cc/spring-cloud-dalston.html
SpringCloud中國社區:http://springcloud.cn/
SpringCloud中文網:https://springcloud.cc
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/271824.html
標籤:Java
上一篇:一文簡述Java IO
下一篇:java方法詳解
