当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘 要:鉴于Nginx服务器在负载均衡方面的优越性能,将其运用到智慧农业系统设计中,可以很好地解决系统在大并发访问下的性能瓶颈问题。智慧系统中应用服务器来处理指令信息的中转,有很复杂的业务逻辑关系,而利用Java多线程技术可以很好的处理这些业务逻辑。

引 言

基于底层传感器节点采集信息的智慧农业系统,可以大量获取作物的生长环境参数,在Web 平台上显示时,会有大量用户进行作物实时参数的查询请求,加入Nginx 负载均衡, 能够使 Web 服务器更好的应对高并发的用户访问场景。在系统中,通过 PC 网站发送控制指令,经由 Web 服务器传达到应用服务器,由应用服务器转发给嵌入式服务器。应用服务器由收指令线程和发指令线程组成,通过线程之间的同步和通信可以很好地保障指令发送的正确性,可靠性。

1 Nginx负载均衡

Nginx 是 Igor Sysoev 使用 C 语言为俄罗斯门户网站Rambler.ru 开发的一款Web 服务器。Nginx 以其高性能、稳定、功能丰富、配置简单灵活以及内存消耗低等特点而受到国内外企业的广泛青睐。

当Nginx 服务器启动后,它将产生一个主进程(Master Process),主进程在执行一些业务后,会产生一到多个工作进程(Worker Process)。主进程主要完成 Nginx 配置文件解析、模块配置和注册、数据结构初始化、网络监听生成、工作进程生成和管理以及信号处理 ;工作进程主要包括模块调用、进程初始化以及请求处理,是Nginx 服务器运行过程中提供服务的主要工作部分。Nginx 使用一个主进程来管理多个工作进程,通过内存共享等进程间通信机制实现 Nginx 的负载均衡等功能。Nginx 的结构关系如图 1 所示。

2 Java里的多线程同步机制

在多线程程式中,所有线程都是各自独立的执行体,但线程代码的模式却相同。如果这些线程协同工作,那么其线程代码无法重入控制,因此 Java 提供了相应的同步机制,从而阻止多个线程的一个或多个关键代码在任意时间执行该代码。

该机制建立在锁的概念和监视器基础上,其中监视器是关键代码周围的保护伞,锁则是监视器阻止线程进入监视器的软件。其基本理念是 :如果一个线程要进入监视器所监视的关键代码,该线程需要获取一个与之相关的锁 ;如果别的线程在使用该锁,那么Java 就会强制要求其在一个与锁以及监视器相关的区域等待 ;当锁被释放时,Java 移出等待状态中的线程,同意其获取锁,并对监视器的关键代码进行相应处理。在Java编程过程中经常使用Synchronized 方法和 Synchronized 代码块进行线程的同步。

于Nginx负载均衡及多线程智慧农业系统的设计

2.1 Synchronized方法

把 Synchronized 的 关 键 字 加 入 方 法 声 明 中以声 明synchronized()方法。在 synchronized()方法中,类成员变量访问由 synchronized()方法控制,每个类实例都会对应一个锁,如果 synchronized()方法要执行就要获取相应的锁,否则会阻塞所属线程。一旦该方法进入执行状态就会独占一个锁,且直至其返回才会释放。这种机制可以确保在同一时间对于每一个类实例,其声明为Synchronized 的成员函数最多只能有一个处于执行状态,从而避免类成员变量访问产生冲突。Java 中每个类都对应一把这样的锁,因此要控制其访问类的静态成员变量,可把类的静态成员函数声明为Synchronized。

2.2 Synchronized代码块

上述方法中, 如果代码量较多, 则声明的效率会大受影响, 因此我们可以用 Synchronized 块来解决该问题。Synchronized 块中要获取 SynObject 对应的锁才可以执行, 由于可以对任何代码块且上锁的对象任意指定,因此相对Synchronized 块方法有较高的灵活性。

3 多线程同步在系统中的应用

在智慧农业系统中,应用服务器主要负责 Web 服务器发送的指令接收和指令向嵌入式服务器的发送以及上行数据在数据库的存储。应用服务器的模块构成如图 2 所示。

于Nginx负载均衡及多线程智慧农业系统的设计

Web 服务器的指令请求发到应用服务器,应用服务器会 通过管理模块起一个进程,并运行主线程来开启指令接收的 线程,同时开启上行数据存储线程来接收嵌入式服务器上传 的监测数据,并存储到 MySQL 数据库中。指令接收线程接收 到指令数据后会启动指令发送线程来向嵌入式服务器发送指 令数据。指令接收线程和指令发送线程之间的协作通过线程 的同步机制 Synchronized 代码块实现。为防止两个不同线程 在访问共享资源时修改其内容,使用了 Java 阻塞机制,notify() 和 wait()方法。wait()使线程进入阻塞状态,notify()解 除阻塞状态的线程。两个方法的配合使用与线程同步共同作 用来保证指令接收线程和指令发送线程的正确协作。

