分享人:弦望 解决方案架构师
墨飏 产品专家
正文:本文从三部分介绍智能家电利用Serverless获取天气信息最佳实践。
Ÿ 最佳实践原理讲解
Ÿ 核心产品物函数计算讲解
Ÿ 最佳实践系统搭建
一、最佳实践原理讲解
1)场景描述
核心场景是物联网智能家电设备,如智能空调、新风机等设备,通过物联网平台转发消息到函数计算,函数计算调用API(接口快速)获取全国天气、空气质量、穿衣指数、运动、洗车、空气污染扩散、紫外线等指数。通过天气信息智能控制家电设备,比如根据PM2.5指数自动开启或者调节空气净化器,比如通过声控设备获取天气信息等。IOT设备通过物联网平台快速集成到所需要的物联网应用中,云端多产品无缝对接,节省大量开发时间,降低运维成本。
这几个场景非常适合使用本方案:
Ÿ 智能家居或APP获取天气和环境指数。
Ÿ 传统家电设备智能化连接升级。
Ÿ 扩展应用,如农业灌溉、智慧城市天气预警等多种场景的应用。
2)系统架构图
本方案的系统架构模拟Android、ios应用云模拟物联网设备接入到IOT平台,IOT平台通过规则引擎将数据转发给函数计算,函数计算调用云市场的天气API(如果有其他业务需求也可以调用其他业务API)。函数计算把数据处理完后,比如获取天气信息后,将结果推送给IOT设备,设备收到指令后对物联网设备进行控制,这样就实现了一个完全免运维无服务化的物联网设备接入。
3)方案优势
Ÿ 物联网平台提供多种设备端SDK(如Android、ios、Linux服务器端的SDK),快速接入设备上云效率高,支持全球设备接入、异构网络设备接入、多环境下设备接入和多协议设备接入。
Ÿ 具有亿级设备的长连接能力、百万级并发的能力,支撑架构水平性扩展,核心消息处理系统采用无状态架构,无单点依赖,消息发送失败可自动重试。
Ÿ 过等保三级提供多重防护,保障设备云端安全,服务端可用性高达99.9%。
Ÿ 一站式设备管理、实时监控设备场景、无缝连接阿里云产品,简化物联网复杂应用的搭建,支持物模型,无需自定义数据格式,解决数据结构化的问题,便于数据分析和可视化,完善的监控和告警配置,可及时感知到平台和业务的异常状况,数据开放、API开放,打通设备到平台到业务服务器的数据链路。
Ÿ 物联网平台和函数计算无缝对接,弹性使用云资源,降低使用成本。
4)函数计算产品架构
函数计算底层基于阿里云的第四代神龙架构的云服务器、云存储和云网络,在安全方面有沙箱容器2.0加持,提供多语言环境运行时,同时可以自定义容器镜像自定义运行环境,多AZ的高可用部署支持VM级租户隔离。
在开发者工具方面提供多种支持,如IDE组件、插件、云效的Devops和第三方开源的terraform支持等,提供模板参考快速接入,同时DeBugging、tracing追踪、监控报警。
二、核心产品函数计算讲解
1)Serverless技术逐渐成为市场主流
函数计算是国内生态最完整、功能最丰富的Serverless产品。Serverless技术这几年正在成为市场主流,根据中国信通院以及CNCF2019和2020年原生报告,阿里云函数计算连续两年位居中国市场第一,市场占比远远领先于其他云厂商,函数计算年同比增速持续超过300%。在中国市场引领Serverless快速发展,函数计算有阿里云云原生加持 ,它作为云时代新的计算范式是重塑企业创新的最佳选择。阿里云的生态能力能够充分帮助函数计算释放云原生技术红利。
在2020年双十一,淘系前端核心系统率先完成。在行业导购、营销V榜、淘宝、天猫、飞猪、咸鱼等会场,核心系统规模化应用Node.js Serverless技术,峰值QPS达到了数百万。在淘系、前端这样一个大规模体量的业务团队下,函数计算帮助业务交付效率提高38.39%,人力消耗节省50%,这是一个收益率非常高的数字。
在2020年国庆节黄金周期间,函数计算帮助高德地图核心系统Serverless化,实现整个业务峰值100万请求/分钟,成功率99.99%,平均响应时间少于60毫秒。
函数计算还帮助阿里内部的语雀核心系统Serverless化,通过将绘图、公式、图片、音视频转码等核心服务迁移到函数计算,帮助业务团队无需再维护任务集群和自建服务,在稳定性、安全和成本控制起到非常重要的作用。
函数计算在阿里巴巴完成了大规模实践的验证,我们断言,函数计算以太Serverless将引领云的下一个十年。
2)Serverless技术有效屏蔽底层细节
函数计算可以有效屏蔽底层细节,可以帮助业务团队只需要关注业务代码,面向函数极简编程,可以做到支持各种编程语言。通过丰富的云产品间集成与事件驱动方式提供端到端的解决方案。比如,在OSS上传一个文件,这个操作可以自动的通知到函数计算,函数计算里的函数可能自动执行,执行完成后也可以记录状态以及记录到RDS数据库里。通过整个架构图可以看到,开发者可以通过编写代码,或者通过原生的镜像,把业务逻辑上传到函数计算,可以通过API/SDK或者云产品事件云触发函数计算执行。它的整个执行流程是弹性的,来多少流量都能执行多少流量 ,如果没有流量可以收缩回去,在应对一些大流量峰值的一些业务最佳选择,它是真正的按量付费,可以看到只需要几行代码,甚至比较大的一些业务,业务的实现不用100行代码就可以完成整个面向函数的极简编程,它可以有效的联动云产品间的一些解决方案。
函数计算可以做到百毫秒极致弹性,帮助在线业务应对各种突发流量,它是真正的按请求计费,通过毫秒级的计费方案,能够做到百分百资源利用率,只为请求产生的资源消耗买单,降低成本,运维同学再也不需要去关心把机器优化到怎么的资源利用率,函数计算可以有效的帮助实现这样一种无需通过预算真正按需使用的一种免运维的业务方案。
3)函数计算核心优势再升级
2020年函数计算核心优势再升级,能够通过包括容器镜像、APM、消息生态全面集成等领先功能,帮助企业实现智能弹性、极致效率、开放标准、安全稳定这样的需求。在极致弹性方面函数计算,通过百毫秒实施伸缩,多维度伸缩策略,实力级高并发,做到了业内首家支持预留模式确保稳定延时的能力,提供极致弹性能力,而且函数计算能够通过百分百资源利用率,低峰资源缩到零,实现真正的按需付费,帮助客户实现超高的资源利用率,函数计算是国内首家支持大规格实例,单实例性能最大提高430%,执行时间最大7200秒,可以帮助一些执行市场的业务,如直播、音视频、在线教育等这些场景,实现业务需求。
函数计算通过20多个云产品间端到端集成,最高帮助研发效率能够得到十倍的提升,函数计算是业内首家支持自定义容器镜像,我们通过全面融合容器云做到流程相同,提供跟容器K8s一致的体验,在3GB镜像加速方面,通过性能优化,做到启动耗时降低80%,阿里云函数计算通过和消息产品的集成,做到了最大市场份额的国内消息产品,包括RocketMQ/Kafka/MQTT等的集成,无需通过SDK,直接可以通过消息自动的去触发函数计算执行,简化编程逻辑,而且函数计算还涵盖了存储、数据库、消息、IOT、Streaming、监控等不同业务需求,高效的集成了20多款云产品端对端集成。
函数计算是国内拥抱开源、开放标准、无厂商锁定代表的Serverless厂商。Serverless Devs是国内首款开发者工具,支持Terrafor,/Plumi全球解决方案等,函数计算通过CNCF CloudEvents标准协议去拥抱标准,支持OpenTracing和Jaeger等协议,而且它是国内首家支持自定义容器镜像,真正实现零代码改造,只需把原来容器镜像直接拖到函数计算,即可以实现代码的服务迁移。函数计算通过多可用区融灾,SLA做到了99.95%,通过阿里经济体核心业务打磨,在2020年双十一全球购物狂欢节实现了百万QPS的复杂能力和零故障。
阿里云是全国首家实现了跟博睿、听云等业内APM引领者合成的一些能力,构建了最强Serverless可观测能力。函数计算是首批通过可信云函数即服务认证,全面的数据加密和保护,去帮助企业核心业务,能够做到安全稳定。
4)函数计算帮助企业落地业务价值
在社交娱乐行业和新浪微博是比较典型的用户,通过函数计算实现了百毫秒极致弹性,每日数10亿次个性化图片处理,综合成本下降35%。在线教育行业百家互联通过函数计算实现了实时应视频转码,1万节课30分钟内视频转码处理,转码效率提升93%,成本降低35%。
在前端全站领域,石墨文档通过函数计算实现了多终端在线实时协作,可以实现毫秒级资源伸缩能力,保障高负载、低延时,节省58%的服务器成本。
在电商新零售行业,联华华商通过函数计算实现了线上线下零售一体化,能够轻松的支撑618、双十一、双十二大促,帮助联华研发周期从六个月降到三个月,闲置资源付费从50万降低趋近于零,没有任何资源的浪费。
函数计算帮助九游实现了APK,快速打包渠道分发,做到了毫秒级弹性扩缩容,高度自定义打包,能够应对在线突发流量,闲置成本降低40%,
在直播互动领域,蓝墨云班课通过函数计算实现了直播、推流、转码,分钟级调集上万个实例的计算资源,从30人日优化到约3人日,成本也做到了节省60%,可以看到人效上面有非常大的提升。
函数计算在数据运维领域也帮助115科技实现了大规模流式处理并行计算,100PB的数据和海量日志数据压缩、转换和处理,能够释放大量运维人员,成本显著降低。
函数计算还在人工智能领域帮助码隆科技,实现了深度学习模型的一些零改造Serverless化,能够做到资源成本节省70%,综合的成本降低50%,可以看到函数计算帮助各行各业不同领域的企业实现了快速的业务落地,做到了真正的免运维、低成本、高性能、极致弹性的能力。
三、阿里云最佳实践实操
进入到函数计算的控制台,在服务和函数里面,我们去新建一个服务。
服务创建好了。
通过这个服务来部署函数,新增函数。
选择事件函数,通过空白的函数去创建。
这里也支持HTTP函数。
这里使用空白的事件函数模板。
服务是IOT1,写上函数的名字,Phthon2.7,通过文件夹上传,这里选择Demo文件,之前下载的042Demo,上传,上传成功后新建。
新建成功后可以看到,这里是我们的Demo code。
我们要设置AK信息,在控制台找到AK,这里演示方便,就使用主帐号来获取AK。
把我们的AK替换一下。
来到云市场,比如今天获取天气的API,搜索天气API。
在这里有很多云市场提供的免费的天气的API,我们选择易源天气。
购买。
购买成功后,来到云市场,可以看到有一个使用中的API了。
点击进来,这个是我们购买的服务。这里在有AppKey,Appsecret,AppCode,把这些信息在函数计算里面进行替换。
我们进入到刚刚的函数,把基本的信息进行替换。
可以看到请求的API的地址是可以在云市场看到的。
我们根据GPS获取地理位置,根据经纬度来获取的。
把AppCode复制过来,进行替换。
替换好后,保存。
在这里也可以先进行API的测试是否正常,那这里API里要输入两个参数,一个是经度,一个是纬度。
在这里输入两个参数,点触发事件。
重新定义输入参数,这两个保持一致。
输入后测试下。
可以看到已经返回了天气的信息,包括天气的图片、城市的信息和位置的信息,都在这里面,说明我们的函数正常获取天气的信息了。
接下来进入物联网平台,先去购买一个企业版的实例。
做测试的话选择深圳、基础版,都选最低的配置,购买一个月。
之前我已经购买过,我用已经购买过的实例进行演示。
进入实例后,在设备管理里创建产品。
选择分类,选择新风机,直连设备,Wifi,认证方式,确定。
这个是我之前创建的产品。
进入产品查看,查看这些基本的信息,像ProductKey,ProductSecret信息。
在Topic里面去增加自定义的用来接收天气的信息。
在自定义Topic里面,可以定义两个Topic,选择发布,weather请求天气信息,输入查询天气的描述,确认保存。
创建好后是这条信息。
再定义一个订阅类的Topic,选择订阅,Topic名字输入weather/sub,输入按天气查询结果的描述,确认。
这是创建好的Topic。
接下来在设备里创建设备。
我们在这里演示的是添加Andio的设备,选择产品,名字是android_device,确认。
创建好了Android的设备。
我们在规则引擎里面把数据转发到函数计算,选择云产品流转。
先创建一个Android_rule,确认创建。
创建好需要编写SQL。
编写SQL,把天气的经纬度筛选出来,字段里有经度和纬度,自定义Topic里面的产品,设置,天气的query信息。
就创建好了。
把函数转发到函数计算或是其它产品,这里可以添加操作。这里把天气的信息发送数据到函数计算,获取的天气信息转发到函数计算。选择地域、服务、函数、授权,确认创建。
转发到函数计算。
接下来在物联网平台上看到设备的信息。
点进Android里面,Produckey、DeviceName、DeviceSecret我们可以先记下这些信息,后面会使用。
在设备详情页Topic里面,如果第一次没有订阅,这里面是看不到的。
可以在产品里自定义Topic里,一个是订阅的,一个是发布的。需要把DeviceName替换成需要的Andriod_device。
回到函数计算,还需要两个参数,今天演示的是企业版的实例,需要设置企业版的ID。
实例的ID在物联网控制台是可以看到的。
设置ProductKey,在产品里可以找到。
再设置Topic,设置我们订阅的,之前看到过,在产品里查看详情,自定义的Topic,把DeviceName替换成需要的Andriod_device。
这样,把TopicName填进去,函数计算里需要修改的就完成了。
保存修改看一下,可以看到已经成功发送了。整个结果是成功的,这就说明我们刚刚订阅的Topic是可以成功收到消息的。
接下来我们用Android去接收物联网平台的消息。下载Android的SDK,下载Demo。
下载完之后,通过Android Studio进行打开。
之前打开过,这里有记录。打开之后在项目的APP下面的resources下面的raw,设置device的信息,Produckey、DeviceName、DeviceSecret。
在物联网控制台上都可以看到的,设备信息里面查看。
在这里查看,可以替换。
接下来回到Android,代码进行修改一下,在Demo下面找到DemoActivity,信息需要替换,第一个是sub的Topic,这里输入在物联网平台订阅的Topic,冒号后面是1。
第二个Topic是发布的Topic,之前定义的query,进行修改。
再加一个回调函数,用来监听收到的消息,添加一个消息的监听,这样在SDK端收到消息后,Toast显示出来,这样做演示。可以看到Message data信息的展示。
在这里输入一个经纬度的信息,找到可用的经纬度进行修改。
如果是企业级的实例的话,这里还要在Manager里进行修改,初始化的时候客户端的Host需要修改。这个Host可以在物联网的平台上查到的。
在物联网实例详情里的开发配置,接入点MQTT。
可以在这里替换。
新建一个模拟器,这里已经有一个了,如果没有的话在这里面创建一个,创建好后就可以用模拟器进行运行。
还需要在APP build gradle进行添加。
确保模拟器里需要的架构能够支持,添加abi进去。
加完后,可以用模拟器运行了,模拟器运行完后,可以先订阅这个Topic,再点击发布,发布后可以收到云端下层的消息,说明我们设备通过一些指令去触发获取的信息,把信息发送给IOT平台,IOT数据平台的规则就会把消息转发给函数计算,函数计算经过一系统处理之后,把指令返回给物联网的设备进行控制,这样就实现了完全无服务化的IOT设备的接入。