Service Weaver : 一個(gè)用于編寫分布式應(yīng)用的框架
我們很高興來(lái)介紹 Service Weaver,這是一個(gè)用于構(gòu)建和部署分布式應(yīng)用程序的開(kāi)源框架。Service Weaver 允許您將應(yīng)用程序編寫為一個(gè)模塊化的單體應(yīng)用,并將其部署為一組微服務(wù)。
更具體地說(shuō),Service Weaver 由兩個(gè)核心部分組成:
-
一組編程庫(kù),讓你只需要使用原生數(shù)據(jù)結(jié)構(gòu)和方法調(diào)用,就可以將應(yīng)用程序編寫為單個(gè)模塊化二進(jìn)制文件。
-
一組部署程序,允許您配置應(yīng)用程序的運(yùn)行時(shí)拓?fù)?,并將其部署為一組微服務(wù),可以在本地或您選擇的云上進(jìn)行部署。

構(gòu)建 Service Weaver 的動(dòng)機(jī)
在編寫基于微服務(wù)的應(yīng)用程序時(shí),我們發(fā)現(xiàn)維護(hù)多個(gè)不同的微服務(wù)二進(jìn)制文件,以及它們各自的配置文件、網(wǎng)絡(luò)端點(diǎn)和可序列化數(shù)據(jù)格式,會(huì)顯著降低我們的開(kāi)發(fā)速度。
更重要的是,微服務(wù)嚴(yán)重影響了我們進(jìn)行跨二進(jìn)制更改的能力。這使我們不得不在每個(gè)二進(jìn)制文件中標(biāo)記新功能,小心地更替我們的數(shù)據(jù)格式,并保持對(duì)我們的推出流程的深入了解(這意味著我們需要非常熟悉我們的應(yīng)用程序部署流程)。
最后,預(yù)先確定特定數(shù)量的微服務(wù)有效地凍結(jié)了我們的 API;它們變得如此難以更改,以至于把所有更改都擠進(jìn)現(xiàn)有的 API 中比修改它們更容易。
因此,我們希望有一個(gè)單一的單體二進(jìn)制文件來(lái)使用。
單體二進(jìn)制文件易于編寫:它們只使用原生的語(yǔ)言類型和方法調(diào)用。它們也易于更新:只需編輯源代碼并重新部署即可。它們易于在本地或虛擬機(jī)中運(yùn)行:只需執(zhí)行二進(jìn)制文件即可。
Service Weaver 是具有單體應(yīng)用程序的開(kāi)發(fā)速度,同時(shí)也具備微服務(wù)的可擴(kuò)展性、安全性和容錯(cuò)性,是兩者之間最佳結(jié)合的一個(gè)框架。
Service Weaver 概覽
Service Weaver 的核心思想是其“模塊式單體應(yīng)用”模型。
您可以編寫一個(gè)單一的二進(jìn)制文件,只使用語(yǔ)言原生的數(shù)據(jù)結(jié)構(gòu)和方法調(diào)用。您可以將二進(jìn)制文件組織為一組模塊,稱為“組件”,這些組件是編程語(yǔ)言的原生類型。
例如,以下是使用 Service Weaver 編寫的 Go 語(yǔ)言應(yīng)用程序。它由一個(gè) main() 函數(shù)和一個(gè) Adder 組件組成:
type?Adder?interface?{?
????Add(context.Context,?int,?int)?(int,?error)
}?
type?adder?struct{?
????weaver.Implements[Adder]
}
func?(adder)?Add(_?context.Context,?x,?y?int)?(int,?error)?{
??return?x?+?y,?nil
}
func?main()?{
??ctx?:=?context.Background()
??root?:=?weaver.Init(ctx)
??adder,?err?:=?weaver.Get[Adder](root)
??sum,?err?:=?adder.Add(ctx,?1,?2)
}
運(yùn)行上述應(yīng)用程序時(shí),您可以進(jìn)行微不足道的配置選擇,即將 Adder 組件與 main() 函數(shù)放在一起還是分開(kāi)放置。當(dāng) Adder 組件是獨(dú)立的時(shí),Service Weaver 框架會(huì)自動(dòng)將 Add 調(diào)用轉(zhuǎn)換為遠(yuǎn)程 RPC;否則,Add 調(diào)用仍然是本地方法調(diào)用。
要對(duì)上述應(yīng)用程序進(jìn)行更改,例如向 Add 方法添加無(wú)限數(shù)量的參數(shù),您只需要更改 Add 的簽名,更改其調(diào)用位置,然后重新部署應(yīng)用程序。
Service Weaver 確保新版本的 main() 僅與新版本的 Adder 通信,而不管它們是否共存。這種行為,結(jié)合使用語(yǔ)言原生的數(shù)據(jù)結(jié)構(gòu)和方法調(diào)用,使您可以專注于編寫應(yīng)用程序邏輯,而不必?fù)?dān)心部署拓?fù)浜头?wù)間通信(例如,在代碼中沒(méi)有 protos、stubs 或 RPC 通道)。
當(dāng)運(yùn)行應(yīng)用程序時(shí),Service Weaver 允許您在任何地方運(yùn)行它——在您的本地桌面環(huán)境、本地機(jī)架或云上——而不需要更改應(yīng)用程序代碼。這種可移植性是通過(guò)Service Weaver 框架內(nèi)置的明確關(guān)注點(diǎn)分離實(shí)現(xiàn)的。
在一端,我們有編程框架,用于應(yīng)用程序開(kāi)發(fā)。在另一端,我們有各種“部署器”實(shí)現(xiàn),每個(gè)實(shí)現(xiàn)針對(duì)一種部署環(huán)境。

這種關(guān)注點(diǎn)分離使您可以通過(guò) go run .在本地單個(gè)進(jìn)程中運(yùn)行應(yīng)用程序;或通過(guò) weaver gke deploy 在 Google Cloud 上運(yùn)行;或在其他平臺(tái)上啟用和運(yùn)行它。在所有這些情況下,您都可以獲得相同的應(yīng)用程序行為,而無(wú)需修改或重新編譯應(yīng)用程序。
Service Weaver v0.1 包括什么?
-
用于編寫應(yīng)用程序的Go核心庫(kù)[1]。
-
用于在本地或 GKE 上運(yùn)行應(yīng)用程序的一些部署器,如本地部署器[2]或GKE 部署器[3]。
-
一組 API,允許您為任何其他平臺(tái)編寫自己的部署器。
所有庫(kù)都在 Apache 2.0 許可下發(fā)布。請(qǐng)注意,在發(fā)布 v1.0 版本之前,我們可能會(huì)引入破壞性更改。
入門指南和參與方式
雖然 Service Weaver 仍處于早期開(kāi)發(fā)階段,但我們希望邀請(qǐng)您使用它并分享您的反饋、想法和貢獻(xiàn)。
使用 Service Weaver 的最簡(jiǎn)單方法是遵循我們網(wǎng)站上的逐步說(shuō)明[4]。如果您想做出貢獻(xiàn),請(qǐng)遵循我們的貢獻(xiàn)者指南[5]。如果要發(fā)布問(wèn)題或直接聯(lián)系團(tuán)隊(duì),請(qǐng)使用 Service Weaver 的郵件列表[6]。 請(qǐng)關(guān)注 Service Weaver 博客[7] 以獲取最新消息、更新和未來(lái)活動(dòng)的詳細(xì)信息。
By Srdjan Petrovic and Garv Sawhney, ?僅代表 Service Weaver team
[1]https://github.com/ServiceWeaver/weaver
[2]https://github.com/ServiceWeaver/weaver/tree/main/cmd/weaver
[3]https://github.com/ServiceWeaver/weaver-gke
[4]https://serviceweaver.dev/docs.html#step-by-step-tutorial
[5]https://github.com/ServiceWeaver/weaver/blob/main/CONTRIBUTING.md
[6]https://groups.google.com/g/serviceweaver
[7]https://serviceweaver.dev/blog/原文地址:
Introducing Service Weaver: A Framework for Writing Distributed Applications | Google Open Source Blog (googleblog.com)
原文作者: Srdjan Petrovic and Garv Sawhney本文永久鏈接: translator/w09_Introducing_Service_Weaver_A_Framework_for_Writing_Distributed_Applications.md at master · gocn/translator (github.com)
譯者 : zxmfke校對(duì) : ---

3月15日第一階段早鳥(niǎo)票截止 ,還沒(méi)薅羊毛的快下手了 ??
