立即注册 找回密码

QQ登录

只需一步,快速开始

第一站长论坛

搜索
第一站长论坛 首页 资讯 查看内容

如何解决多机房、多网络下的物联网部署方案?

2019-10-15 17:40| 发布者: admin| 查看: 72| 评论: 0

摘要: 【CSDN 编者按】随着物联网的迅速发展,场景联动越来越普遍,那么敲门砖的连接服务该怎样实现呢?本文作者作为360 IoT 云连接服务技术负责人,他从结合自身的实际开辟经验,详解连接服务的设计方案,以及连接服务里多机房多网络的落地实践。作者 | 张超责编 | 伍杏玲出品 | CSDN(ID:CSDNnews)连接服务的背景介绍连接服务的产生是为相识决云端和终端的数据通信问题。差别的业务场景对通信的

【CSDN 编者按】随着物联网的迅速发展,场景联动越来越普遍,那么敲门砖的连接服务该怎样实现呢?本文作者作为360 IoT 云连接服务技术负责人,他从结合自身的实际开辟经验,详解连接服务的设计方案,以及连接服务里多机房多网络的落地实践。
作者 | 张超
责编 | 伍杏玲
出品 | CSDN(ID:CSDNnews)

连接服务的背景介绍


连接服务的产生是为相识决云端和终端的数据通信问题。差别的业务场景对通信的实时性、可用性和可靠性的要求都不一样,也就使得连接服务要适应各种各样的场景。

有些场景对实时性要求相对较高,对可靠性要求不是很严格,如对实时交通路 况的推送消息,该消息就要求在一定时间内送达,没有按时送达的消息,就没有推送的意义了。

而对于常见的IM场景就刚好相反的计谋,用户希望接收到消息,尽管消息投递时用户不在线,这种环境下就对消息的可靠性要求提出更高的要求。

从以上常见场景出发,结合物联网的特殊性:既有业务对数据的实时性要求较高,又有设备对数据的可靠性有苛刻的要求,所以连接服务会结合差别的应用场景做出差别的应对计谋。


连接服务的设计目的


根据上述的背景,我们总结了以下相关的服务设计目的:

1、实时性

满足云端能及时地将数据传达给设备,进而到达云端能够实时控制设备的目的。

2、低功耗

在一些物联网受限的设备上,功耗也是一个重要的考量标准,所以要针对功耗要求严格的设备,进行特殊的处理以满足功耗的要求。

3、多协议的支持

物联网设备类型繁多,差别的厂商、差别类型的设备可能采用差别的传输协议,所以连接服务要能够处理差别的协议,做到多协议的互通。

4、多网络运营商

作为和终端的接入点,保证差别网络运营商的用户都能正常,高效的接入服务,也是服务设计的一个重要指标,如果网络都不能介入的话,其它都将无从谈起。

5、多机房的部署

因为连接服务的定位是面向大量的物联网设备,而高可用性应放在一个非常重要的位置上,所以要求服务能够支持异地多机房的部署。

说到多机房的方案必须要跟具体的业务相结合才有意义,连接服务之所以能够相对较简单的实现跟我们的服务本身定位有直接关系,服务没有持久化的消息数据,只是作为一个传输通道。

另一方面,这个层面到达了多机房,但是如果具体的业务线不能到达多机房的部署(这个又是非常困难的,具体业务一般都有持久化的数据),对最终的终端来说依然是不能够到达机房宕机完全无影响的效果。

假如每个点都提高一点高可用性,整体的可用性就会越来越好。

6、多业务线

由于各业务线的重要程度差别,对数据服务质量的要求也是差别的,所以要针对差别的业务线做差别的处理,并且要做好差别业务线之间的隔离。

且差别的业务线的技术栈的差别,业务回调的实时性要求差别,也决定了我们需要采用差别的业务数据回调方式。

7、数据安全性

物联网设备的数据都是直接和硬件相关的信息,所以对数据的安全性要求比传统的互联网模式下的要求要高。

服务架构设计:

部署结构

多机房数据同步


多机房多网络的部署方案


由于整体服务涉及的点相对较多,不能在一篇文章中一一道来,后续有机会可以继续跟大家一起探讨其中的细节,本文侧重详解多机房多网络的部署方案。

为何如此设计呢?

多机房、多网络的部署解决了差别运营商的介入问题,以及单机房的整体宕机问题。

多运营商网络的问题的解决方案

问题的症结所在是差别的运营商之间有可能存在网络不通的环境,而这又不能通过运营商解决,所以网络的打通是通过云服务商购买的网络专线,将两个差别运营商的对外出口进行打通。

硬件上网络打通之后,软件上只需要在差别的出口位置部署上相应的入口点就可 以了,最简单的解决方法就是部署相应的网络转发就可以了。

