AbleCloud陈鹏:物联网挑战及企业应对之道

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

10月15号,MDCC 2015 IoT峰会的【硬件开发与技术专场】AbleCloud 联合创始人陈鹏分享了《IoT挑战与AbleCloud应对之道》。

现阶段国家发展互联网+,且用户对IoT的认识度和工控/安防需求的越来越多,使得IoT有着无与伦比的新机遇。但多品类设备需要智能化,市场与产品更新速度快,硬件商缺乏较强的互联网开发团队运用海量的数据,这都是现阶段不可忽视的难题。安全隐患,连接管理,数据管理,云端智能服务开发与大数据分析等都是IoT急于解决的技术挑战,陈鹏分享了新型的多重安全保证,多连接管理架构,设备管理方式和云服务引擎架构等,成功的解决了IoT这些技术上的难题。

物联网

AbleCloud 陈鹏

以下为现场演讲实录:

陈鹏:大家下午好。刚才前面几位嘉宾都讲的比较硬的,无论内容还是技术都很硬。我这边就给大家讲一些软件方面的东西。智能硬件发展如火如荼,随着传感器设备价格的降低,爆款会不断出现,随之而来的云端架构也会面临挑战。今天就介绍一下云端架构方面的问题,我的演讲题目是《IoT挑战与AbleCloud应对之道》。

我们来看一下物联网的机遇,比如现在大家都在说的互联网+,以及用户对智能硬件认知的提升,还有一个安防、工控的需求增加,包括现在的智能手表,儿童安全方面的需求越来越多。随着IoT的发展,会出的产品会越来越多,量也会越来越大,到那个时候,无论是硬件还是后端开发都会遇到越来越多的问题。智能硬件市场风云变幻,竞争激烈,产品上市的时间压力也会很大。硬件产品厂商在后端服务的开发上面的一些能力或者是团队,不会像互联网企业,可能经验上没有那么多,但是其硬件开发能力是毋庸置疑的。除此之外,现在数据那么多怎么用,如何体现它们的价值也是一个问题。

我们简单的看一下,一个是安全,以前产品卖给用户,那个设备是家里面自己用,一般情况下是不会有安全的问题,但是以后的设备是联网的,传输的数据会不会被窃取,或者是我伪造一个服务去控制你家里的设备,这些都是安全的问题。然后是连接,前面也讲了设备越来越多,以后可能几千万甚至几十亿的设备连接到网络,如何承载这么大的连接数。在这里很重要的一点是多种智能硬件的快速开发,我们这里要强调多种,如果厂商只做一款产品,其竞争力不会那么大,他们会尝试做新的东西,提供新的feature,就是要有快速的开发能力。前面这几点我们可以提取一些通用的关键字,就是海量、通用、可扩展,简单。

怎么样做这些?我们把IoT需要的一些通用功能组件化,比如说我做一个产品,我的产品上市后用户会注册才会在APP上使用/控制设备,这需要一个账号系统来提供用户注册功能。还有一个绑定,我设备要绑定到用户才可以控制它。这些都是通用的组建,这些功能没有必要每一个厂商都单独开发一套,我们可以做成通用的服务。前面提到数据设备联网,设备会产生数据,然后用户有很多的控制行为,或者是一些购买行为等等,这些都是数据,如何分析处理以挖掘数据的价值等。我们就是针对智能硬件做了一个通用平台,今天我介绍一下在云平台开发过程中如何应对上述问题以及AbleCloud的平台的具体应对措施。

物联网

AbleCloud云平台技术架构图

首先我们是从设备接入开始讲,当下设备要变成一个智能设备就需要联网,然后进行云端接入,用户的APP要远程控制也是会接入的。这一层是通用的服务的组件,开发平台就是说,不同设备功能逻辑是不同的,在通用的组建上,还需要提供一些定制化的开发,就在开发平台来完成。还有底层的基础资源等等。

这是我们做的一套云平台的技术栈架构图,前页ppt介绍过,我再简单的介绍一下,这是设备接入和APP的接入。中间是各个功能组建,我们通用的帐号服务,设备管理服务等等,下面就是微服务的开发框架,我们可以自己写这个服务逻辑,最底层这个IaaS跟我们自己做的不太相关了,但我们对其依赖耦合度低,很容易迁移以及跨地域、跨服务商部署。

我们首先简单的介绍一下安全方面的东西。刚才也提到了随着互联网设备越来越多,安全也会越来越突出,要解决安全首先要考虑设备和云之间需要一个认证,比如说我是一名黑客我会不会冒充一个云服务就可以把你们家的智能门锁都打开了,另外,厂商A的设备会不会冒充厂商B向厂商B的服务发起攻击等,所以这是需要一个双向安全认证的过程。我们当用的是RSA对称加密算法来完成认证握手过程。加密的过程成功之后,我们使用AES对传输数据进行加密,这个性能开销会小一点。

