服务网格的组件

Grid

Router

路由器负责将请求转发到正确的组件.

它是网格的入口,所有外部请求都将借此被网格接收. 路由器的行为取决于请求. 如果是新的会话请求, 则路由器会将其转发到分发服务器 (将在其中处理并创建新的会话). 如果请求属于存量会话,则路由器会将会话ID发送到会话集合, 会话集合将返回会话正在运行的节点. 此后, 路由器会将请求转发到节点.

路由器旨在通过将请求发送到能够更好地处理请求的组件, 来平衡网格中的负载, 从而避免过程中任何组件无谓地过载.

Distributor

分发器知道所有节点及其功能. 它的主要作用是接收新的会话请求 并找到可以在其中创建会话的适当节点. 创建会话后, 分发器在会话集合中存储会话ID与正在执行会话的节点之间的关系.

Node

一个节点可以在网格中出现多次. 每个节点负责管理其运行机器的可用浏览器的插槽.

节点通过事件总线将其自身注册到分发服务器, 并且将其配置作为注册消息的组成部分一起发送.

默认情况下, 节点会自动注册运行它的计算机路径上所有可用的浏览器驱动程序. 它还为基于Chromium的浏览器和Firefox的每个可用的CPU都创建插槽. 对于Safari和Internet Explorer, 则仅创建一个插槽. 通过特定的配置, 它可以在Docker容器中运行会话. 您可以在下一 章节 中查看更多配置详细信息.

节点仅执行接收到的命令, 它不进行评估、做出判断或控制任何事情. 运行节点的计算机不需要与其他组件具有相同的操作系统. 例如, Windows节点可以具有将Internet Explorer作为浏览器选项的功能, 而在Linux或Mac上则无法实现.

会话表

会话表是一种数据存储的方式, 用于保存会话id和会话运行的节点的信息. 它作为路由支持, 在向节点转发请求的过程中起作用. 路由将通过会话表获取与会话id关联的节点.

新的会话队列器, 新的会话队列

新的会话队列器是唯一可以与新会话队列通信的组件. 它处理所有的诸如添加这样操纵队列的操作. 它具有用于设置请求超时和请求重试间隔的可配置参数.

新的会话队列器从路由器接收新会话请求 并将其添加到队列中. 队列一直等待直到获取了请求的响应. 如果请求超时, 请求将立即被拒绝, 并且不会添加到队列中.

成功地将请求添加到队列后, 事件总线将触发一个事件. 分发服务器接收此事件并轮询队列. 此时, 将尝试创建一个会话.

如果所请求的功能不存在于任何已注册的节点中, 那么请求将立即被拒绝, 并且客户端将收到响应.

如果请求的功能与任何节点插槽的功能匹配, 分发服务器将尝试获取可用插槽. 如果所有插槽都很忙, 分发服务器将要求队列器将请求添加到队列前面. 分发服务器在请求重试间隔之后再次接收请求. 它将尝试重试, 直到请求成功或超时. 如果请求在重试或添加到队列前面时超时, 则其将被拒绝.

在获得可用的插槽和会话创建之后, 分发服务器通过事件总线将新会话响应传递给新会话队列器. 新的会话队列器将在接收到事件时响应给客户端.

事件总线

事件总线充当节点、分发服务器、新的会话队列器和会话表之间的通信路径. 网格通过消息进行大部分内部通信, 避免了昂贵的HTTP调用. 当以完全分布式模式启动网格时, 事件总线是应该启动的第一个组件.

网格中的角色

在网格3中, 组件是集线器和节点, 可以通过以独立模式启动网格来一起运行它们. Grid 4中提供了相同的概念, 可以通过对上述某些组件进行分组来运行集线器, 也可以在独立模式下一起运行所有组件.

Hub

集线器是以下组件的结合:

  • 路由器
  • 分发器
  • 会话集合
  • 事件总线

它启用传统集线器和节点(们)的设置.

Standalone

如前所述, 独立模式是所有组件的结合, 并且在用户看来, 它们作为一个组件执行. 这包括集线器的部分组件, 再加上一个节点. 在独立模式下启动后, 可以使用一个功能齐全的网格.