创建代表消费者服务或应用程序发送网络请求的辅助服务。大使服务可以被认为是与客户端位于同一位置的进程外代理。
此模式可用于以与语言无关的方式卸载常见的客户端连接任务,例如监控、日志记录、路由、安全性(如 TLS)和弹性模式。它通常与遗留应用程序或其他难以修改的应用程序一起使用,以扩展其网络功能。它还可以使专门的团队实现这些功能。
弹性的基于云的应用程序需要诸如断路器、路由、计量和监控等功能,以及进行与网络相关的配置更新的能力。更新遗留应用程序或现有代码库以添加这些功能可能很困难或不可能,因为开发团队不再维护或无法轻松修改代码。
网络调用可能还需要对连接、身份验证和授权进行大量配置。如果这些调用跨多个应用程序使用,使用多种语言和框架构建,则必须为这些实例中的每一个配置调用。此外,网络和安全功能可能需要由组织内的中央团队管理。拥有庞大的代码库,该团队更新他们不熟悉的应用程序代码可能会有风险。
将客户端框架和库放入一个外部进程中,该进程充当您的应用程序和外部服务之间的代理。将代理部署在与您的应用程序相同的主机环境中,以允许控制路由、弹性、安全功能,并避免任何与主机相关的访问限制。您还可以使用大使模式来标准化和扩展检测。代理可以监控延迟或资源使用等性能指标,并且这种监控发生在与应用程序相同的主机环境中。
卸载给大使的功能可以独立于应用程序进行管理。您可以在不影响应用程序的旧功能的情况下更新和修改大使。它还允许独立的专业团队实施和维护已转移给大使的安全、网络或身份验证功能。
大使服务可以部署为边车,以伴随消费应用程序或服务的生命周期。或者,如果大使由公共主机上的多个单独进程共享,则可以将其部署为守护程序或 Windows 服务。如果消费服务是容器化的,则应在同一主机上将大使创建为单独的容器,并为通信配置适当的链接。
在以下情况下使用此模式:
这种模式可能不适合:
下图显示了一个应用程序通过大使代理向远程服务发出请求。大使提供路由、断路和日志记录。它调用远程服务,然后将响应返回给客户端应用程序: