【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

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

  1. 竣达技术丨中小机房远程网络在线动环监控方案

    一.方案背景: 随着经济社会的发展,中小机房的管理工作一直是处于薄弱环节之中.如何解决中小机房设备运行安全,运行环境复杂多样的难题,有效利远程在线监管方式提高效率,降低人工成本,实现高效且简易的中小机 ...

  2. network setup service启动后自动停止_一个简单的测试环境下的自动化部署方案

    笔者是公司是一个分前后端开发的公司.而笔者是一个普通的后端开发工程师.在和前端工程师协同开发时,为了给前端工程师提供接口,往往要将写好的代码交付并部署到测试环境.因而这导致笔者经常需要打包项目更新到测 ...

  3. 专用5G网络的7种部署方案

    实现5G的应用,首先需要建设和部署5G网络,在本文中,我们将分析如何构建一个专用5G网络,专用5G网络可以通过以下两种方式实现. 第一种是部署物理隔离的专用5G网络(5G孤岛),该网络独立于移动运营商 ...

  4. 5G时代下的室内定位方案越来越精准-室内定位方案-新导智能

    剖析5G室内掩盖网络的根本需求,并提出室内定位方案,详细剖析其体系架构及作业原理.外场试点成果表明,混合组网计划具有智能运维.弱掩盖剖析.室内定位.人流量剖析.易于扩展.弹性扩容.室内定位精度到达3m ...

  5. canal mysql从库_大厂如何基于binlog解决多机房同步mysql数据(一)?

    目录 前言 单一IDC 多IDC mysql主从同步 数据同步方案 多机房mysql同步方案 优化同步方案 同步方案的问题 如何解决重复插入 对于DDL语句处理 如何解决唯一索引冲突 如何解决数据回环 ...

  6. 如何解决内网中网络被限制的问题

    来源:http://yangkuncn.cn/how_to_salve_network_cannot_visit.html 如何解决内网中网络被限制的问题 目录: 访问被拒绝 拒绝访问的原理 转发tc ...

  7. 华为仿苹果字体_苹果手机和华为手机,同样的网络下为何我的手机网速这么差?...

                                                                                                        ...

  8. FEDORA9安装后的配置lvlv全记录必看一览表 解决FC9安装后网络需激活

    FEDORA9安装后的配置lvlv全记录必看一览表 解决FC9安装后网络需激活 论坛相关精品信息: <script type="text/javascript">< ...

  9. 测试无线网网速软件,技术员教你解决怎么测试无线网络网速

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到怎么测试无线网络网速的问题,如果我们遇到了怎么测试无线网络网速的情况,该怎么处理怎么才能解决怎么测试无线网络网速带来的困 ...

最新文章

  1. 程序人生 Hello‘s P2P
  2. python运算符讲解_python运算符讲解
  3. jzoj3854-分组【树状数组,线段树】
  4. 【CodeForces - 460C】Present(二分+树状数组)
  5. 通过NodeJS自动生成的MySQL的REST风格API
  6. 右侧按钮登录注册html,翻转式用户登录注册界面设计
  7. cesium 百度地图_Cesium专栏-热力图(附源码下载)
  8. 新兴IT企业特斯拉(二)——特斯拉的诞生
  9. 通过谷歌骇客语法搜索后台:_书评:我们的骇客并拥有
  10. SVN问号图标清除方法
  11. 计算机网络显示正常 但无法上网怎么办,如何解决显示网络已连接但无法上网...
  12. [实战] Android 发短信 - SMS
  13. 高德地图实现多天路线规划(途经点显示自定义内容)+轨迹回放(显示车牌)
  14. 利用天翎知识文档+群晖NAS搭建企业知识库,享用智能检索
  15. 计算机作业微波炉工作的原理,微波炉工作电路原理图及功能图解
  16. 广东工业大学数据库课设(点歌系统)
  17. 微信分享不显示右边缩略图
  18. python 常用的几种定位方式
  19. 食物链顶端的人类被这种“飞蚊”折磨得很痛苦?
  20. java.lang.IllegalArgumentException: baseUrl must end in /: http://xxx.xxx.x.xxx:xxxx/Handler1.ashx

热门文章

  1. [ubuntu] tmux 窗口不是全屏
  2. 论文翻译:Real-Time High-Resolution Background Matting
  3. FakeAPP训练时错误【ResourceExhaustedError: OOM】解决方法
  4. c java 引用类型_java中的引用类型
  5. python request 等待网页加载_用Python开发爬虫,看这篇文章就够了
  6. Dart入门—开发环境
  7. 中国结肠镜设备行业市场供需与战略研究报告
  8. 2021年中国仪表球轴承市场趋势报告、技术动态创新及2027年市场预测
  9. vue 项目中 自定义过滤器 全局使用 filter
  10. 固定于计算机主机,一种便于固定的计算机主机的制作方法