Skip to main content

后端系统结构

积木

本节将介绍构建新系统的高级构件。 这些概念都以某种方式存在于我们当前的系统中,但在新系统中,它们都被提升为一级关注点。 无论您是要建立自己的Backstage实例、开发插件,还是为插件扩展新功能,了解这些概念都非常重要。

下图概述了不同的构建模块,以及它们之间相互影响的其他模块。

backend system building blocks diagram

注:这些概念都曾以这样或那样的方式存在于我们的旧后端系统中,但现在它们都已被提升为一级关注点。

后端

这就是后端实例本身,可以将其视为部署单元。 它本身没有任何功能,只是负责将各种东西连接起来。

您可以自行决定部署多少个不同的后端。 您可以将所有功能集中在一个后端,也可以将其拆分成多个较小的部署。 这一切都取决于您对扩展和隔离单个功能的需求。

插件

插件提供实际功能,就像我们现有的系统一样。 它们完全独立运行。 如果插件之间要通信,它们必须通过线路通信。 插件之间不能通过代码直接通信。 由于这种限制,每个插件都可以被视为自己的微服务。

服务

服务提供实用程序,帮助简化插件的实施,这样每个插件就不需要从头开始实施一切。 既有许多内置服务,如用于日志记录、数据库访问和读取配置的服务,也可以导入第三方服务或创建自己的服务。

服务也是单个后端安装的定制点。 您可以用自己的实现覆盖服务,也可以对现有服务进行较小的定制。

扩展点

许多插件都有可以扩展的方式,例如目录的实体提供者或 Scaffolder 的自定义操作。 这些扩展模式现在都被编码为扩展点(Extension Points)。

扩展点看起来有点像服务,因为你依赖它们就像依赖服务一样。 一个关键的区别是,扩展点是由插件或模块自己注册和提供的,基于它们各自想要公开的定制。

扩展点是与插件或模块实例本身分开输出的,而且可以同时公开多个不同的扩展点。 这样,随着时间的推移,单个扩展点的演进和废弃都会变得更容易,而不是处理单一的大型 API 表面。

模块

模块使用扩展点为其他插件或模块添加新功能,例如添加一个单独的目录实体提供程序或一个或多个 Scaffolder 操作。

每个模块只能使用属于一个插件的扩展点,而且模块必须与该插件一起部署在同一个后端实例中。 模块只能通过已注册的扩展点与其插件或其他模块通信。

与插件一样,模块也可以访问服务,并依赖于自己的服务实现。 不过,它们将与扩展的插件共享服务,没有特定于模块的服务实现。

包裹结构

有关软件包架构的详细说明,请参阅Backstage架构概述该系统需要考虑的最重要的软件包如下:

  • plugin-<pluginId>-backend 包含后端插件本身的实现。 * plugin-<pluginId>-node 包含后端插件的扩展点以及模块或其他插件可能需要的任何其他实用程序。 * plugin-<pluginId>-backend-module-<moduleId> 包含通过扩展点扩展插件的模块。 * backend 是后端本身,它将所有东西连接在一起,成为你可以部署的东西。