微服務架構必備技術棧:萬變不離其宗的奧義!
前言
之前我們說過,微服務是一種軟件設計、架構思想。當然,里面也包含了相關技術點要解決當前要務。學習微服務,我們不能空口而談,一定要落實到具體的技術棧上。

當今使用比較多兩個技術體系,一個是Java,另外一個就是Net。
廢話不多說,今天我就把相關“微服務架構”所用到的技術棧羅列出來。(以下是微軟相關技術棧的)
這里也要說明一下,微服務架構里面的很多技術是和開發(fā)語言無關的。無論是 .Net 還是 Java 平臺都可以使用。我們之前說過,微服務架構的輪廓大同小異,以后,一步一步的針對每項技術在做深入研究。
微服務架構----服務通信
WebService、WCF、WebAPI,甚至可以是 ASHX,ASPX,這都是微軟本身的技術體系,沒什么可說的。
- 主動觸發(fā)
- 數(shù)據(jù)序列化傳遞
- 跨平臺。
- 跨語言。
- Http 穿透防火墻。
微服務架構----進程通信
- Net Remoting:Net 平臺督郵的,不支持跨平臺。
- gRPC:高性能、開源和通用 RPC框架,面向服務端和移動端,基于 HTTP/2 設計,推薦使用。
微服務架構---API網(wǎng)關服務(Ocelot)
API網(wǎng)關 —— 它是系統(tǒng)的暴露在外部的一個訪問入口。這個有點像代理訪問的家伙,就像一個公司的門衛(wèi)承擔著尋址、限制進入、安全檢查、位置引導、等等功能。

Ocelot是一個用.NET Core實現(xiàn)并且開源的API網(wǎng)關,它功能強大,包括了:路由、請求聚合、服務發(fā)現(xiàn)、認證、鑒權、限流熔斷、并內置了負載均衡器與Service Fabric、Butterfly Tracing集成。這些功能只都只需要簡單的配置即可完成。如圖:

官網(wǎng):https://ocelot.readthedocs.io/en/latest/index.html
微服務架構---認證&授權

現(xiàn)在的應用開發(fā)層出不窮,基于瀏覽器的網(wǎng)頁應用,基于微信的公眾號、小程序,基于IOS、Android的App,基于Windows系統(tǒng)的桌面應用和UWP應用等等。
這么多種類的應用,就給應用的開發(fā)帶來的挑戰(zhàn),我們除了分別實現(xiàn)各個應用外,我們還要考慮各個應用之間的交互,通用模塊的提煉,其中身份的認證和授權就是每個應用必不可少的的一部分。
而現(xiàn)在的互聯(lián)網(wǎng),對于信息安全要求又十分苛刻,所以一套統(tǒng)一的身份認證和授權就至關重要。IdentityServer4就是這樣一個框架,IdentityServer4是為ASP.NET CORE量身定制的實現(xiàn)了OpenId Connect和OAuth2.0協(xié)議的認證授權中間件。
項目地址:https://github.com/IdentityServer/IdentityServer4
微服務架構---瞬態(tài)故障處理

Polly它一款強大的類庫,Polly是一種.NET彈性和瞬態(tài)故障處理庫,允許我們以非常順暢和線程安全的方式來執(zhí)諸如行重試,斷路,超時,故障恢復等策略。
Polly針對 .NET 4.0,.NET 4.5和.NET Standard 1.1以及.NET Core實現(xiàn),該項目作者現(xiàn)已成為.NET基金會一員,項目一直在不停迭代和更新,你值得擁有。
項目地址:https://github.com/App-vNext/Polly
微服務架構---分布式追蹤

隨著微服務架構的流行,一些微服務架構下的問題也會越來越突出。
比如一個請求會涉及多個服務,而服務本身可能也會依賴其他服務,整個請求路徑就構成了一個網(wǎng)狀的調用鏈,而在整個調用鏈中一旦某個節(jié)點發(fā)生異常,整個調用鏈的穩(wěn)定性就會受到影響,所以會深深的感受到 “銀彈” 這個詞是不存在的,每種架構都有其優(yōu)缺點。

面對以上情況, 我們就需要一些可以幫助理解系統(tǒng)行為、用于分析性能問題的工具,以便發(fā)生故障的時候,能夠快速定位和解決問題,這時候 APM(應用性能管理)工具就該閃亮登場了。
項目地址:https://github.com/SkyAPM/SkyAPM-dotnet
微服務架構----分布式日志
一般我們需要進行日志分析場景:直接在日志文件中grep、awk 就可以獲得自己想要的信息。但在規(guī)模較大也就是日志量多而復雜的場景中,此方法效率低下,面臨問題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。
這就需要集中化的日志管理,所有服務器上的日志收集匯總。常見解決思路是建立集中式日志收集系統(tǒng),將所有節(jié)點上的日志統(tǒng)一收集,管理,訪問。
大型系統(tǒng)通常都是一個分布式部署的架構,不同的服務模塊部署在不同的服務器上,問題出現(xiàn)時,大部分情況需要根據(jù)問題暴露的關鍵信息,定位到具體的服務器和服務模塊,構建一套集中式日志系統(tǒng),可以提高定位問題的效率。
-
Exceptionless 是一個開源的實時的日志收集框架,它可以應用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技術棧的應用程序中,并且提供了Rest接口可以應用在 Javascript,Node.js 中。

