来自地面运营的舰队的近乎实时信号有助于 以多种方式发展业务。例如,商家可以使用这些信息来:
- 监控设备群的性能并及早发现潜在问题 已开启
- 提供准确的预计到达时间和跟踪信息,改善客户服务
- 通过发现并解决效率低下问题来降低成本
- 监控驾驶员的行为并发现潜在作用,提高安全性 危险
- 优化司机路线和时刻表,提高效率
- 跟踪车辆位置和服务时间,以遵守相关法规
本文档说明了开发者如何才能从 Google 地图中转变信号 平台的“移动性 服务” (“最后一英里舰队) 解决方案” (LMFS) 或“按需乘车和送货 解决方案” 转换为可操作的自定义事件。主要概念和设计决策 舰队事件参考 解决方案 GitHub 上提供的其他示例。
本文档与以下内容相关:
- 熟悉 Google Maps Platform 的“移动性 服务” 及其核心组件之一“Fleet Engine”。刚接触“移动办公”功能的新手 建议您先熟悉一下 Last Mile Fleet 解决方案 和/或按需乘车和送货 解决方案, 应用。
- 熟悉 Google Cloud 的架构师。对于刚接触 Google Cloud 的用户, 在 Google 上构建流式数据流水线 Cloud 。
- 如果您以其他环境或软件栈为目标,请专注于 了解 Fleet Engine 的集成点和重要注意事项, 这应该仍然适用
- 通常有兴趣了解舰队事件是如何 生成式 AI 的生成和使用。
学完本文档后,您应该对 关键元素和注意事项,以及如何构建 构成舰队事件的 Google Maps Platform 和 Google Cloud 的屏蔽对象 参考信息 解决方案。
舰队事件参考解决方案概览
舰队事件参考解决方案是一种开源解决方案, 助力移动客户和合作伙伴在 Fleet Engine 上生成关键事件 和 Google Cloud 组件。如今,参考解决方案 使用支持按需叫车和配送的最后一公里舰队解决方案 。
该解决方案会根据特定数据的更改自动生成事件 与任务或行程相关联。您可以使用这些事件发送通知 例如向利益相关方发送以下内容或为您的舰队触发其他操作。
- 任务到达时间变更
- 相对于任务到达时间的相对 ETA 变化
- 距离任务到达的剩余时间
- 距离任务到达的剩余距离
- TaskOutcome 状态更改
参考解决方案的每个组件均可定制,以适应您的业务 需求。
逻辑组成要素
示意图:下图显示了 设置舰队事件参考解决方案
参考解决方案包含以下组件:
- 事件来源:原始事件流的来源。“Last 里程车队 解决方案” 或“按需乘车和送货 解决方案” 与 Cloud Logging 集成,有助于转变 Fleet Engine RPC 调用 事件流这是 。
- 处理:原始 RPC 通话记录会被转换为状态变化事件
用于对日志事件流进行计算。要检测此类
但该组件需要状态存储
可以与之前的应用进行比较,以检测变化。事件有时未必如此
包含所有感兴趣的信息。在这种情况下,此屏蔽设置可能会
可以根据需要查找对后端的调用。
- 状态存储空间:一些处理框架提供中间数据 自身的持久性但如果不是,为了自行存储状态, 因为这些属性对于车辆和事件类型是唯一的,因此 K-V 类型 数据持久性服务是不错的选择
- 接收器(自定义事件):检测到的状态更改应可供以下对象使用 任何可从中受益的应用或服务因此, 将此自定义事件发布到事件传递系统的自然选择, 下游用量。
- 下游服务:使用生成的事件并接收 应用场景特有的操作
服务选择
在实施“最后一英里舰队”的参考解决方案时, 解决方案” 或“按需乘车和送货 解决方案” (将于 2023 年第 3 季度末推出),“来源”的技术选择和“接收器”是 简单明了。另一方面,“处理中”提供了一系列选项 参考解决方案已选择以下 Google 服务。
示意图:下图显示了用于实现 参考解决方案
Cloud 项目布局
我们建议您默认使用多项目部署。就是这样 Google Maps Platform 和 Google Cloud 的消耗可以完全分开, 与您选择的结算协议绑定。
事件来源
“最后一英里舰队 解决方案” 和“按需乘车和送货 解决方案” 将 API 请求和响应载荷写入 Cloud Logging。Cloud Logging 将日志传送至 选择一项或多项服务路由到 Cloud Pub/Sub 是理想的选择 并允许将日志转换为事件流,而无需编写代码。
- 日志记录 |舰队 效果 (适用于 LMFS 用户)
- 日志记录 |行程和订单 进度 (面向 ODRD 用户)
- 查看路由到以下对象的日志: Pub/Sub:日志记录 → Pub/Sub 集成概览
接收器
在 Google Cloud 中,Cloud Pub/Sub 是首选的近乎实时的消息传送系统。就像 将来自来源的事件传送到 Pub/Sub,而自定义事件 发布到 Pub/Sub 以供下游使用。
正在处理
以下组件在事件处理中会起到一定作用。与其他 处理组件完全无服务器,
- Cloud Functions:作为计算资源
初始版本的平台 (*)
<ph type="x-smartling-placeholder">
- </ph>
- 无服务器,可利用扩缩控制机制进行扩缩,从而管理费用
- 考虑到有客户端可用,将 Java 作为编程语言 Fleet Engine 相关 API 的库,这有助于简化 实现
- Cloud Firestore 作为状态存储区
<ph type="x-smartling-placeholder">
- </ph>
- 无服务器键值对存储区
- 使用 Cloud Pub/Sub 作为集成点
包括上游和下游组件
<ph type="x-smartling-placeholder">
- </ph>
- 近乎实时的松散耦合式集成
这些函数可按默认设置原样使用,但也可以 重新配置。通过部署脚本和 相应的 Terraform 模块自述文件中对此进行了详细介绍。
*注意:本参考解决方案计划发布 可帮助满足不同的要求
部署
为了使参考解决方案部署过程可重复、可自定义、 由于源代码可控制且安全,因此选择 Terraform 作为 工具。Terraform 是一种被广泛采用的 IaC(基础设施即代码)工具,具有丰富的 。
- Google 云端平台 Provider: “Google Cloud Platform 提供商”支持的资源文档
- 使用 Terraform: 有关如何在 Google Cloud 中以最佳方式采用的丰富指南
- Terraform Registry: Google 和社区支持的更多模块
Terraform 模块
您不必构建大型单体式参考解决方案部署模块, 可重复使用的自动化块以 Terraform 模块的形式实现, 独立使用。模块提供了各种各样的可配置变量,大多数 其中每个都有默认值,方便您快速上手 灵活地根据您的需求和偏好进行自定义。
参考解决方案中包含的模块:
- Fleet Engine 日志记录配置:自动执行 Cloud Logging 相关操作 以便与 Fleet Engine 搭配使用。在参考解决方案中, 用于将 Fleet Engine 相关日志路由到指定的 Pub/Sub 主题。
- 舰队事件 Cloud Functions 函数部署:包含示例函数 代码部署,并处理权限设置的自动化 是安全的跨项目集成所必需的。
- 完整参考解决方案部署:调用前面的两个模块并 包含整个解决方案。
安全
采用 IAM 来应用最小权限原则以及 Google Cloud 的 安全最佳实践(例如服务账号模拟)。请参考 阅读以下文章,更好地了解 Google Cloud 可为您提供哪些功能 加强对安全性的控制
后续操作
现在,您可以访问并进一步探索舰队事件参考。 解决方案。 前往 GitHub 。
附录
收集您的要求
我们建议您在流程的早期阶段收集您的要求。
首先,详细说明您感兴趣或需要使用 近乎实时的事件。下面这些问题可帮助您明确自己的需求。
- 事件流需要哪些信息才有用?
- 结果能否完全根据 Google 服务?还是通过集成的外部系统丰富数据 吗?如果是,这些系统是什么,有哪些集成接口 提供哪些服务?
- 作为一家企业,您希望衡量哪些指标?怎么样 ?
- 如果您需要跨事件计算指标, 需要吗?尝试安排逻辑步骤。(例如比较 在高峰时段根据 SLO 的预计到达时间/ATA 计算性能)
- 为什么您对基于事件的模型感兴趣,而不是对批量模型感兴趣?这是
缩短延迟时间(操作时间)或松散耦合的集成
(敏捷性)?
- 如果要实现低延迟,请定义“低”。分钟?秒?亚秒?以及 延迟时间?
- 作为一名技术人才,您是否在技术栈和相关技能方面进行了投资
团队?如果是,它是什么?它提供了哪些集成点?
- 是否有任何要求是您当前的系统无法满足或可能满足的要求 为处理来自舰队的事件而苦恼?
设计原则
遵循一些思维流程是非常有用的。这有助于 做出一致的设计决策,尤其是当您 。
- 默认为更简单的选项。
- 默认为较短的价值实现时间。代码更少,学习曲线更短。
- 在延迟时间和性能方面,尽量达到您设置的标准,而不是上限 优化。还要避免过度优化,因为这通常会导致 复杂性。
- 费用也是如此。确保费用合理。您可能还没有到达 表明您可以承诺使用高价值但相对更高的 服务。
- 在实验阶段,纵向缩容和纵向扩容可能同样重要。 考虑采用一个能够灵活扩容的平台,既能灵活控制上限,又能 缩小(最好为零),这样您就不会在无事可做的情况下花钱。 我们日后可以考虑 对它的需求更有信心时
- 观察并衡量,以便日后确定需要进一步改进的地方。
- 保持服务的松散耦合。这样就能更轻松地切换各个部分 。
- 最后但同样重要的一点是,安全性不能松散。作为在 因此,系统不应存在任何不安全的门。
流式传输概念
如果您比较不熟悉基于事件或流式传输,不妨先了解一些重要概念, 其中一些方法与批处理有很大不同。
- 扩展:与批处理相反,批量处理通常具有良好的 了解要处理的数据量,在流式传输中是不可能的。A 路 城市里的拥堵就可能突然之间 产生很多事件 而且你仍然需要能够进行处理
- 数据选取:通常不是逐个处理事件,而是 您希望将时间轴上的事件分组到较小的“窗口”中为 一种计算单位。数据选取策略有很多种,例如 “固定窗口(例如每日历日)”、“滑动窗口(过去 5 天) 分钟)、“会话窗口(本次行程期间)”等,您应选择 。窗口越长,生成结果的延迟越长。 选择合适的模型和配置,以满足您的需求。
- 触发:在某些情况下,您只能采取 相对较长的时间窗口尽管如此,您还是不想等到最后 窗口来生成事件,而是发出中间结果 中间。此概念可以用于 先返回快速结果,稍后再进行更正。 想象一下,当某个订单的完成度达到 25%、50%、75% 时, 。
- 排序:事件不一定按事件先后顺序到达系统 。尤其是对于需要通过网络进行通信的用例, 增加延迟和复杂的路由路径。您需要 了解“事件时间”和(当该事件实际上 和“处理时间”(当事件到达系统时)并处理 事件。一般来说,您需要根据“事件” 。
- 消息传送 - 至少一次与正好一次:事件不同 平台有不同的支持。根据您的使用场景 则需要考虑重试或重复信息删除策略。
- 完整性:就像顺序更改一样,可能 消息会丢失。这可能是因为应用和设备关机,原因如下: 设备的电池续航时间, 手机意外损坏, 丢失 连接性的消息,或仅收到消息,但 排除在可接受的范围内信息不完整会如何影响您的结果?
此处并未列出所有情况,仅提供简介。以下是一些 这些推荐阅读内容有助于您进一步加深对每项内容的理解。
贡献者
本文档由 Google 维护。它最初是由以下贡献者编写的。
主要作者:
- Mary Pishny |产品 Google Maps Platform 经理
- Ethel Bao|软件 Google Maps Platform 工程师
- Mohanad Almiski | Google Maps Platform 软件工程师
- Naoya Moritani |解决方案工程师 Google Maps Platform