王仡捷
目前,互联网技术被广泛应用到科研教育、物流仓储、金融证券、电子商务、电子政务等领域,使人类社会的自动化与信息化水平不断提高.在这一过程中,网站的访问流量越来越大,并发程度越来越高,特别是大数据和人工智能时代的来临,这种情况更为突出.因此,如何使Web服务器适应高并发访问已成为现代软件设计的重点.相关学者提出了Mapreduce与云计算解决的方案.对于基于这种方案建立的网站,每天有数以亿计的用户在使用,维护比较困难,并且建设周期长,费用比较高[1].后来,计算机学者提出了Node.JS 的分布式服务器集群方案,更好地解决了访问用户多和服务器并发操作频次高的问题,使互联网普适性与人类社会共享化水平得到进一步的提高.
Node.JS 为JavaScript 运行环境,封装Chrome V8引擎.Node.JS对特殊用例进行优化,并且提供替代的API,使Chrome V8 引擎能够在非浏览器环境中运行.其主要目的就是使服务器端执行并且运行JavaScript 代码.一直以来,JavaScript 都是以浏览器作为基础的客户端脚本语言,有了Node.JS 技术之后,JavaScript 不再只依赖于浏览器解析,还能使其代码在服务器端运行,使其成为服务器端语言.因为Node.JS 具有异步非阻塞特点,其能够在高并发、长连接的环境中具有明显优势.所以,本文以Node.JS作为基础设计高并发网络应用架构.
使用Node.JS 技术设计高并发网络应用架构,可以快捷、简单地创建互联网应用和轻量级服务平台.高并发网络应用架构由数据存储层、负载均衡层和核心处理层构成,各层有自己独立的功能,又相互协作无法分离.在进行设计的过程中,利用合适的负载均衡算法对用户情况进行分配,可有效缓解负载压力,降低用户的响应时间.利用核心处理层实现网络应用前后端业务流程与内部逻辑,核心处理层为架构基础,也是网络应用中央控制模块,能够对业务逻辑进行处理,实现交互模块和内部模块通信的管理.数据存储层能够存储数据,通过分布式存储使数据存储性能瓶颈和功率问题得到解决.整体网络应用将事件驱动机制、负载均衡技术与Node.JS 平台作为基础,用户通过单线程的方式处理请求,使服务器资源开销得到缩小,通过异步非阻塞I/O模型使CPU 资源使用率增加[2].图1 为高并发网络应用架构.
图1 高并发网络应用架构
在该架构中,Node.JS技术是基础,用于快速地搭建响应速度快、易于扩展的网络应用.然而对于GZIP编码、静态文件、HTTP缓存、SSL处理、负载平衡和反向代理等,都可以通过Nginx 来完成,从而减小Node.JS 的负载,并通过Nginx 强大的缓存来节省网站的流量从而提高网站的加载速度.Nginx技术能够承受高负载的考验,根据官方数据显示,最高能够支持50 000个并发连接线路.Nginx的稳定性比较高,使用分阶段资源分配技术,使其CPU与内存占用率低,避免活动连接,此特点能够使Nginx从容地应对高并发访问等问题对网络稳定的影响.Nginx 还具备高部署的功能,基于正常服务改变负载均衡算法.核心处理模块能够对业务逻辑进行处理,从而展现视图,主要由控制层、内存缓存服务、数据访问层与视图层等部分构成.各部分相互连接,使网络应用构架松耦合性与强可扩展性得到保证.图2 为核心处理层四部分基本交互时序,通过图2可以清楚地看到不同部分的交互时序流程[3].
图2 核心处理层四部分基本交互时序
视图层的UI展现层为EJS,其为基于Node.JS的高并发模块引擎,使用过程方便,具有强大的功能,在前后端数据交互过程中性能良好.将EJS作为视图层核心技术,能够使应用开发的效率得到提高.
在数据存取抽象操作过程中,数据访问层为主要操作接口,是具备操作一致性的数据访问接口,方便业务逻辑的统一调用.将MongoDB 数据库作为网络架构,利用Mongoose 使MongoDB 的数据操作得到实现.数据访问层的操作效率和网络应用架构整体性能具有密切关系,良好数据库和驱动程序能够进一步增强网络应用的高并发能力.
在网络应用控制层中使用Express 框架,目的是将Node.JS 作为基础的高并发网络架构,进一步地增强架构整体可扩展性与灵活性,方便在未来使用过程中的维护和升级.在实际使用的过程中,通过需求使业务逻辑设计得到实现.在业务逻辑升级、增强与更换的过程中,通过此框架很容易将全新功能融入进来[4].
内存缓存服务层指的是应用架构辅助层.增加内存缓存服务层,使得到数据时间与处理时间得以改善,有效实现网络应用高并发的性能.Redis为实际工程中最佳选择,读写性能良好.Redis的查询速度较快,主要是因为其能够通过TCP对数据直接访问,还能够并发海量高速读写需求.将高并发用户访问环境作为基础,在用户使用和体验过程中以响应速度为重点,实现用户对数据频繁地访问,在Redis 中实现用户频繁访问数据的存储,降低数据库的访问频率,利用Redis高效化读写性能降低应用的响应速度,使用户体验得到提高.
数据存储层为架构基础数据层,能够实现对业务数据持久化地存储.为了适应高并发网络应用架构的需求,一般都使用MongoDB,其海量数据分布式计算与存储具有一定的优势,并且具备可扩展性、可用性、灵活性与安全性.MongoDB对大数据存储效率与性能还能够实现完整索引、分布式存储与自动分片等功能[5].
上述设计的高并发网络应用架构,基于Node.JS技术,使技术社区网络得到实现.通过Java编程语言对后台框架与逻辑进行设计.由于架构中央控制层为核心处理层,使业务逻辑主体与第三方组件交互得到实现,包括缓存组件、数据库等.图3为技术社区网络应用功能的结构.
图3 技术社区网络应用功能的结构
基于Node.JS 准则规范实现新型框架设计,提高Web应用开发效率,和传统框架对比有效性有所提高.此架构模式较为普通,通过分层思想实现分区分开地展示,模型表示为服务器端数据结构,前端表现层为视图,控制器能够对业务逻辑进行实现.
业务控制层主要目的就是承上启下,并且兼顾逻辑层.接收前端传输用户输入,对其进行格式化,在业务逻辑接口中实现数据的传递,并且对数据开展深加工处理.前后相互衔接过程主要包括以下内容:
(1)利用Node.JS内置对象,能够使前端和后端数据交互实现,利用Request 对象得到前台输入数据信息,Response对象能够使业务数据和结果通过后台处理,之后发送到前端,并且利用相应方式展现在页面中.
(2)整合数据访问层和业务控制层,将数据访问层耦合到相应模块的业务控制层中,也就是业务控制层对数据加工处理之后,再通过数据访问层实现数据持久化操作.
此应用系统是关于技术社区的,所以应用包括回复、邮件、标签、话题、用户、上传和聚合信息等控制器.上述控制器能够实现模块业务逻辑,利用数据访问层与松耦合的方式交互,保证整体结构的良好性和易扩展性[6].图4 为数据存储的流程.
图4 数据存储的流程
EJS 框架属于系统架构和技术社区中视图引擎展示层核心前端的展示框架,EJS为实际使用过程中的前端展示组件.一般都是和视图模块、EJS框架、错误处理组件、视图工具组件相互结合,其中,DJS 框架和错误处理组件是主要部分.模板的创建为页面展示与业务逻辑的分离,也就是动静分离,利用CSS 层与Html 层叠样式将静态内容展现出来,通过Java代码得到后端传输数据动态创建业务模型.
页面展示部分为Html 结合CSS 静态代码片断,由于要展示在浏览器中,所以满足W3C标准.应用业务逻辑利用Java代码实现,接收Response对前端数据发送,实现数据格式化处理,更方便实现对用户的展现.
正确使用日志在程序设计人员编写程序的过程中尤为重要,调试信息也是记录在日志中的.日志模块基于Seelog 实现开发,根据Level 的不同值控制不同类型日志的输出,从而简化开发程序与部署程序过程,提高实用性.一般地,在程序开发过程中设置Level 值,在程序部署过程中提高Level值,对开发过程中调试信息屏蔽.日志模块在记录日志时融入了Seelog部署中的思想,根据不同Level 值记录日志.但Webgo 日志系统是轻量级的,仅利用系统自带的接口传输信息,用户通过此接口实现输出和自定义设置[7].
在几年的时间里,Node.JS 逐渐发展成为一个成熟的开发平台,吸引了许多开发者.有许多大型高流量网站都采用Node.JS进行开发,此外,开发人员还可以使用他开发一些快速移动Web框架.
利用Node.JS技术解决异步并发网络应用架构问题,和不同组件技术相互结合,保证了架构性能,提高了扩展性.在实践过程中,利用业务需求改变各个维度具体实现方案,通过最前端负载均衡到最后底层分布式数据存储都能够使用不同实现方式创建系统,对高层服务接口与平台一致性进行保证,使中小型网络对中等规模高并发的性能需求得到满足.