Git源碼: https://github.com/chenhang666/SpringCloud
1、什麼是微服務?
它提倡將單一應用程序劃分成一組小的服務,每個服務運行在其獨立的自己的進程中,服務之間互相協調、互相配合爲用戶提供最終價值。微服務化的核心就是將傳統的一站式應用,根據業務拆分成一個一個的服務,徹底地去耦合,每一個微服務提供單個業務功能的服務,一個服務做一件事,從技術角度看就是一種小而獨立的處理過程,類似進程概念,能夠自行單獨啓動或銷燬,擁有自己獨立的數據庫。
根據該博客可以總結一下幾點核心內容:
組件是可獨立更換和升級的軟件單元
微服務劃分方法是不同的,分爲圍繞業務能力組織的服務
簡單的溝通機制:1、Restful風格的API;2、通過輕量級總線進行消息傳遞(RabbitMq)
集中治理的主要後果是在單一技術平臺上實現標準化的趨勢,而單片應用程序可以在一定程度上利用不同的語言
每個服務管理自己的數據庫,可以是相同數據庫技術的不同實例,也可以是完全不同的數據庫系統
自動化測試、自動部署
由於服務可能隨時發生故障,因此能夠快速檢測故障並在可能的情況下自動恢復服務非常重要
組件可替換性,可避免大量的版本控制
2、 微服務優缺點
2.1、優點:
每個服務足夠內聚,足夠小,代碼容易理解這樣聚焦一個指定的業務功能或業務需求
開發簡單、開發效率提高,一個服務可能就是專一的只幹一件事
微服務能夠被小團隊單獨開發,這個小團隊是2到5人的開發人員組成
微服務是松耦合的,具有功能意義的服務,無論是在開發階段或部署階段都是獨立的
微服務能使用不同的語言開發
易於和第三方集成,微服務允許容易且靈活的方式集成自動部署,通過持續集成工具,如Jenkins、Hudson、bamboo
微服務易於被一個開發人員理解,修改和維護,這樣小團隊能夠更關注自己的工作成功,無需通過合作才能體現價值
微服務允許利用融合最新技術
微服務只是業務邏輯的代碼,不會和HTML、CSS或其他界面組件混合
每個微服務都有自己的存儲能力,可以有自己的數據庫,也可以有統一數據庫
2.2、缺點:
開發人員要處理分佈式系統的複雜性
多服務運維難度,隨着服務的增加,運維的壓力也在增大
系統部署依賴
服務間通信成本
數據一致性
系統集成測試
性能監控
3、微服務技術棧
服務名 | 落地技術 |
服務開發 | Springboot、Spring、SpringMVC |
服務配置與管理 | Netflix公司的Archaius、阿里的Diamond等 |
服務註冊與發現 | Eureka、Consul、Zookeeper等 |
服務調用 |
Rest、PRC、gRPC |
服務熔斷器 | Hystrix、Envoy等 |
負載均衡 | Ribbon、Nginx等 |
服務接口調用 | Feign等 |
消息隊列 | Kafka、RabbitMQ、ActiveMQ等 |
服務配置中心管理 | SpringCloudConfig、Chef等 |
服務路由(API網關) | Zuul等 |
服務監控 | Zabbix、Nagios、Metrics、Spectator等 |
全鏈路追蹤 | Zipkin、Brave、Dapper等 |
服務部署 | Docker、OpenStack、Kubernetes等 |
數據流操作開發包 | SpringCloud Stream(封裝與Redis、Rabbit、Kafka等發送接收消息) |
事件消息總線 | SpringCloud Bus |
4、 爲什麼選擇SpringCloud作爲微服務架構
4.1、選型依據
整體解決方案和框架成熟度
社區熱度
可維護性
學習曲線
4.2、當前各大IT公司用的微服務架構有哪些?
阿里Dubbo/HSF
京東JSF
新浪微博Motan
噹噹網DubboX
4.3、各微服務框架對比
功能點/服務框架 | 備選方案 | ||||
Netflix/Spring Cloud | Motan | gRPC | Thrift | Dubbo/DubboX | |
功能定位 | 完整的微服務框架 | RPC框架,但整合了ZK或Consul,實現集羣環境的基本的服務註冊/發現 | RPC框架 | RPC框架 | 服務框架 |
支持Rest | 是 Ribbon支持多種可插拔的序列化選擇 | 否 | 否 | 否 | 否 |
支持RPC | 否 | 是 | 是 | 是 | 是 |
支持多語言 | 是 | 否 | 是 | 是 | 否 |
服務註冊/發現 | 是(Eureka) Eureka服務註冊表,Karyon服務端框架支持服務自注冊和健康檢查 |
是(zookeeper/consul) |
否 | 否 | 是 |
負載均衡 |
是(服務端zuul+客戶端Ribbon) Zuul服務動態路由 雲端負載均衡 Eureka(針對中間層服務器) |
是(客戶端) | 否 | 否 | 是(客戶端) |
配置服務 | Netflix Archaius SpringCloud Config Server集中配置 | 是(zookeeper提供) | 否 | 否 | 否 |
服務調用鏈監控 | 是(zuul) zuul提供邊緣服務、API網關 | 否 | 否 | 否 | 否 |
高可用/容錯 | 是(服務端Hystrix+客戶端Ribbon) | 是(客戶端) | 否 | 否 | 是(客戶端) |
典型應用案例 | Netflix | Sina | |||
社區活躍程度 | 高 | 一般 | 高 | 一般 | 已經不維護了 |
學習難度 | 中等 | 低 | 高 | 高 | 低 |
文檔豐富度 | 高 | 一般 | 一般 | 一般 | 高 |
其他 | SpringCloudBus爲我們的應用程序帶來了更多管理端點 | 支持降級 | Netflix內部在開發集成gRPC | IDL定義 | 實踐的公司較多 |