谷歌宣布在 Apache 2.0 许可下开源 Service Weaver,一个用于构建和部署分布式应用程序的框架;允许用户将应用程序编写为模块化单体,并将其部署为一组微服务。目前,该项目尚处于早期开发阶段。
Service Weaver 由两个核心部分组成:
- 一组编程库,可让用户将应用程序编写为单个模块化二进制文件,仅使用本机数据结构和方法调用;
- 一组部署器,协助配置应用程序的运行时拓扑结构,并将其部署为一组微服务,本地或云上都可。
通过将应用程序编写过程与运行时考虑因素(例如应用程序如何拆分为微服务、使用何种数据序列化格式以及如何发现服务)分离,Service Weaver 旨在提高分布式应用程序开发速度和性能。
谷歌方面指出,在编写基于微服务的应用程序时,维护多个不同的微服务二进制文件的开销大幅降低了开发速度;Service Weaver 的出现就是为了解决这一问题,同时促使跨二进制文件的修改变得更加容易。“Service Weaver 是一个两全其美的框架:单体应用的开发速度,以及微服务的可扩展性、安全性和容错性。”
Service Weaver 的核心思想是它的模块化单体模型。借助 Service Weaver,用户可以编写仅包含 language-native 数据结构和方法调用的单个二进制文件,然后将二进制文件组织为一组称为 components 的编程语言原生模块。示例,一个使用 Service Weaver 用 Go 语言编写的简单应用程序,由一个 main() 函数和一个 Adder component 组成:
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)
}
目前,Service Weaver 的 v0.1 版本为用户带来了用于编写应用程序的核心 Go 库、用于在本地或 GKE 上运行应用程序的多个部署程序,以及一组使用户能够为任何其他平台编写自己的部署程序的 API。值得注意的是,在 v1.0 版本发布之前,开发团队可能还会引入一些 breaking changes。
更多详情可查看官方博客。