4 农业监测系统实现

在加入 Nginx 负载均衡服务器以及应用服务器多线程后 的系统架构如图 3 所示。

在客户端和 Web 服务器之间加入了负载均衡服务器,让 Web 集群分担来自客户端的请求访问压力,提高系统的响应性 能,增强用户体验。在应用服务器加入多线程可以并发处理多 个指令请求,以提高系统的处理性能。

于Nginx负载均衡及多线程智慧农业系统的设计

5 结 语

随着互联网技术的进一步深度发展以及物联网技术的普 及,物联网与传统农业的融合进一步加深,智慧农业是未来 农业发展的必然趋势。当越来越多的农户使用智慧农业系统 时,对系统的性能就提出了更高的要求,该论文设计的系统可 以很好地满足该方面的需求。但随着用户的增加与数据的积 累,对数据进行处理也是必不可少的业务,而这正是该系统欠 缺的部分。但相信随着进一步的设计开发,这个问题一定会得 到完满解决。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

摘要:介绍了分布式计算的定义、分类,简要说明了基于云平台部署分布式计算的优势,通过一个web负载均衡案例,分析了简单、高效地进行分布式计算部署的过程。

关键字: 云平台 分布式计算 负载均衡

(全球TMT2022年6月17日讯)日前,在由存储产业技术创新联盟主办的"元宇宙存储研究与实践"开放计算技术沙龙上,来自中科大、华中大、郑州大学以及浪潮存储的"产学研用"各界专家汇聚一堂,在关注元宇宙存储发展的同时,还...

关键字: 数据中心 节点 带宽 负载均衡

摘要:网络业务量的激增和应用的特殊化都使得负载均衡成为迫切需求,Linux虚拟服务器按传输层连接对集群节点进行业务分配的方式,能便捷而高效地实现负载均衡。文中对Linux虚拟服务器集群的结构与原理进行了讨论,重点阐述了满...

关键字: 集群 虚拟服务器集群 负载均衡

首先告诉大家一件事,在十一国庆期间,引擎的机器又又。。。又扛不住了流量。经过监控分析,发现某个服务的一个实例所在的虚拟机扛不住了,所以采取临时措施流量控制之后,问题解决了,但还是造成了不小的损失。经过此次故障,以及分析故...

关键字: 负载均衡

摘 要 :文中分析了传统软硬件划分方法的缺点,基于嵌入式系统产品开发实际,提出了一种去中心化的软硬件划分方法。文中详细描述了该方法的五条指导性原则,并用一个开发实例说明了上述原则的应用方法,验证了该方法的有效性。该划分...

关键字: 去中心化 软硬件划分 负载均衡 软件固件化 嵌入式 并发性

摘 要:针对STP和PVST协议的特点,利用网络仿真软件进行仿真,通过对仿真结果的分析和比较,掌握两种协议的工作原理及特点。特别是通过仿真环境的实现,体现出PVST协议具备负载均衡的优势。

关键字: 网络仿真 Packet Tracer 负载均衡 协议分析

我们知道为了CPU之间减少“干扰”,每个CPU上都有一个任务队列。运行的过程种可能会出现有的CPU很忙,有的CPU很闲,如下图所示:为了避免这个问题的出现,Linux内核实现了CPU可运行进程队列之间的负载均衡。因为负载...

关键字: 负载均衡

前言今天我们来深度解密一下负载均衡器LVS的秘密,相信大家看了你管这破玩意儿叫负载均衡?这篇文章后,还是有不少疑问,比如LVS看起来只有类似路由器的转发功能,为啥说它是四层(传输层)负载均衡器呢,今天我们就来逐渐揭开LV...

关键字: 负载均衡

前言今天我们来深度解密一下负载均衡器LVS的秘密,相信大家看了你管这破玩意儿叫负载均衡?这篇文章后,还是有不少疑问,比如LVS看起来只有类似路由器的转发功能,为啥说它是四层(传输层)负载均衡器呢,今天我们就来逐渐揭开LV...

关键字: 负载均衡

“为什么负载均衡一般采用混合方式七层负载为什么比四层负载性能要低?四层负载概念真的对吗?文章较长,各位能不能持久到最后?image在正式开篇之前,先说几个瓜:硬件负载均衡的性能最高,其次是软件负载均衡的四层负载,最差的是...

关键字: 负载均衡
关闭
关闭