谷歌开源 Service Weaver,编写分布式应用程序的框架

  谷歌宣布在 Apache 2.0 许可下开源 Service Weaver,一个用于构建和部署分布式应用程序的框架;允许用户将应用程序编写为模块化单体,并将其部署为一组微服务。目前,该项目尚处于早期开发阶段。

  Service Weaver 由两个核心部分组成:

  1. 一组编程库,可让用户将应用程序编写为单个模块化二进制文件,仅使用本机数据结构和方法调用;
  2. 一组部署器,协助配置应用程序的运行时拓扑结构,并将其部署为一组微服务,本地或云上都可。

  通过将应用程序编写过程与运行时考虑因素(例如应用程序如何拆分为微服务、使用何种数据序列化格式以及如何发现服务)分离,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。

  更多详情可查看官方博客