Exceptionless 將日志收集變得簡單易用并且不需要了解太多的相關技術細節(jié)及配置。在以前,我們做日志收集大多使用 Log4net,Nlog 等框架,在應用程序變得復雜并且集群的時候,可能傳統(tǒng)的方式已經(jīng)不是很好的適用了,因為收集各個日志并且分析他們將變得麻煩而且浪費時間。
現(xiàn)在Exceptionless團隊給我們提供了一個更好的框架來做這件事情,我認為這是非常偉大并且有意義的,感謝他們。官網(wǎng):http://exceptionless.com GitHub:https://github.com/exceptionless/Exceptionless
- ELK是三個開源軟件的縮寫,分別為:Elasticsearch 、 Logstash以及Kibana , 它們都是開源軟件。不過現(xiàn)在還新增了一個Beats,它是一個輕量級的日志收集處理工具(Agent),Beats占用資源少,適合于在各個服務器上搜集日志后傳輸給Logstash,官方也推薦此工具,目前由于原本的ELK Stack成員中加入了 Beats 工具所以已改名為Elastic Stack。推薦使用。

微服務架構---分布式配置中心

Apollo(阿波羅)是攜程框架部門研發(fā)的配置管理平臺,能夠集中化管理應用不同環(huán)境、不同集群的配置,配置修改后能夠實時推送到應用端,并且具備規(guī)范的權限、流程治理等特性。
服務端基于 Spring Boot 和 Spring Cloud 開發(fā),打包后可以直接運行,不需要額外安裝 Tomcat 等應用容器。
Java 客戶端不依賴任何框架,能夠運行于所有 Java 運行時環(huán)境,同時對 Spring 環(huán)境也有較好的支持。
.Net 客戶端不依賴任何框架,能夠運行于所有 .Net 運行時環(huán)境。
項目地址:https://github.com/ctripcorp/apollo/
微服務架構---分布式鎖
分布式鎖的解決方案有很多,我在這里就羅列一些,我會在以后的實踐中實現(xiàn)這些技術點。
- Consul 可以實現(xiàn)分布式鎖
- Redis 可以實現(xiàn)分布式鎖,推薦使用。
- Zookeeper 可以實現(xiàn)分布式鎖
- 數(shù)據(jù)庫 可以實現(xiàn)分布式鎖
微服務架構---分布式事務
分布式事務的實現(xiàn)方式也不少,以后努力學習吧。
- 2PC(two-phase commit protocol,強一致性,沒有可用性)
- 3PC
- TCC(Try-Confirm-Cancel)
- 本地消息表,推薦 RabbitMQ。
- Saga 模式
本地消息表:MQ分布式事務—本地消息表—基于消息的一致性。
- 上游投遞消息
- 下游獲取消息
- 上游投遞穩(wěn)定性
- 下游接受穩(wěn)定性
微服務架構---容器化

Docker 是一個開源的應用容器引擎,可以打包應用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的 Linux 和Windows 機器上,也可以實現(xiàn)虛擬化。
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創(chuàng)建Docker容器。Docker 容器通過 Docker 鏡像來創(chuàng)建。容器與鏡像的關系類似于面向對象編程中的對象與類。
Docker采用 C/S架構 Docker daemon 作為服務端接受來自客戶的請求,并處理這些請求(創(chuàng)建、運行、分發(fā)容器)。
客戶端和服務端既可以運行在一個機器上,也可通過 socket 或者RESTful API 來進行通信。Docker daemon 一般在宿主主機后臺運行,等待接收來自客戶端的消息。Docker 客戶端則為用戶提供一系列可執(zhí)行命令,用戶用這些命令實現(xiàn)跟 Docker daemon 交互。如圖:

微服務架構---容器編排

Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規(guī)模可伸縮、應用容器化管理。在生產環(huán)境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡。
在Kubernetes中,我們可以創(chuàng)建多個容器,每個容器里面運行一個應用實例,然后通過內置的負載均衡策略,實現(xiàn)對這一組應用實例的管理、發(fā)現(xiàn)、訪問,而這些細節(jié)都不需要運維人員去進行復雜的手工配置和處理。
Kubernetes 也可以理解為Docker 的編排容器,是管理應用的全生命周期的工具,從創(chuàng)建應用/部署,應用提供服務,擴容縮容,更新,都非常的方便,而且可以做到故障自愈。
中文社區(qū):http://docs.kubernetes.org.cn/
官網(wǎng):https://kubernetes.io/docs/home/
微服務架構---CI/CD

Jenkins 是一個開源的、提供友好操作界面的持續(xù)集成(CI)工具,主要用于持續(xù)、自動的構建/測試軟件項目、監(jiān)控外部任務的運行。
官網(wǎng): http://www.jenkins.org.cn/

浙公網(wǎng)安備 33010602011771號