微服務架構概述
微服務是一種架構模式或一種架構風格,提倡將單一應用程序劃分成一組小的服務,每個服務運行在其獨立的自己的進程中,服務之間互相協調、互相配合,爲用戶提供最終價值。服務之間採用輕量級的通信機制互相溝通(通常是基於HTTP的RESTful API)。每個服務都圍繞着具體業務進行構建,並且能夠被獨立地部署到生成環境、類生產環境等。另外,應儘量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建,可以有一個非常輕量級的集中式管理來協調這些服務,可以使用不同的語言來編寫服務,也可以使用不同的數據存儲
微服務
強調的是服務的大小,它關注的是某一個點,是具體解決某一個問題/提供落地對應服務的一個服務應用,狹義的看,可以看作Eclipse裏面的一個個微服務工程/或者Module,可以理解成它具體是使用Springboot開發的一個小模塊
微服務優點
- 每個服務足夠內聚,足夠小,代碼容易理解,這樣能聚焦一個指定的業務功能或業務需求
- 開發簡單、開發效率高,一個服務可能就是專一的只幹一件事
- 微服務是鬆耦合的,是有功能意義的服務
- 微服務只是業務邏輯的代碼,不會和HTML,CSS或其他界面組件混合
- 每個微服務都有自己的存儲能力,可以有自己的數據庫,也可以有統一數據庫
微服務缺點:
- 開發人員要處理分佈式系統的複雜性
- 多服務運維難度,隨着服務的增加,運維的壓力也在增大
- 系統部署依賴
- 服務間通信成本
- 數據一致性
- 系統集成測試
- 性能監控
微服務技術棧:多種技術的集合體
微服務條目 | 落地技術 |
服務開發 | Springboot、Spring、SpringMVC |
服務配置與管理 | Netflix公司的Archaius、阿里的Diamond等 |
服務註冊與發現 | Eureka、Consul、Zookeeper等 |
服務調用 | Rest、RPC、gRPC |
服務熔斷器 | Hystrix、Envoy等 |
負載均衡 | Ribbon、Nginx等 |
服務接口調用(客服端調用服務的簡化工具) | Feign等 |
消息隊列 | Kafka、RabbitMQ、ActiveMQ等 |
服務配置中心管理 | Spring Cloud Config、Chef等 |
服務路由(API網關) | Zuul等 |
服務監控 | Zabbix、Nagios、Metrics、Spectator等 |
全鏈路追蹤 | Zipkin、Brave、Dapper等 |
服務部署 | Docker、OpenStack、Kubernetes等 |
數據流操作開發包 | Spring Cloud Stream(封裝與Redis、Rabbit、Kafka等發送接收消息) |
事件消息總線 | Spring Cloud Bus |
爲什麼選擇Spring Cloud作爲微服務架構
Spring Cloud,基於Spring Boot提供了一套微服務解決方案,包括服務註冊與發現,配置中心,全鏈路監控,服務網關,負載均衡,熔斷器等組件,除了基於NetFlix的開源組件做高度抽象封裝之外,還有一些選型中立的開源組件
Spring Cloud利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,Spring Cloud爲開發人員提供了快速構建分佈式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等,它們都可以用Spring Boot的開發風格做到一鍵啓動和部署
Spring Boot並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包
Spring Cloud=分佈式微服務架構下的一站式解決方案,是各個微服務架構落地技術的集合體,俗稱微服務全家桶
Spring Boot專注於快速、方便的開發單個微服務個體,Spring Cloud關注全局的服務治理框架
Spring Cloud和Dubbo對比
Dubbo | Spring Cloud | |
服務註冊中心 | Zookeeper | Spring Cloud Netflix 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 |