SpringCloud之初識微服務(一)

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 Google Facebook  
社區活躍程度 一般 一般 已經不維護了
學習難度 中等
文檔豐富度 一般 一般 一般
其他 SpringCloudBus爲我們的應用程序帶來了更多管理端點 支持降級 Netflix內部在開發集成gRPC IDL定義 實踐的公司較多
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章