收藏
评论

一文揭秘深圳机场智慧航旅服务中的黑科技官方

12月10日,在2019年民航中南地区智慧机场建设深圳会议期间,深圳机场联手腾讯云打造的“深圳机场”小程序首次面向公众进行成果展示。

作为国内首个根据旅客乘机行程动线精准推荐相应服务的机场小程序,“深圳机场”覆盖出港、进港、中转、接送机四大类出行场景,提供包括室内导航、交通出行、智能客服、行李跟踪等31个子服务,为旅客提供场景化、个性化、智能化的全流程精准服务。

这个智慧机场小程序里,藏着怎样的黑科技呢?



一、全流程,Only OneID

为了提升深圳机场的整体服务效率,腾讯云为深圳机场构建了一套【OneID全流程旅客出行服务系统】。顾名思义,OneID,也就是一个旅客ID,贯穿旅客在机场的出港、进港、中转、接送机四大类出行场景,提供包括室内导航、交通出行、智能客服、行李跟踪等31个子服务。

通过采用OneID旅客数字化身份的技术手段,依托小程序、APP、公众号三端,统一入口,提供机场各环节全流程的旅客便捷服务;后台侧打通各个相关应用系统,统一旅客身份数据,实现旅客行为追踪,并运用大数据和AI技术,为旅客提供场景化、个性化、智能化的全流程精准服务。

此外,【OneID全流程旅客出行服务系统】建立了完善的旅客数据安全保障机制,提供数据加密,授权,认证,审计,脱敏等全生命周期的安全保证手段;旅客数据系统全面符合GDPR等数据安全相关的行业及国际标准规定。

整体架构



小程序开发上线效率提升99%,深圳机场深圳速度

快速运营

这里讲的快速运营指小程序端可以配合运营需要,快速的迭代产品形态,但众所周知,微信小程序的发版每次都是需要微信平台审核才可以发版的,短则2小时,长则2天不等。

为此,整个小程序上的图标界面表现,基本都是可配置化的,比如行程动态,服务等。目前图标类的服务都是存储在云开发的云存储中,路径保存在云存储里,数据保存在云数据库里,小程序端调用云开发的云函数,云函数去数据库里取出数据返回给小程序端,小程序端展示,并在本地 storage 里做缓存。

日志系统

云开发

一图胜千言,如上图,我们传统的做法就是自己搭建 ES 日志系统,然后自己写客户端上报日志,这里涉及到好多的问题,比如失败重试,性能,对现在服务器压力等都需要考虑,包括 ES 机器的容量大小,一整套玩下来,估计得一周。小程序云开发提供了高级日志方式,在云函数里直接引入wx-server-sdk,然后直接使用如下语句,就可以打印错误和正常日志了。

1 const objCloud = require(‘wx-server-sdk’);

2

3 objCloud.init({env:ENV})

4 const objLog = objCloud.logger() 

5 objLog.info({}); objLog.error({});

这样就可以打印错误和正常日志了。

日志被打到小程序云开发的日志系统中,我们可以非常方便地在小程序管理控制面板按不同的条件来搜索日志。当前支持结构化的查询日志,深圳机场项目目前也是主要上报这两类重要日志,一类是小程序云调用后台接口时的日志,另一种是小程序端调用云函数的日志,都会最终通过一个云函数 log 把日志上报到小程序云提供的日志系统。

日志上报协议如下:


秒出/缓存

本项目的缓存主要分为两块,一块是客户端缓存 ,缓存的主要是运营性及小程序界面配置类的数据,这些数据更新周期长,影响效果大。另一块则是应用层调用云数据库的缓存,主要是把数据通过key,value 的方式缓存在内存里。每个云函数固定为10个实例在支撑,每个实例在更新云函数时,才会销毁,从而缓存失效,或是在管理端手动更新缓存校验码实现刷新缓存。

关于缓存的策略及异常设计这里补充几点:

  1. 缓存过期:目前是手动在管理后台更新功能模块的缓存,以及如果云函数代码有更新,就会更新缓存。            
  2. 缓存命中:根据客户端带上来的 key 如果和当前实例内存里的不一样,则认为没有命中,则从数据库里直接获取,并生成新的缓存。        
  3. 缓存雪崩:操作时分批在后台手动更新缓存,为每个云函数固定保留10个实例。以防止缓存雪崩。         
  4. 缓存穿透:对于数据一直在数据库里查不到,缓存一直生成失败的情况,超过5次则直接保存空值到缓存,并上报生成缓存失败到告警系统。            
  5. 缓存刺穿:对于高并发情况,一瞬间请求量非常大,缓存没命中,数据压力曝增。记录每个时间段访问量,每次在手动更新缓存时,避开访问高峰期。根据并发峰值,增加固定云实例保留数。


环境

当前云开发的云函数,如果一同步就会直接同步到现网,从而影响到功能,所以我们在开发的时候,就要区分环境来发布。当前我们为云函数创立了三个环境:开发环境,预发布环境,生产环境。预发布环境和生产环境是保持一致,连接的资源都是真实的,只是一个是面向测试,一个是面向广大现网用户。在小程序运行时,会根据全局变量__wxConfig.envVersion 来判断当前是什么环境,从而自动连接相应的小程序云环境。这样避免了一直的更改环境变量,一不小心新加入的开发者把测试环境变量带到了生产环境去,从而引发事故。


管理端

管理端主要是实现各种运营数据的管理,包括增删修改查,主要逻辑是管理端引入小程序云 SDK,通过这个 SDK 可以方便快捷的查询云数据库数据,及把云资源发布到小程序云上,修改云数据库数据。

管理端目前功能实现如下:



三、小结

整个深圳机场项目的应用层都是架构在小程序云开发上,该层承载着脱密,组装,监控,日志,运营逻辑,以及与微信对接的业务逻辑,相比于传统应用层,其响应更快。

此外,借助云开发的serverless框架, 无需部署应用层和 容器, 可以直接进入开发,节省运维人力。并从日志系统搭建、获取用户登录态、手机号等多种应用场景,帮助业务大幅提升开发效率,以获取登录态、获取手机号功为例能从1天缩短到5分钟。日志系统无需自己搭建拿来即用,节省了至少5天人日。

当前我们整个项目总共实现了25个云函数,未来我们将基于云开发实现 更多的业务云函数。

最后一次编辑于  2020-11-03
赞 0
收藏

1 个评论

  • 吴忠辉
    吴忠辉
    2020-12-12

    “应用层调用云数据库的缓存”,“10个实例”怎么保证,缓存的数据一致的。有没有示例代码给参考下

    2020-12-12
    赞同
    回复
登录 后发表内容

云开发企业案例介绍

课程标签