Google Service Weaver 支持单体编码和微服务部署

Google 发布 Service Weaver 框架

Google 发布了 Service Weaver,这是一个用于构建和部署分布式应用程序的开源框架。该框架基于 Go 语言,包含一组编程库,使开发者能够将应用程序编写为单一的模块化二进制文件。此外,Service Weaver 还提供了一组部署工具,允许配置运行时拓扑结构,并在本地或云端运行应用程序。

主要特点

  1. 模块化单体架构:Service Weaver 允许开发者将应用程序编写为模块化单体架构,并将其作为一组微服务进行部署。所有代码都位于单一的二进制文件中,该二进制文件由一组模块(称为组件)组成。
  2. 组件交互:组件之间通过标准方法调用进行交互。部署后,Service Weaver 将按组件拆分应用程序,使组件能够独立运行,甚至可以在不同的机器上运行。
  3. 本地与远程调用:Service Weaver 根据需要将调用作为本地方法调用执行,或将其转换为跨机器的远程过程调用(RPC)。

示例代码

以下是一个简单的 Service Weaver 应用程序示例,包含一个 main() 函数和一个名为 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)
}

开发背景

Google 的工程师 Srdjan Petrovic 和产品经理 Garv Sawhney 表示,Service Weaver 旨在简化基于微服务的应用程序的开发和运营。他们指出,维护多个微服务二进制文件(包括各自的配置文件、网络端点和可序列化数据格式)的复杂性显著降低了开发速度。

社区反应

Service Weaver 的发布引发了不同的反应:

  • 质疑声:一些人担心该方法与过去的框架(如 CORBA)过于相似,后者也曾声称能够消除 RPC 和本地方法调用之间的差异。Martin KleppmannScott McKay 指出,分布式系统的问题(如故障处理、延迟变化等)并不会因此自动消失。
  • 支持声Russ Freeman 认为,只要假设调用可能是远程的,并相应地进行处理,这种方法就不会有问题。他还警告不要将参与者划分得过于细粒度。

与其他技术的比较

在与 Daniel Bryant 的讨论中,Miles Groocock-Wilson 指出,Service Weaver 的设计假设与 Java 的 OSGi 不同。Service Weaver 的编程方式假设调用是远程的,而 OSGi 则相反。

开源与许可

Service Weaver 是开源的,采用 Apache 2.0 许可证。当前的 0.1 版本包括用于在本地和 Google Cloud 上运行应用程序的部署工具。Petrovic 和 Sawhney 表示,在 1.0 版本发布之前,用户应预期会有重大更改。

总结

Service Weaver 是一个旨在简化分布式应用程序开发的框架,通过模块化单体架构和灵活的部署选项,帮助开发者更高效地构建和运营微服务。尽管社区对其方法和潜在问题存在不同看法,但其开源性质和灵活的架构设计为开发者提供了新的选择。

阅读 27
0 条评论