将应用程序的组件部署到单独的流程或容器中,以提供隔离和封装。这种模式还可以使应用程序由异构组件和技术组成。
这种模式被命名为Sidecar,因为它类似于附在摩托车上的Sidecar。在模式中,sidecar附加到父应用程序,并为应用程序提供支持特性。sidecar还与父应用程序共享相同的生命周期,与父应用程序一起创建和退出。sidecar模式有时称为sidekick模式,是一种分解模式。
应用程序和服务通常需要相关的功能,例如监视、日志记录、配置和网络服务。这些外围任务可以作为单独的组件或服务实现。
如果将它们紧密集成到应用程序中,它们可以与应用程序运行在相同的进程中,从而有效地使用共享资源。但是,这也意味着它们没有很好地隔离,这些组件中的一个中断可能会影响其他组件或整个应用程序。此外,它们通常需要使用与父应用程序相同的语言来实现。因此,组件和应用程序之间有着密切的相互依赖关系。
如果将应用程序分解为服务,则可以使用不同的语言和技术构建每个服务。虽然这提供了更多的灵活性,但这意味着每个组件都有自己的依赖关系,并且需要特定于语言的库来访问底层平台和与父应用程序共享的任何资源。此外,将这些功能部署为单独的服务可能会增加应用程序的延迟。管理这些特定于语言的接口的代码和依赖关系也会增加相当大的复杂性,特别是在托管、部署和管理方面。
将一组内聚的任务与主应用程序放在一起,但是将它们放在它们自己的流程或容器中,为跨语言的平台服务提供一个同构接口。
sidecar服务不一定是应用程序的一部分,而是连接到应用程序的。它将指向父应用程序所在的位置。Sidecars支持与主应用程序一起部署的流程或服务。在摩托车上,车斗附在一辆摩托车上,每辆摩托车都可以有自己的车斗。同样,sidecar服务与其父应用程序的命运相同。对于应用程序的每个实例,都会部署一个sidecar实例并将其托管在其旁边。
使用边车模式的优点包括:
sidecar模式通常与容器一起使用,称为sidecar容器或sidekick容器。
如下情况使用边车设计模式:
如下业务场景不适合边车设计模式: