從實際運作的車隊取得近乎即時的信號,可為企業帶來多種好處。舉例來說,商家可以使用這些功能:
- 監控機群的效能,及早發現潛在問題
- 提供準確的預計到達時間和追蹤資訊,提升客服品質
- 找出並解決效率不彰的問題,降低成本
- 監控駕駛員行為並找出潛在危險,提升安全性
- 調整駕駛員的路線和行程,提高效率
- 追蹤車輛位置和服務時間,確保符合法規
本文說明開發人員如何將 Google 地圖平台的「Mobility 服務」(「Last Mile Fleet 解決方案」(LMFS) 或「On-demand Rides and Deliveries 解決方案」(ODRD)) 信號轉換為可採取行動的自訂事件。這篇文章也將介紹 GitHub 上提供的車隊事件參考解決方案的關鍵概念和設計決策。
本文件適用於:
- 熟悉 Google 地圖平台「行動服務」和其中一個核心元件「車隊引擎」的架構師。如果您是「移動服務」的新手,建議您根據需求熟悉最後一里車隊解決方案和/或隨選行程和運送解決方案。
- 熟悉 Google Cloud 的架構師。對於 Google Cloud 新手而言,建議您先使用「在 Google Cloud 建構串流資料管道」一文。
- 如果您鎖定其他環境或軟體堆疊,請著重瞭解 Fleet Engine 的整合點以及應考量的重要考量。
- 對探索車隊事件產生方式和用途感興趣的一般使用者。
閱讀完本文件後,您應該會對串流系統的關鍵元素和考量事項有基本瞭解,並瞭解 Google 地圖平台和 Google Cloud 的建構區塊,這些區塊組成了車隊事件參考解決方案。
車輛事件參考資料解決方案總覽
車隊事件參考解決方案是開放原始碼解決方案,可讓 Mobility 客戶和合作夥伴在 Fleet Engine 和 Google Cloud 元件上產生重要事件。目前,參考解決方案支援使用 Last Mile Fleet Solution 的客戶,後續也會支援叫車和外送服務。
解決方案會根據與工作或行程相關的特定資料變更,自動產生事件。您可以使用這些事件將通知 (例如以下內容) 傳送給相關人員,或觸發機群的其他動作。
- 工作到達時間的預估時間變更
- 任務到達時間的相對預估到達時間變更
- 距離工作抵達時間的剩餘時間
- 到達工作地點的剩餘距離
- TaskOutcome 狀態變更
您可以根據業務需求自訂參考解決方案的各個元件。
邏輯建構模塊
圖表:下圖顯示組成車隊事件參考解決方案的整體構件
參考解決方案包含下列元件:
- 事件來源:原始事件串流的來源。「Last Mile Fleet Solution」或「On-demand Rides and Deliveries Solution」都已整合 Cloud Logging,可將 Fleet Engine RPC 呼叫記錄轉換為可供開發人員使用的事件串流。這是要取用的核心來源。
- 處理:這個區塊會將原始 RPC 呼叫記錄轉換為狀態變更事件,並根據記錄事件串流進行運算。為了偵測這類變更,這個元件需要狀態儲存庫,以便將新收到的事件與先前事件進行比較,進而偵測變更。事件不一定會包含所有相關資訊。在這種情況下,這個區塊可能會視需要對後端進行查詢呼叫。
- 狀態儲存庫:部分處理架構會提供可自行持續存在的中繼資料。但如果沒有,為了自行儲存狀態,由於這些狀態應為車輛和事件類型的專屬值,因此 K-V 類型的資料持久性服務非常適合。
- Sink (自訂事件):應將偵測到的狀態變更提供給任何可從中受益的應用程式或服務。因此,將這項自訂事件發布至事件提交系統,以利後續使用,是自然的選擇。
- 下游服務:取用產生的事件,並採取專屬於您用途的動作。
服務選項
在導入「Last Mile Fleet Solution」或「On-demand Rides and Deliveries Solution」(將於 2023 年第 3 季推出) 的參考解決方案時,選擇「Source」和「Sink」的技術相當簡單。另一方面,「處理中」則有許多選項。參考解決方案已選擇下列 Google 服務。
圖表:下圖顯示實作參考解決方案的 Google Cloud 服務
雲端專案版面配置
建議您預設為多專案部署。這樣一來,Google 地圖平台和 Google Cloud 用量就能清楚區隔,並與您選擇的結帳安排綁定。
事件來源
「Last Mile Fleet Solution」和「On-demand Rides and Deliveries Solution」會將 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 做為初始版本的運算平台 (*)
- 無伺服器,可透過調整控件擴大或縮減規模,以便控管成本
- 使用 Java 做為程式設計語言,因為 Fleet Engine 相關 API 有用戶端程式庫,可讓您輕鬆實作
- Cloud Firestore 做為狀態儲存庫
- 無伺服器鍵/值儲存庫
- Cloud Pub/Sub 做為整合點,與上游和下游元件整合
- 鬆散耦合的近乎即時整合
函式可搭配預設設定使用,但也可以重新設定。設定參數會透過部署指令碼設定,並在對應的 Terraform 模組 README 中詳加說明。
*注意:這個參考解決方案預計會發布可協助滿足不同需求的替代實作項目。
部署作業
為使參考解決方案部署程序可重複、可自訂、可控制且安全,我們選擇了 Terraform 做為自動化工具。Terraform 是一項廣泛採用的 IaC (基礎架構即程式碼) 工具,可提供豐富的 Google Cloud 支援。
- Google Cloud Platform 供應商:由「Google Cloud Platform 供應商」支援的資源說明文件
- 使用 Terraform 的最佳做法:提供豐富的指南,說明如何在 Google Cloud 中採用最佳做法
- Terraform Registry:Google 和社群支援的其他模組
Terraform 模組
與其製作一個大型的單體參考解決方案部署模組,不如將可重複使用的自動化區塊實作為可獨立使用的 Terraform 模組。模組提供多種可設定的變數,其中大部分都有預設值,方便您快速上手,同時也能彈性根據需求和偏好自訂。
參考解決方案中的模組:
- Fleet Engine 記錄設定:自動設定 Cloud Logging 相關設定,以便與 Fleet Engine 搭配使用。在參考解決方案中,這項服務會用於將 Fleet Engine 相關記錄轉送至指定的 Pub/Sub 主題。
- 機群事件 Cloud 函式部署:包含函式程式碼部署範例,以及處理安全跨專案整合所需的權限設定自動化。
- 整個參考解決方案部署作業:呼叫前面兩個模組,並包裝整個解決方案。
安全性
我們採用 IAM 來落實最低權限原則,並遵循 Google Cloud 的安全性最佳做法,例如服務帳戶冒用。請參閱下列文章,進一步瞭解 Google Cloud 提供的功能,以便進一步控管安全性。
後續行動
您現在可以存取並進一步探索車隊事件參考解決方案。請前往 GitHub 開始使用。
附錄
收集需求
建議您在程序中盡早收集需求。
首先,請擷取詳細資料,瞭解您想瞭解或需要使用近乎即時事件的原因。以下問題可協助你釐清自己的需求。
- 事件串流需要哪些資訊才能發揮效用?
- 結果是否可以完全由 Google 服務中擷取或產生的資料產生?或者,是否需要透過整合式外部系統擴充資料?如果是,那是什麼系統?它們提供哪些整合介面?
- 貴商家想評估哪些指標?如何定義?
- 如果您需要計算跨事件的指標,需要哪種匯總?請嘗試安排邏輯步驟。(例如 在尖峰時段比較車隊子集的 ETA/ATA 與 SLO,以便在資源受限的情況下計算效能。)
- 您為何對事件為基礎的模型感興趣,而不是批次?這適用於低延遲 (行動號召) 還是鬆耦合整合 (靈活性)?
- 如果是低延遲,請定義「低」。分鐘?秒?是否為毫秒?延遲時間為何?
- 您是否已在團隊中投入技術堆疊和相關技能?如果有的話,請問是什麼,以及提供哪些整合點?
- 目前的系統是否無法滿足特定需求,或在處理來自車隊的事件時可能會遇到困難?
設計原則
有時,遵循某些思考過程會很有幫助。這有助於做出一致的設計決策,尤其是當您有許多選項可供選擇時。
- 預設為更簡單的選項。
- 預設為縮短創造價值的時間。程式碼較少,學習曲線較短。
- 針對延遲和效能,請設法達到您設定的標準,而非達到最佳化。此外,請避免過度最佳化,因為這通常會導致增加複雜度。
- 費用也是如此。控制成本。您可能還不願意使用價值高但相對較昂貴的服務。
- 在實驗階段,縮小規模的必要性與擴大規模一樣重要。建議您考慮採用彈性平台,以便在達到上限時向上擴充,並在達到下限時向下縮減 (最好是降至零),這樣一來,您在閒置時就不會產生費用。在您確定需要時,可以考慮在後續階段採用高效能全天候基礎架構。
- 觀察及評估,以便日後找出需要進一步改善的部分。
- 保持服務鬆耦合。這樣之後就能更輕鬆地逐一替換。
- 最後,安全性不能鬆懈。如果您是在公有雲環境中運作的服務,系統就沒有不安全的門。
串流概念
如果您是事件導向或串流處理的新手,請注意以下幾個重要概念,其中有些可能與批次處理截然不同。
- 擴充:與批次處理不同,您通常會清楚瞭解要處理的資料量,但在串流中,您無法掌握這類資訊。城市中的交通壅塞可能會導致特定區域突然產生大量事件,而您仍需要處理這些事件。
- 分割時間:您通常會將時間軸上的事件分組為較小的「時間窗口」,以便做為計算單位。您可以選擇各種時間區間策略,例如「固定時間區間 (例如每個日曆日)」、「滑動式時間區間 (過去 5 分鐘)」和「工作階段時間區間 (這趟行程期間)」。回溯期越長,產生結果的延遲時間就越長。選擇符合需求的正確模型和設定。
- 觸發事件:在某些情況下,您可能別無選擇,只能使用較長的時間間隔。但您還是不想等待視窗的尾端產生事件,而是在兩者之間發出中繼結果。如果用途是先傳回快速結果,然後再修正此概念,即可實作這個概念。假設您在提交內容完成 25%、50% 和 75% 時,發出中間狀態。
- 排序:事件不一定會按照產生順序傳送至系統。特別適用於涉及透過行動網路進行通訊的用途,因為這會增加延遲時間和複雜的路徑。您必須瞭解「事件時間」(事件實際發生的時間) 與「處理時間」(事件到達系統的時間) 之間的差異,並據此處理事件。一般來說,您應該根據「事件時間」處理事件。
- 訊息傳遞 - 至少傳送一次與精確傳送一次:不同的事件平台對這兩種傳遞方式提供的支援有所不同。視用途而定,您需要考慮重試或去重策略。
- 完整性:就像變更排序一樣,訊息也有可能遺失。這可能是因為應用程式和裝置因電池電量不足而關閉、手機意外損壞、在隧道中連線中斷,或是收到的訊息不在可接受的時間範圍內。不完整的資料會對結果造成什麼影響?
以下僅列舉部分例子,並未包含所有可能情況。以下是一些強烈推薦的閱讀材料,有助於您進一步加深對各項內容的瞭解。
貢獻者
本文件由 Google 維護。下列提供者原本可以撰寫您的簽名。
主要作者:
- Mary Pishny | Google 地圖平台產品經理
- Ethel Bao| Google 地圖平台軟體工程師
- Mohanad Almiski | Google 地圖平台軟體工程師
- Naoya Moritani | Google 地圖平台解決方案工程師