旨在分享,不是广告.
好快,我这个野路子在物联网这个领域工作快两年了.很久前就有“在物联网实践”分享的想法,但又怕经验不足,写出啥东西.今天还是鼓起勇气写出来,下面是我在日活跃7000+物联网设备数据落地的一些实践,希望能给像我这样野路子填填坑,有不好的地方欢迎大家指出.
实践基于阿里云物联网平台,分为四块内容:
设备接入到物联网平台和我们日常打电话有点相似,在拨号前,会指定一个号码,并借助“语音”这个媒介传递,沟通双方的心中所想.这个号码标识了我们要沟通的对象,而不是给一个不知道的人拨号.物联网设备接入到物联网中也有自己的身份ID,基于业务需求给他定义属性,也就是这个设备是谁,能采集那些数据.赋予设备的这些抽象,在物联网平台分别称为**“设备证书”、“物模型”**.有了这两样东西,我们可以基于平台提供的SDK,或基于mqtt、https、CoAP这些开发协议按照官方数据协议,将设备连上物联网平台.但绝大多数情况下,有很多设备是不具备通信能力的,这个时候就需要借助一台有具有通信能力的设备专门来帮助这样类似的设备完成,数据、事件上报的工作,并且具备管理设备的基础能力,物联网平台上,它叫做“网关”.虽然设备间存在通信能力强弱的问题,但他们的接入流程都大体一致,都需要预先在物联网平台上完成注册,得到设备证书,才能接入平台,实现数据、事件上报的能力.设备接入更多细节可以见(阿里云物联网平台)
数据接入到物联网平台后,我们可以基于平台自身的规则引擎将数据转发出来,官方提供了很多通道:
几乎涵盖了阿里云现在所能提供的产品.下面就我负责的业务场景分享下这个环节上遇到的一些问题.我的工作是将设备上报的数据落地TableStore中.设备端数据有如下几个特点:
1.设备会定时上报数据,只会在固定时间,流量比较大
2.不通过网时会缓存数据,网络可用后,会一次性上报,有突发流量
3.有的数据需要做一定处理,才能入库
为了解决数据消费能力问题,队列肯定得安排上;此外解决了消费能力问题,还需要解决数据实时性问题,不然会出现,设备都是同一起上报数据,有的时候在云端马上就能看到了,有的设备要等了很久才能看到数据.为了尽可能提供消息延迟,得有尽多的消费端,需要根据消息量弹性启动,以减少不必要的资源浪费.要满足这个需求.一般大后台只要具备弹性部署,都可以完成这个功能,但无服务化(Serverless)更适合,启动一个大模块和启动一个函数,不用说,后者肯定更香.能节省更多的资源,响应速度也会更快.在阿里云服务中,有一个产品,叫做函数计算,他可以满足我的诉求,所以在这里我使用了它.
设备在线升级.现在已经不是一个新鲜的话题.但值得一提.没有这个东西,每次升级都跑去现场,那真的是很难受.
由于我们的业务处于起步阶段,很多东西都在尝试,一些新的功能也就没有收费,都是按照甲方爸爸的要求来.换来客户也会造成损失.但也需要控制住.针对这个情况,我在函数计算服务中,增加了流量监控大盘,并将告警接入到钉钉,获得第一时间的告警通知,第一时间锁定是那些设备流量异常.
在开发上,我们除了满足功能的需求,还需要更多的关心对功能的监控,出了问题能够快速响应.