安全的另外一方面是设备绑定,我们生产出来设备卖给客户进行绑定后才可以控制设备。现在我们家里面有很多成员,我绑定之后也是会分享的,在这个绑定和分享的过程中也是会有一些安全的漏洞。我们设计了一套安全的绑定机制,设备先要连上云,我首先要用手机激活设备,这个时候手机的APP和设备是一对一的关系,设备会给激活它的手机一个绑定码,也就是第一次就是他们配对进行绑定。现在很多厂商将设备信息制作成二微码,如果我们没有这个机制我就可以随便的扫一下就可以绑定别人的设备了,这个是第一次绑定,之后我可以分享给家里面的成员,生成的分享码也是会有时效性,防止无意的泄露。

认证方面,因为我们后面有一个云平台,厂商开发的服务也会对外提供一些接口,所有的这些访问都需要进行认证,这些都是基于AK/SK认证这样就防止了不明身份访问我的服务和数据。这一块就是连接管理,因为大量的设备要联网,我们是做的水平扩展架构,单机可以做到百万级别的,这是一个简单的架构示意图,设备找到一个合适的网关。这里面会有一些绑定的关系。设备通过这一块找到一个合适的网管,建立连接,所以每一台设备和云之间是有一个长连接。

设备管理架构和连接管理不太一样,因为设备连接网关的次数不会太多,除非是网络不稳定,通常情况下不会断,所以对网关连接影响就不是很大。设备管理服务需要提供高性能的查询请求,因此要做cache,并且架构上做到少一跳请求,大概的架构就是这样的。这个地方就是设备管理,根据客户请求找到他的一些绑定关系进行身份的验证。

云端存储,随着设备越来越多数据也越来越大,所以这是一个比较大的一块。在实际的项目中,我们发现除了IOT的大数据event data是NoSQL的需求外,还是有结构数据的需求,所以我们做了一个混合的存储系统。对于这个混合存储我们提供通用的一个DAL,他们不用熟悉两套API,因为他们是一模一样的。但是我们会做抽象,我们会提供了抽象出来的RESTful接口,比如Create/Find/Updata/Replace/Scan等等。

物联网

云存储架构图

这是一个存储的简单的架构。这个和前面的比较类似。这是核心的组件,核心组建就是这两块 ETC D和Router。ETCD是一个很重要的中心存储,这个是存储元数据,因为我们后端有很多的服务以及厂商的UDS。 Router就会发现里面所有的服务,客户端发给router,router然后再把这个消息发送到服务的上面。

云服务引擎,这个是我们提供的一个比较有特色的一块功能,刚才提到设备的品类越来越多,即便是同一款设备在研发的过程中也是会不断的修整,怎么样快速验证我的功能好不好?比如说设备联动,现在是智能设备,之后就是智能家居,我家里有光线传感器,有智能窗帘。当光线传感器发现光线比较暗,需要打开智能窗帘,设备的计算能力通常不会太强,并且很可能两矿设备是不同厂商提供的,所以一般情况下是由后端的服务来控制这样的逻辑。我作为通用平台提供方步太确定你需要什么样的功能,但是我们也不想厂商有较多的开发量。

物联网

云服务引擎架构图

所以我们就开发出这样的一个云服务引擎,它本质上是一套微服务架构,有服务发现,负载均衡,资源隔离,还有开发框架进行了高度抽象,其内嵌云端各个服务组件功能。还提供了服务管理,分布式的调度,自动扩容,版本管理,上线回滚操作等,以及支持后台的任务和日志收集,监控管理。以前开发后台服务的朋友都知道,日志非常的重要,你们自定义服务的日志我们会自动为你收集起来。

这个就是一个云服务引擎架构,这个是调度器,各个厂商把自己写的服务放在平台上,在这里面会有一个scheduler他们之间会定期的维护心跳,scheduler会主动的发现自己掌控的agent。Agent端主要我们主要基于当下火热的docker做了很多工作,如果厂商自己开发,采用docker也是会比较快速的。Agent会管理很多的UDS。我们提供了一个java的开发框架。这是一个用户自定义的服务,这个是我们自己的服务,这个是我们开发所有的一套后端平台。

这有一小段代码,给大家看一下,主要看看怎么样基于云服务引擎开发UDS以及运行你的UDS。说明这块给大家解释一下,因为对于厂商或者是客户来说,代码越少越好,AbleCloud提供的在设备端、移动端到的云端,所以其实简单的控制,比如我想控制一个灯的开关,现在APP端就可以直接将命令发给刚才前面讲的网关上,网关会自动发给设备,所以对这个简单的控制逻辑,厂商是不需要写任何的代码的。我这就是为了体现开发框架的一些功能,在UDS中有意加了这么一个功能。因为现在很多的设备,除了提供APP控制外,还是保留了面板控制,就是人走到那就可以开关,对于这类面板控制数据只要你设备报上来,你的UDS就可以获取这样数据。

