1. 程式人生 > >喝杯咖啡,一起了解一下微服務

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

通常而言,微服務架構是一種架構模式或者說一種架構風格,它提倡將單一應用程式劃分成一組小的服務,每個服務執行在其獨立的程序中,服務之間互相協調、互相配合,為使用者提供最終的價值。服務之間採用輕量級的通訊機制(通常是基於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的相關部落格。

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