规划和设计 ArcGIS GeoEvent Server 系统的系统架构时要考虑的关键概念之一是工作负载分离;在 GeoEvent Server 术语中,其称为事件分区。在事件分区中,应将每个事件流放在下表中的正确框内,并且理想的生产系统架构应计划使用单独的 GeoEvent Server 系统定位每个像元。使用此策略,可以部署优化的系统来应对不同事件流的特定挑战。最佳的系统架构将需要适应系统管理、许可和硬件成本的复杂性。
在生产环境中,您应该尽可能对您的独立 GeoEvent Server 计算机的每个框中共有的事件流进行分区。要考虑的潜在方案共有四种,但是,下面讨论的其他分区策略可能会增加方案的数量。下面将对构成每个基本方案的概念进行更详细的概述和讨论。
- 方案 1 – 推送事件 + 依赖于历史
- 方案 2 – 拉动事件 + 依赖于历史
- 方案 3 – 推送事件 + 独立于历史
- 方案 4 – 拉动事件 + 独立于历史
活动交付
GeoEvent Server 使用推送或拉动接收事件流。
推送事件
例如,当使用从 TCP 套接字接收文本或在 REST 端点上接收 JSON 输入连接器时,数据将被推送到 GeoEvent Server。创建输入后,它将等待数据到达。数据源生成数据并将每个事件(或事件集)推送到 GeoEvent Server。这种区别很重要,因为它允许系统架构师设计一个系统,以用于拦截传入的消息并根据所选策略为其设置路径。
提取事件
例如,当使用轮询 XML 的外部网站或轮询 ArcGIS Server 要素输入连接器时,GeoEvent Server 将提取(或轮询)事件数据。定期将请求发送到数据源,并且响应包括一个或多个要处理的事件。轮询数据时,无法在消息到达 GeoEvent Server 之前拦截消息。在这种情况下,考虑用于数据分区和处理事件重复的结构策略很重要。
事件历史依赖性
您对高可用性架构的选择可能会受到事件数据的历史依赖性的影响。
独立于历史的事件
GeoEvent Server 中的大部分实时处理和分析都是独立于历史的。每个事件都是单独处理的,无需了解先前的事件。每个事件都被视为一个独立的实体,可以使用相同的配置在任意 GeoEvent Server 实例上进行处理。在这些情况下,用于跨多台计算机进行事件负载均衡的传统策略可以很好地运行。
依赖历史的事件
在 GeoEvent Server 中执行的某些事实处理和分析需要了解先前事件(例如进入和退出空间操作)。在确定当前事件的准确结果之前,两者都需要了解先前事件的位置。由于 GeoEvent Server 未提供在计算机之间共享此历史事件上下文的方法,因此必须将事件路由到具有该事件先前知识的计算机(基于其追踪 ID)。关于系统架构,必须具有一个高度可用的系统专用于基于事件的追踪 ID 进行路由事件。
其他工作负载分离注意事项
除了上述在不同系统之间分区事件的策略之外,回顾数据本身的性质也非常重要。通常,您会发现事件数据的不同团队、工程或地理位置可以提供有关如何分区数据的更多见解。例如,不同的团队或工程可能对数据处理有不同的要求,或者如果数据在地理位置上位于较大区域内,则可以将其划分为多个区域。
事件负载
在对事件流进行分区时,需要考虑的第一个概念是事件负载。事件流的负载由数据到达输入连接器的方式和速率,以及在特定时间段内到达的事件数量来定义。建议您基于特定事件负载类型(均匀负载与不均匀负载),将事件流划分为单独的 GeoEvent Server 系统。在事件处理期间,不均匀的负载可能需要更多的系统资源,并导致均匀流负载上的资源争用。因此,建议您在两个不同的系统上分开均匀和不均匀的负载事件流。
均匀事件负载
均匀事件负载以一致均匀的速度将事件传递到 GeoEvent Server。通常,恒定速率生成数据的系统发送均匀事件负载。例如:
- 自动车辆位置 (AVL) 事件流,其中每辆车每 30 秒报告一次其位置。
- 流表网络,其中每个表每 60 分钟报告一次流高数据。
处理事件负载时,预期 GeoEvent Server 将以恒定的水平运行。在这种情况下,不会出现 CPU 或内存峰值的情况。因此,应将系统设计为负载均匀。
不均匀事件负载
在事件负载不均匀的情况下,事件以不均匀的速率到达 GeoEvent Server 输入。这些激增类型的事件负载可能导致在输入的消息队列中存在大量事件排队等待处理。例如:
- 一个闪电追踪系统,用于报告整个区域的雷击情况。
- 租赁摩托车系统,在每台摩托车投入使用时都会推送摩托车状态。
在处理不均匀事件负载时,期望在每个激增事件集到达时大量利用系统资源。在此期间,CPU 可能会飙升至 100%,内存可能会暂时增加,并且 Kafka 主题(消息队列)将需要更多的磁盘空间(多达默认值的 3 或 4 倍)。在处理过程中,系统上的其他事件流可能会因为 GeoEvent Server 处理大量事件而出现资源短缺情况。根据您处理此数据的目标,可以设计一个系统以在下一次激增到来之前有足够的时间处理事件激增(最低系统要求;及时处理)。或者,可以将其他资源分配给系统,以能够以所需的最大速率(最大系统要求;关键事件处理)进行事件处理。