设备接入层
我们有了物联网数据接入的通信协议,例如MQTT;有了数据的存储和处理的技术;现在面临的一个挑战,就是怎么面对海量设备的接入和海量数据的输入。
从架构设计来说,负责设备接入的部分被称为设备接入层,在物联网中被称为IoT Hub。如果我们采用的通信协议是MQTT,那么这个接入层通常就是MQTT
Broker。
上面的图只是让我们能够更快的了解各个部分之间的关系,实际使用中要复杂的多,首先需要解决的就是物联网接入层的高并发和高可用。
14.1 负载均衡
面对海量的设备接入,单台服务器作为接入层的话,存在以下的问题:
- 很容易达到性能瓶颈,无法因对海量接入和数据
- 存在单点故障
要达到高并发和高可用,必须要采用多台服务器。服务器数量变多之后,具体要怎么协作来处理请求。这个时候就需要用到负载均衡技术。我们需要在所有的服务器之前添加一个组件——负载均衡器。所有的接入请求都会发送到负载均衡器,由负载均衡器将请求发送给后端的接入服务器。
负载均衡器可以通过各种预先设置好的策略,将请求分配给后面的各个接入服务器。通常使用的策略包括:
- 轮询策略:将请求轮流发送给各个后端服务器。
- 加权轮询策略:为各个后端服务器配置权重,根据权重将请求发送给后端的服务器。
- 最小连接数策略:将请求发送给当前连接数最少的后端服务器
- 加权最小连接数策略:在最小连接数策略中引入权重系数。
- 源地址hash策略:根据请求源地址的ip地址的hash值,将请求分发给后端的服务器。
14.2 消息队列
采用负载均衡 +
多服务器的方式,能够提供接入层的高可用和高并发。这个时候压力会传递到更后面的数据库中,造成的结果就是请求响应会变慢甚至超时。因此,我们还需要采用一些方法来让设备接入层具有高性能。为了达到这个目的,我们会引入两个组件:消息队列和缓存。
消息队列
消息队列的一个常用的场景就是削峰填谷,这个功能也是我们在这里使用消息队列的原因。设备接入层在接收到数据之后,将数据发送到消息队列,就完成了自己的工作,可以给客户端发送返回消息。由于消息队列的高性能,这个过程会很快完成。后端的流处理程序和写入数据库的操作可以根据自己的节奏来从消息队列中读取数据进行消费。
常用的消息队列由:
- kafka
- RabbitMQ
- RocketMQ
缓存系统
消息队列解决了写入数据库的性能问题,还需要解决读取数据库的性能问题。解决这个问题的方式就是使用缓存系统。
常用的缓存系统包括Redis和Memcached等。同时,还有些二级缓存的框架,例如JetCache和J2Cache等。
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击