公司内部使用的LVS作为网络的代理,对于外面的云服务器提供商也都有对应的网络代理服务。该方案解决网络的联通性已经完全够用了,这是业界使用的比力多的方式。我们现在对于一些流量较少的运营商,或者服务没有特殊需求,也是采用这种网络代理的方式。

多机房解决多活的问题

多活问题之前最有印象还是的支付宝的挖断光钎的变乱。服务非常重视可用性,也将该问题提到了比力高的层面上。我们服务主题采用的是MQTT的开源协议,多机房之前采用的多MQTT 集群的桥接方式进行打通。到达预期的效果,我们需要解决以下几点问题:

1. 检查服务是否有全局的数据需求

服务的核心任务是传输消息,本身的定位是通道性质,上行数据是直接通过写入到Kafka队列中或者是通过用户提供的回调接口进行处理的。

如果失败的环境会写入到文件日记中,由于后台服务可以进行汇总收集,纵然各个机房的数据传输到各个机房单独的位置。

当然也可以进行收集,所以上行数据方面是没有问题。

再看看数据的下行:云服务往设备发送数据的时候,如果发送错了机房,设备就不能正常的接收数据了,所以下行是对多机房敏感的。

2. 怎样解决下行数据

根据上面的分析,下行的难点主要是解决怎样给终端所在的集群发送消息,解决这个问题,现在比力通例的做法就是在用户上线的时候,将用户所在的位置记录到一个多个机房都能访问到的数据库,这样的话就能每次投递之前查询一下,就可以投递到准确的位置了。

这样的设计是网络环境较好的环境下是没有问题,我们的每个机房的多机器组成的集群就是采用这种结构,但是在多机房网络的不稳定性,现在的主流数据库基本采用主从模式的,甚至有些是不支持多机房的主从模式。

这种环境下,数据库就成为单机房单点问题了,如果业务自己做数据的同步,这样又回到了起点,解决多机房的数据问题同步问题。

基于我们的业务模子相对简单,所以我们直接采用的是信息扩散的方式,即我们收到云服务的下行指令的时候会在所有的机房进行扩散,这样就能保证终端一定能收到相应的数据,但是会存在一定的浪费操作,但是基于查询是否是本集群有效的数据,然后就丢弃是相对高效的操作, 所以目前而言扩散带来的压力,相比维护多机房的数据要容易的多。

上行和下行都打通了之后,整体的主流程就通了,下面是两层集群结构

连接服务虽然业务简单,但是对服务稳定性和高性能有着特殊的需求,基本涉及了服务端开辟的各个点,本文介绍了一下其在多机房方案下的设计和实践。

作者简介:张超,360 IoT 云连接服务技术负责人,毕业于南京大学。曾从事过游戏开辟、IM 服务端开辟,目前从事物联网接入层相关工作。

本文是CSDN物联网公开课《360 物联网接入层连接服务入门实践》的节选,完整视频课程观看可戳:https://t.csdnimg.cn/wJCY

还想听技术干货满满的免费公开课吗?本次邀请到拥有13年从业经验的翰云科技研发总监段奇,深入剖析物联网接入技术、物联网平台架构设计以及实践。https://t.csdnimg.cn/a4kh 或阅读原文报名吧~

【END】

 热 文 推 荐 

ofo 辟谣“月盈利百万”;苹果回应向腾讯传输数据;Python 3.8.0 发布 | 极客头条

做好以下四点,拒做 “ 空心 ” 程序员 | CSDN 博文精选

C 语言这么厉害,它自身是用什么语言写的?

【角度刁钻】如果把线程当作一个人来对待,秒懂

苹果 5G 芯片“难产”!

网红“AI大佬”被爆论文剽窃,Jeff Dean都看不下去了

太鸡冻了!我用Python偷偷查到暗恋女生的名字

一文相识超级账本DLT、库、开辟工具有哪些, Hyperledger家族成员你认识几个?

你点的每个“在看”,我都认真当成了喜欢

免责声明:如果侵犯了您的权益,请联系我们,我们会及时删除侵权内容,谢谢合作!

鲜花

握手

雷人

路过

鸡蛋

最新评论

QQ|Archiver|手机版|小黑屋|第一站长论坛 ( 闽ICP备16019670号 )

GMT+8, 2019-11-13 20:15 , Processed in 0.079564 second(s), 23 queries .

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc & Style Design

本站提供网上自由讨论使用,所有言论内容来自互联网并不代表本站立场,本站不负任何责任.
如发现有侵权行为,请与我们联系. 我们将立刻从网站上删除,并向所有持版权者致最深歉意.
联系QQ:2837195923

返回顶部