物联网架构方案思考「建议收藏」

物联网架构方案思考「建议收藏」1.前言1.1.系统设计有无通用方案?一般的IT系统,稍微复杂一些,都会存在一个架构。架构在初期可能不觉得有多么重要,但随着业务发展,架构可能成为系统开发的瓶颈,导致无法再迭代下去。不同的系统,会有不同的架构,即使同一个系统,由不同的架构师设计也会有不同的架构。架构不存在正确与否的,只能说在不同的场景,存在优劣之分。如何设计一个系统,此问…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.前言

1.1.系统设计有无通用方案?

        一般的IT系统,稍微复杂一些,都会存在一个架构。架构在初期可能不觉得有多么重要,但随着业务发展,架构可能成为系统开发的瓶颈,导致无法再迭代下去。
        不同的系统,会有不同的架构,即使同一个系统,由不同的架构师设计也会有不同的架构。架构不存在正确与否的,只能说在不同的场景,存在优劣之分。
        如何设计一个系统,此问题过于庞大不在本文讨论范围。那么如果细化一个问题:架构设计能否有通用方案?
        上述问题,如果限制了系统范围,同时只要求解决该范围80%的问题,那么确实是可以设计出通用方案的。

        本文根据笔者的经验,探讨物联网一般的设计方案,如有错误,请轻拍砖。

2.物联网系统设计目标

2.1.物联网系统要解决的问题

2.1.1.“连”是核心需求

        物联网首先要解决的问题,是让大量的设备接入系统。一般的物联网系统要求和设备实现双向通信,故要求的连接一般是长连接(TCP连接),并且需要连接稳定,为保证连接稳定,一般都会加入心跳机制。由于长连接是耗资源的,单台服务器能承受的连接有限,故设计的系统必须是可以扩展的,即可以通过堆机器增加连接能力。

2.1.2.数据处理是主要任务

        物联网产生的数据大部分为时序数据,由设备按周期产生。由于考虑到设备众多,每台服务器处理能力有限,同样需要设计的系统必须是可以扩展的。同时一般要求设备连接服务器和数据处理服务器要解耦,因为不同的设备数据,一般处理过程也不一样。

2.1.3.指令和控制是基本需求

        一般物联网还需要由上向下发送指令,如快递柜打开,门锁打开等。故系统需要设计一个指令通道。指令通道如果需要相当的可靠性,还需要一个独立的指令通道,和数据通道分开传输予保证可靠性。

3.系统总体设计

3.1.总体架构框图

物联网架构方案思考「建议收藏」

3.2.设备登录过程

        设备登录可以采用登录网关http方式登录。http为大多数开发者熟悉,开发简单。设备通过http报文(一般为json)把设备号,设备类型,位置等信息传递到服务端,服务端验证真伪后通过算法返回一个登录令牌和一个负载较低的连接服务器地址,设备通过这两个信息,使用TCP接入连接服务器,完成登录。

3.3.设备在线状态维护

        已经登录的设备,通过TCP心跳包,定时向连接服务器上报心跳信息。连接服务器把当前活动的设备登记到缓存数据库(redis),并设置过期时间,如果连接服务器一定时间未收到心跳,则关闭连接同时redis的活动信息亦会自动删除。
其中redis中的活动设备信息,是为了管理后台和业务服务器查看当前活动设备使用,作为一个信息交换媒介。

3.4.消息和数据处理

        连接服务器收到的设备信息,通过消息队列(kafka)转发到业务处理服务器。这里通过消息队列的方式,实现了连接服务器和业务处理服务器之间的解耦。因为解耦,连接服务和业务处理可以完成独立开发而不相互影响。比如连接服务因为性能可以使用Java或者C++开发,业务处理因为灵活性的要求可以使用python开发。

3.5.指令处理

        上述的消息和数据出来,通过kafka消息队列转发,是考虑到kafka的高性能,kafka的多主架构,可以抗住更大量的流量转发。
        但在指令转发场景,更重要的是可靠性,并且通常指令流量不会很大。rabbitmq具有较高的严谨性,数据丢失的可能性更小,故指令通道采用rabbitmq实现转发。
        同时消息和指令通过不同通道转发,可以故障隔离,不会因为消息数据太大,影响了指令的传输。

3.6.存储设计

        采用不同的数据库,存放不同的数据库方式。业务数据一般要求严谨性,采用关系型数据库mysql,时序数据因为性能的需要,采用时序数据库cratedb。

3.7.管理后台

        管理后台可以使用典型的B/S系统。管理后台的主要职责是管理当前系统的设备,查看当前接入设备的状态,给设备发送指令等。管理系统可以同时在缓存数据库redis,业务数据库mysql,时序数据库cratedb获取信息进行展示和管理。

4.其他

        本文所描述的物联网架构,作为开源项目在github开发并持续更新,欢迎大家关注。
        github地址:https://github.com/Darren1414/IoTPlatform

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192140.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python字符串与数字的转化_字符串转数字c语言

    python字符串与数字的转化_字符串转数字c语言数字转为字符串这个相对比较简单我们可以使用Python中的str函数直接转换例如将123转换为’123’print(str(123))或者使用格式化print(‘%s’%123)字符串转为数字这个相对比较复杂一点因为Python没有提供类似于str函数的int函数如果转换的是0-9的一个数,那么只采用字典就可实现defchar2num(s):…

    2022年10月12日
  • Centos 6.9_centos iptables

    Centos 6.9_centos iptables规则集类型hash:net#创建网络规则集(可以是是网段或者IP)hash:net,port#创建网络规则集,带端口,基础用法ipsetcreatefwhash:net#创建规则集ipsetaddfw10.0.0.0/24#给新加的规则添加IP段ipsetdelfw10.68.22.1/24#删除IPi…

    2022年10月6日
  • pycharm添加库_pycharm自带python吗

    pycharm添加库_pycharm自带python吗pycharm添加pythonpath文件不在要添加的目录底下有时候需要添加一个包,但是那个包就是一个很随意的路径,并不在python27文件夹底下,如何做呢?-如果这个包是正规的包,有init.py这个文件,那就容易了。如果是自己写的一个包,这个文件要加上,可以为空-在pycharm中点击File->settings->projectXXX->ProjectInterprete

    2022年8月27日
  • c++入门教程–-8循环控制语句

    c++入门教程–-8循环控制语句

    2021年3月12日
  • android之LayoutInflater详解_什么是LayoutInflater

    作用:LayoutInflater作用是将layout的xml布局文件实例化为View类对象 对于常见的一个已经载入的Activity, 我们可以使用findViewById方法来获得其中的界面元素. 而对于一个没有被载入或者想要动态载入的界面, 就需要使用inflate来载入了. 方法:    Android里面想要创建一个画面的时候, 初学一般都是新建一个类, 继承Acti

    2022年3月9日
  • 现在在人工智能发展方面已经有了一些泡沫_人工智能毁灭人类

    现在在人工智能发展方面已经有了一些泡沫_人工智能毁灭人类本文3560字,建议阅读9分钟。本文对人工智能在2020年的发展态势进行分析。对付泡沫的有效方法,就是用另一个更大的泡沫包住它,这也是常说的「嵌套式泡沫」。如果要追求可持续繁荣,必须要同时做到两件事:小心地把里面的虚假消掉、认真地把外面的空间做大。身处人工智能巨轮上的我们,越来越频繁地听人谈论起人工智能过快增长而导致泡沫丛生,独角兽越来越多,但跑出资本怪圈独立生长的却寥寥…

    2022年9月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号