喝杯咖啡,一起了解一下微服務

通常而言,微服務架構是一種架構模式或者說一種架構風格,它提倡將單一應用程序劃分成一組小的服務,每個服務運行在其獨立的進程中,服務之間互相協調、互相配合,爲用戶提供最終的價值。服務之間採用輕量級的通信機制(通常是基於HTTP的RESTful API)。每個服務都圍繞着具體業務進行構建,並且能夠被獨立地部署到生產環境、類生產環境等。另外,應儘量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建,可以有一個非常輕量級的集中式管理來協調這些服務,可以使用不同的語言來開發這些服務,也可以使用不同的數據存儲。

1. 微服務是什麼

微服務化的核心就是將傳統的一站式應用,根據業務拆分成一個一個的服務,徹底去掉耦合,每一個微服務提供單個業務功能,一個服務只做一件事。
從技術角度講就是一種小而獨立的處理過程,類似與進程的概念,能夠自行單獨啓動或銷燬,可以擁有自己獨立的數據庫。從理論角度,這裏有篇微服務架構的提出者馬丁福特的論文(本文的圖片也是出自於該作者的文章之中,版權歸原作者所有。):
https://martinfowler.com/articles/microservices.html
論文中提到了微服務和傳統架構的區別,傳統架構(單機系統),一個項目一個工程:比如商品、訂單、交易、庫存等等,統一部署,一個進程。如下圖所示:

微服務架構(分佈式系統),各個模塊/服務,各自獨立出來,“讓專業的人幹專業的事”,獨立部署。分佈式系統中,不同的服務可以使用各自獨立的數據庫。如下圖所示:

2. 微服務的優缺點

優點:

1.每個服務足夠內聚,足夠小,代碼容易理解。這樣能聚焦一個只當的業務功能或業務需求。
2.開發簡單、開發效率提高,一個服務可能就是專業的只幹一件事
微服務能夠被小團隊單獨開發,這個小團隊可以是2到5人的開發人員組成。
3.微服務是鬆耦合的,是有功能意義的服務,無論是在開發階段或部署階段都是獨立的。
4.微服務能使用不同的語言開發。
5.易於和第三方集成,微服務運行容易且靈活的方式集成自動部署,通過持續集成工具,如Jenkins,Hudson,bamboo。
6.微服務易於被一個開發人員理解、修改和維護,這樣小團隊能夠更關注自己的工作成果,無需通過合作才能體現價值。
7.微服務允許你利用融合最新技術。
微服務只是業務邏輯的代碼,不會和HTML/CSS或其他界面組件混合,即前後端分離。
8.每個微服務都有自己的存儲能力,可以有自己的數據庫,也可以有統一數據庫。

缺點

開發人員要處理分佈式系統的複雜性。

3. 微服務的技術棧

微服務的技術棧都有哪些呢?

微服務條目 落地技術
服務開發 SpringBoot、Spring、SpringMVC
服務配置與管理 Netfllix公司的Archaius、阿里的Diamond等
服務註冊與發現 Eureka、Consul、Zookeeper等
服務調用 Rest、RPC、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

當前微服務架構,Dubbo和SpringCloud比較火,另外還有Thrift、gRPC等等,下面把這些做一個比較,即可看出SpringCloud的強大之處。

框架 SpringCloud Dubbo/DubboX gRPC Thrift Motan
功能定位 完整的微服務框架 服務框架 RPC框架 RPC框架 RPC框架,但整合了Zookeeper或Consul(有耦合),實現集羣環境的基本的服務註冊與發現
支持REST 是,Ribbon支持多種可插拔的序列化選擇
支持RPC
支持多語言 是(REST形式)
服務註冊與發現 是(Eureka) 是(Zookeeper/Consul)
負載均衡 是(服務端Zuul+客戶端Ribbon)Zuul-服務,動態路由 雲端負載均衡 Eureka(針對中間層服務器) 是(客戶端) 是(客戶端)
配置服務 Netflix Archaius SpringCloud Server集中配置 是(Zookeeper提供)
服務調用鏈監控 是(Zuul) Zuul提供邊緣服務,API網關
高可用/容錯 是(服務端Hystrix+客戶端Ribbon) 是(客戶端) 是(客戶端)
典型應用案例 Netflix alibab Google Facebook Sina
社區活躍程度 一般 一般
學習難度 中等
文檔豐富度 一般 一般 一般
其他 SpringCloud Bus爲我們應用程序帶來了更多管理端點 實踐的公司比較多 Netflix內部在開發集成gRPC IDL定義 支持降級

老技術用Dubbo比較多,新技術一般會選Spring Cloud。Dubbo沉睡了5年,Spring Cloud像獵豹一樣追上來了~可以看出,Spring Cloud現在非常火爆,而且很有競爭力,以後的分佈式架構使用Spring Cloud也很廣泛,後面會寫一些使用Spring Cloud的相關博客。


歡迎關注我的微信公衆號:【程序員私房菜】
程序員私房菜
回覆:“資源”、“架構”等關鍵詞獲取海量免費學習資料。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章