这就是一个AC提供的一个基类,这是两个抽象方法,一个是handleMsg、一个是handleDeviceMsg。handleMsg接受来自于APP的控制命令,handleDeviceMsg就是来处理设备上报的命令,其他的怎么样联网,消息怎么样路由都不需要厂商关注,这是做云开发一个比较大的思想。常规的安全问题,设备连接问题,APP的连接问题,所有的这些在我看来都不应该都不应该是硬件厂商关注的,他就是要把我的硬件设计好,性能做好,我把我的APP功能用户体验做好,具体底层技术不用太专注。

这个demo的代码就是这么短短一段,这个AC是我们对云端的服务的封装,这个简单逻辑,整个发送的过程就完成了。这是设备上报的消息,通过接口参数,我们其实就可以把这个消息拿到了,我们处理后会把它存储到云储存里。这个就是一个查询数据处理函数,处理来自APP端的查询开关历史数据,这是一个云存储的扫描接口的调用,提供一个start time和end time扫描一段时间的历史数据。前面简短代码就把后端的服务写完了,厂商也也不关注怎么样运行。直接在AbleCloud提供的后端控制台上,申请一个开发帐号,新建一个服务版本,然后提交一下编译好的jar文件的压缩包,点击上线整个的后台服务就跑起来了,你也可以进行下线和回滚操作,当厂商对UDS进行了升级,上线新版本时,会自动将老版本下线,这些上线、扩容都由平台自动进行。

前面讲的是云端的一些架构,因为时间有限,讲的比较简单,其实功能非常多,组件也很多。我们再简单的介绍一下大数据分析引擎。IoT行业需要怎样的分析引擎?不仅仅是分析用户注册、app的操作行为等数据,还有可能是销售数据,更重要的是需要提供设备运行状态的分析功能,如运行时长、运行次数等等。

我们要怎么解决这样的问题,我们可以看一下,毫无疑问的说,对于海量数据,我们需要一个MPP架构的大数据分析引擎,无论是收集、存储还是分析都需要分布式并行处理。像以前的数据分析,通常需要事先建一个table,定义好其schema,现在的数据分析已经发生了转变,不需要那样的模式,我的原始数据想怎么写就怎么写,我可以随意的动态增加列,然后在页面上点几下鼠标,就能组合出自己想要的分析结果了。之前无论我写PHP,还是我在命令行运行一些SQL查询,或者是跑一个mapreduce程序都需要一定的编码,现在都不需要编码了,我们提倡的是分析理念是零编码(codeless)。虽然你没有事先定义你的数据格式,我们的分析平台会自动帮你识别出来。

物联网

大数据分析引擎架构图

这个是大数据分析的一个框图。我们最希望厂商只需要会用简单的数据写入接口,做分析查询时无需任何编码,就是说我们是一个不需要写代码,就是在页面上点一下就可以得到自己想要的结果分析平台。但是也不排除特殊的case,比如厂商有自己的后台管理系统,希望在数据可视化展示方面能够统一在一个平台上,也没问题,我们数据分析平台的所有接口都提供了open api,你调用分析接口拿到结果数据在你的平台上可视化即可。而且这个也是比较简单,因为大数据分析平台所有的接口都是以RESTful形式提供。

这个可以简单的介绍一下分析平台大体的架构,首先数据写进来,不需要定义表格的schema,所以写进来会有一个数据解析模块,会自动绘解析有什么列、是不是增加列等,其后端会有一个持久化的消息队列。我不知道大家有没有接触过mq,它是一个分布式的上下游解耦中间件。

这是写的流程,还有第三方的数据,怎么样批量的导入,我们也有一个流程,然后写入底层存储中。因为我在前面分析就是要知道有哪些列,所以这一块我们会有一个API,包括schema管理的这一层,这一块就是很重要的就是分析模型,因为是做分析,都会有一个cache以提供查询性能。我们这边提供的分析模型是基于事件的分析模型,无论是设备上报的消息还是用户控制的消息都是事件。对于用户来说他的性别、地域、年龄等都是profile,我不需要每一次事件都有同样的数据传上来,一方面减少网络流量,另一方面也简化程序设计。厂商在事件数据中只需要用用户或设备的ID来标识就OK了。为此,我们的分析平台还提供了profile功能。

