一文為你揭秘深圳機場智慧航旅服務中的黑科技
- 2020 年 3 月 31 日
- 筆記
12月10日,在2019年民航中南地區智慧機場建設深圳會議期間,深圳機場聯手騰訊雲打造的「深圳機場」小程式首次面向公眾進行成果展示。 作為中國首個根據旅客乘機行程動線精準推薦相應服務的機場小程式,「深圳機場」覆蓋出港、進港、中轉、接送機四大類出行場景,提供包括室內導航、交通出行、智慧客服、行李跟蹤等31個子服務,為旅客提供場景化、個性化、智慧化的全流程精準服務。
這個智慧機場小程式里,藏著怎樣的黑科技呢?
一、全流程,Only OneID
為了提升深圳機場的整體服務效率,騰訊云為深圳機場構建了一套【OneID全流程旅客出行服務系統】。顧名思義,OneID,也就是一個旅客ID,貫穿旅客在機場的出港、進港、中轉、接送機四大類出行場景,提供包括室內導航、交通出行、智慧客服、行李跟蹤等31個子服務。
通過採用OneID旅客數字化身份的技術手段,依託小程式、APP、公眾號三端,統一入口,提供機場各環節全流程的旅客便捷服務;後台側打通各個相關應用系統,統一旅客身份數據,實現旅客行為追蹤,並運用大數據和AI技術,為旅客提供場景化、個性化、智慧化的全流程精準服務。

此外,【OneID全流程旅客出行服務系統】建立了完善的旅客數據安全保障機制,提供數據加密,授權,認證,審計,脫敏等全生命周期的安全保證手段;旅客數據系統全面符合GDPR等數據安全相關的行業及國際標準規定。
▌整體架構

二、小程式開發上線效率提升99%,深圳機場深圳速度
▌快速運營
這裡講的快速運營指小程式端可以配合運營需要,快速的迭代產品形態,但眾所周知,微信小程式的發版每次都是需要微信平台審核才可以發版的,短則2小時,長則2天不等。
為此,整個小程式上的圖標介面表現,基本都是可配置化的,比如行程動態,服務等。目前圖標類的服務都是存儲在雲開發的雲存儲中,路徑保存在雲存儲里,數據保存在雲資料庫里,小程式端調用雲開發的雲函數,雲函數去資料庫里取出數據返回給小程式端,小程式端展示,並在本地 storage 里做快取。
▌日誌系統

▌雲開發
一圖勝千言,如上圖,我們傳統的做法就是自己搭建 ES 日誌系統,然後自己寫客戶端上報日誌,這裡涉及到好多的問題,比如失敗重試,性能,對現在伺服器壓力等都需要考慮,包括 ES 機器的容量大小,一整套玩下來,估計得一周。小程式雲開發提供了高級日誌方式,在雲函數里直接引入wx-server-sdk,然後直接使用如下語句,就可以列印錯誤和正常日誌了。
const objCloud = require(『wx-server-sdk』); objCloud.init({env:ENV}) const objLog = objCloud.logger() objLog.info({}); objLog.error({});
這樣就可以列印錯誤和正常日誌了。
日誌被打到小程式雲開發的日誌系統中,我們可以非常方便地在小程式管理控制面板按不同的條件來搜索日誌。當前支援結構化的查詢日誌,深圳機場項目目前也是主要上報這兩類重要日誌,一類是小程式雲調用後台介面時的日誌,另一種是小程式端調用雲函數的日誌,都會最終通過一個雲函數 log 把日誌上報到小程式雲提供的日誌系統。 日誌上報協議如下:


▌秒出/快取

本項目的快取主要分為兩塊,一塊是客戶端快取 ,快取的主要是運營性及小程式介面配置類的數據,這些數據更新周期長,影響效果大。另一塊則是應用層調用雲資料庫的快取,主要是把數據通過key,value 的方式快取在記憶體里。每個雲函數固定為10個實例在支撐,每個實例在更新雲函數時,才會銷毀,從而快取失效,或是在管理端手動更新快取校驗碼實現刷新快取。
關於快取的策略及異常設計這裡補充幾點:
- 快取過期:目前是手動在管理後台更新功能模組的快取,以及如果雲函數程式碼有更新,就會更新快取。
- 快取命中:根據客戶端帶上來的 key 如果和當前實例記憶體里的不一樣,則認為沒有命中,則從資料庫里直接獲取,並生成新的快取。
- 快取雪崩:操作時分批在後台手動更新快取,為每個雲函數固定保留10個實例。以防止快取雪崩。
- 快取穿透:對於數據一直在資料庫里查不到,快取一直生成失敗的情況,超過5次則直接保存空值到快取,並上報生成快取失敗到告警系統。
- 快取刺穿:對於高並發情況,一瞬間請求量非常大,快取沒命中,數據壓力曝增。記錄每個時間段訪問量,每次在手動更新快取時,避開訪問高峰期。根據並發峰值,增加固定雲實例保留數。
▌環境
當前雲開發的雲函數,如果一同步就會直接同步到現網,從而影響到功能,所以我們在開發的時候,就要區分環境來發布。當前我們為雲函數創立了三個環境:開發環境,預發布環境,生產環境。預發布環境和生產環境是保持一致,連接的資源都是真實的,只是一個是面向測試,一個是面向廣大現網用戶。在小程式運行時,會根據全局變數__wxConfig.envVersion 來判斷當前是什麼環境,從而自動連接相應的小程式雲環境。這樣避免了一直的更改環境變數,一不小心新加入的開發者把測試環境變數帶到了生產環境去,從而引發事故。
▌管理端
管理端主要是實現各種運營數據的管理,包括增刪修改查,主要邏輯是管理端引入小程式雲 SDK,通過這個 SDK 可以方便快捷的查詢雲資料庫數據,及把雲資源發布到小程式雲上,修改雲資料庫數據。
管理端目前功能實現如下:

三、小結
整個深圳機場項目的應用層都是架構在小程式雲開發上,該層承載著脫密,組裝,監控,日誌,運營邏輯,以及與微信對接的業務邏輯,相比於傳統應用層,其響應更快。
此外,藉助雲開發的serverless框架, 無需部署應用層和 容器, 可以直接進入開發,節省運維人力。並從日誌系統搭建、獲取用戶登錄態、手機號等多種應用場景,幫助業務大幅提升開發效率,以獲取登錄態、獲取手機號功為例能從1天縮短到5分鐘。日誌系統無需自己搭建拿來即用,節省了至少5天人日。
當前我們整個項目總共實現了25個雲函數,未來我們將基於雲開發實現 更多的業務雲函數。
雲開發(CloudBase)是一款雲端一體化的產品方案 ,採用 serverless 架構,免環境搭建等運維事務 ,支援一雲多端,助力快速構建小程式、Web應用、移動應用。
技術文檔:https://www.cloudbase.net/
微信搜索:騰訊云云開發,獲取項目最新進展