Steeltoe:簡(jiǎn)化.NET云微服務(wù)的構(gòu)建
譯文【51CTO.com快譯】.NET Foundation不僅僅包括.NET,還是眾多語言和框架的開源中心,可幫助您在各種.NET運(yùn)行時(shí)環(huán)境和編譯器的基礎(chǔ)上構(gòu)建代碼,全球的公司和個(gè)人為之貢獻(xiàn)代碼。
一種較流行的工具來自Pivotal(現(xiàn)在再次隸屬VMware)。Steeltoe旨在幫助開發(fā)人員構(gòu)建更好的.NET微服務(wù),充當(dāng).NET與Pivotal的Spring Cloud和Cloud Foundry平臺(tái)以及Kubernetes和其他容器之間的橋梁,擁有一組可加快應(yīng)用程序開發(fā)的庫。它現(xiàn)已開放,接受.NET社區(qū)(包括微軟團(tuán)隊(duì))貢獻(xiàn)的代碼,立足于Netflix的開源庫方面完成的工作。你可以在GitHub上找到存儲(chǔ)庫(https://github.com/SteeltoeOSS/steeltoe)。
微服務(wù)和Steeltoe
Steeltoe基于熟悉的工作方式,還可以用作從Java和其他企業(yè)語言進(jìn)入到.NET開發(fā)的跳板。你可以將在Spring Cloud上用Java編寫的代碼移植到.NET,或使用Steeltoe連接件來混合不同技術(shù),以便可以通過.NET微服務(wù)改進(jìn)現(xiàn)有的應(yīng)用程序。項(xiàng)目經(jīng)理會(huì)發(fā)現(xiàn)這種方法很有幫助,因?yàn)樗麄兛梢愿鶕?jù)需要混合搭配可用資源,不必?fù)?dān)心兼容性問題。
Steeltoe可以使用初始化工具創(chuàng)建云微服務(wù),添加提供不同云服務(wù)的提供商,并自動(dòng)配置用于部署的代碼。配置可以輕松地存儲(chǔ)在代碼之外,那樣您可以將令牌及其他重要的驗(yàn)證詳細(xì)信息保留在Hashicorp的Vault之類的安全服務(wù)中,無需暴露在代碼存儲(chǔ)庫中。
最大優(yōu)點(diǎn)是其庫,庫預(yù)包裝在您的代碼中準(zhǔn)備使用的云設(shè)計(jì)模式。這包括借助Eureka和Consul客戶端以及有助于調(diào)試代碼的分布式跟蹤支持服務(wù)發(fā)現(xiàn)。其他關(guān)鍵元素通過處理網(wǎng)絡(luò)文件共享來支持消息傳遞,并提供與要使用的云服務(wù)對(duì)接的連接件。云原生微服務(wù)需要無狀態(tài)、易于組合且定義明確,而Steeltoe的庫有助于構(gòu)建支持云原生設(shè)計(jì)模式的代碼,無需更改編寫.NET Core應(yīng)用程序的方式。
最新版本是Steeltoe 3.0。這將支持從.NET Framework轉(zhuǎn)移到.NET Core,為.NET 5和將來基于.NET Core的版本做好了準(zhǔn)備。它增加了支持其他分布式應(yīng)用程序平臺(tái)(比如Kubernetes)和基于消息傳遞的架構(gòu)的功能。這意味著要更改程序包命名,因此升級(jí)到新版本時(shí),代碼需要一番重構(gòu)。
使用斷路器模式
Steeltoe的一項(xiàng)實(shí)用功能是使用基于Netflix Hystrix的工具支持?jǐn)嗦菲?Circuit Breaker)模式。最初的Hystrix處于維護(hù)模式,但它使用的模式仍適用于使微服務(wù)具有容錯(cuò)能力,并通過提供一種快速鎖定故障并防止連鎖反應(yīng)的方法為應(yīng)用程序增添彈性。
在遠(yuǎn)程或第三方服務(wù)可見性有限的分布式架構(gòu)中,斷路器是一種重要工具。這使得它們適用于這些地方:服務(wù)由不同的Devop團(tuán)隊(duì)構(gòu)建和管理,以及您使用的服務(wù)被太多應(yīng)用程序使用而變得不可靠。斷路器監(jiān)測(cè)代碼中對(duì)服務(wù)的所有調(diào)用。如果太多調(diào)用失敗,它會(huì)退回到替代方法并發(fā)出警報(bào)。這會(huì)觸發(fā)重新啟動(dòng),或者就等到遠(yuǎn)程服務(wù)再次可用。
有了Steeltoe,就很容易為任何服務(wù)調(diào)用添加斷路器包裝件。這在其自己的線程池中運(yùn)行,有助于管理目標(biāo)服務(wù)上的負(fù)載。如果線程因代碼調(diào)用過多而不可用,或者斷路器在遠(yuǎn)程服務(wù)沒有響應(yīng)時(shí)等待,可以調(diào)用后備方法。同樣,呼叫可能超時(shí),所有操作會(huì)被記錄并顯示在各自的儀表板上,以便您查看服務(wù)的運(yùn)行情況。這些日志是有用的診斷工具,您可以使用ELK堆?;駻zure的Monitor之類的工具將它們納入Devops流程中。
使用Project Tye部署到Kubernetes
如果您想使.NET成為更廣泛的云原生環(huán)境的一部分,Steeltoe與微軟的Project Tye很搭,可將.NET微服務(wù)引入到Kubernetes(尤其是Azure Kubernetes Service)。在這里您可以使用Steeltoe庫構(gòu)建服務(wù),然后使用Project Tye將它們添加到容器中。這可以自動(dòng)執(zhí)行這個(gè)過程:創(chuàng)建.NET容器和Kubernetes清單文件,以及查找其他服務(wù)和處理容器依賴項(xiàng)。這是一個(gè)實(shí)用的工具,可使用.NET命令行工具來安裝。一旦安裝完成,很容易從應(yīng)用程序腳手架轉(zhuǎn)到運(yùn)行中代碼,儀表板監(jiān)測(cè)運(yùn)行中的服務(wù)并查看日志。可將多個(gè)服務(wù)添加到單個(gè).NET解決方案,然后可以使用單個(gè)tye調(diào)用來運(yùn)行。
更復(fù)雜的配置可使用Project Tye自己的YAML清單文件來加以管理。tye.yaml文件將幫助管理依賴項(xiàng)、與Docker文件和容器注冊(cè)表一起引入服務(wù)并根據(jù)需要進(jìn)行部署。一些場(chǎng)景需要預(yù)配置和部署外部服務(wù),比如數(shù)據(jù)庫或緩存。
使用Steeltoe構(gòu)建服務(wù)以及使用Project Tye進(jìn)行捆綁是開始使用云原生.NET開發(fā)的快速方法。雖然Project Tye仍然是試驗(yàn)項(xiàng)目,但.NET 5發(fā)布后微軟會(huì)不會(huì)繼續(xù)致力于它值得拭目以待,因?yàn)橛?jì)劃與Dapr等工具的集成會(huì)使其成為任何.NET開發(fā)環(huán)境的一組實(shí)用擴(kuò)展。在我看來,將其集成到.NET命令行環(huán)境中非常有意義,其對(duì).NET的意義如同Draft等工具對(duì)更廣泛的Kubernetes生態(tài)系統(tǒng)的意義。
.NET中與云無關(guān)的分布式應(yīng)用程序方法
構(gòu)建和運(yùn)行分布式應(yīng)用程序應(yīng)該不難;它們是在多個(gè)云中和跨多個(gè)云工作的關(guān)鍵。通過支持Spring Cloud和Kubernetes,Steeltoe提供了一種中立的多云開發(fā)方法。您可以使用熟悉的工具和技術(shù)以及Steeltoe來構(gòu)建.NET代碼,然后使用配置工具支持將代碼分發(fā)到目標(biāo)平臺(tái)的工作。
結(jié)果是可以將代碼從一個(gè)云快速切換到另一個(gè)云,以及從數(shù)據(jù)中心快速切換到托管平臺(tái)?;?NET Core的現(xiàn)代代碼是為微服務(wù)設(shè)計(jì)的,Steeltoe可幫助提供原本您需要自行編寫的許多功能。探究.NET基金會(huì)托管的各個(gè)項(xiàng)目非常值得,您可能會(huì)找到幫您更快速地編寫更好代碼的項(xiàng)目。
原文標(biāo)題:Steeltoe: Simplify building .NET cloud microservices,作者:Simon Bisson
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】