海量数据存储查询肯定是要高性能,列式存储成为首选。分析模型这个是很简单的最底层的分析,然后高级的复杂的分析模型,如cohort、funnel、retention、conversion、session、count_last_version等的分析。这是我们数据分析的一些示意图,这是留存率分析,这个是漏斗分析,比如在厂商的商场网站上有多少用户流量了商品,流量商品的用户中有多少用户购买了商品,购买商品的用户中有多少用户激活了设备,激活设备的用户中有多少用户用微信控制等。这样一个一个步骤下来,就是一个典型的funnel分析,俗称漏斗分析。

前面技术就简单的介绍这么多,后面就没有太多内容,由于时间有限,云平台和大数据分析平台其实是需要非常复杂的技术来支撑,我今天只是简单的和大家交流了下架构方面的问题。这个是我们的合作伙伴。这个是亚都的,就是从固件联网、app连云,包括云端的UDS开发,整套技术解决方案都是用的AbleCloud提供的SDK+云服务,这个是picooc,我看演讲嘉宾中也有我们的合作合办就不一一说了。

我今天的讲解到这里,如果有什么问题欢迎讨论,谢谢大家。

—————-

许永硕:大家对这个介绍的有什么疑问没有。

提问:我是天津的一个互联网行业的作为一个开发者,我想问一下,我们现在接入的一些智能设备,或者是目前我们接入的设备,除了智能设备之后,还有非智能的设备,可以做一些接触。

陈鹏:只要能联网的设备都是可以做的。只要你设备想联网都可以,所谓的智能设备定义比较简单。目前是比较初级的阶段,现在主要的就是联网,包括是蓝牙通过手机联网,这个也是一样的。

提问:你这个 物联网 有没有一些联网的模块。

陈鹏:我们和主流的模块厂商都有深入合作的,我们在硬件层面提供了联网固件,适配了市场上各家主流的模块,你们开发硬件的时候就是买一个主流的联网模块,主要你嵌入零部件就可以。

提问:我是来自深圳的,听到你刚才介绍这么多,我是刚才前面这一位也问到我想问的问题,关于物件这方面,主要是解决设备与平台的通讯这方面的问题,但是现在很多局域网控制的数据,怎么传给云端进行分析?

陈鹏:是的。这是一个很好的问题,因为现在虽然说我们做智能硬件,设备能够联网,但是很多情况下,自觉不自觉的控制设备还是走局域网,一方面家里的网断了,另外一方面是从用户体验角度考虑,即便网络ok但是我在家的时候局域网控制会快一些。

我们在APP端的SDK是支持局域网直连的,这时候数据怎么办,其实有两个解决方案,一方面是通过APP,厂商可以通过APP是拿到控制数据,然后由APP上传到云端,另外一方面就是厂商设备自己可以在硬件里面做东西,就是硬件如果你的能力够强可以缓存一定的数据,等下次连上云后再上传,是可以做的。

提问:我刚才也看见通过app可以收到推送消息,我是通过网页访问,也能收到推送数据吗?

陈鹏:这一块也是可以,实际上这是一个更广义的push,我们支持websocket,通过该技术也能实现云服务和浏览器之间的数据推送。

提问:现在通知方式处理推送消息,支持短信吗?

陈鹏:支持的,并且因为我们有客户在国外有需求,所以我们支持国内国外都是可以通知的,不过短信必须是厂商提供一个模板,其它的事情是我们来做的。

许永硕:我问一个问题,未来的设备数量会非常大,我看PPT里面较多的交互都是RESTful的,开销会不会比较大,因为我知道IBM在互联网这个领域提出了MQTT协议,我们这边是怎么做的。

陈鹏:其实我自己说的不是很明确,ppt里头在说网关的部分提了是tcp连接。你们看到都是RESTful,是APP和云端,以及各个云服务包括UDS之间的交互协议,但是设备和云端是TCP连接的,避免HTTP带来的额外开销,当然,我们也支持MQTT协议。抱歉,这一块我刚才解释的不是很清楚的。

许永硕:最后一个问题。

提问:你好,你们提供了设备的SDK,我知道硬件的种类非常多,我们是怎么处理,另外一个就是我看你们后端很多服务,设备除了连接之外,怎么和这么多服务交互?

陈鹏:你是问的是在硬件的上的固件SDK,是什么样的功能,这个很好。虽然我们平台功能很多,跟设备交互就是两个地方,一个是跟APP交互,那个是激活和局域网控制,另外一个就是跟网关的交互。我们在硬件端也提供了sendMessage这样的接口,所有往云平台发送的消息只需要调用该接口即可,设备看不到其它众多的云服务。

同时,在SDK中也有处理云端推送消息过去的回调handler,在里面捕获消息并处理即可。至于硬件种类非常多的问题,实际上我们只做了通用部分,设备激活、设备连接、消息加密、消息透传等功能。我们在设备端固件这层是很薄很轻量级的,具体控制消息就不解释了,我们的固件把消息透传过去,由厂商解释。

随意打赏

提交建议
微信扫一扫,分享给好友吧。