首页> 中国专利> 利用nginx和redis提升价格指数网站访问吞吐量的方法及系统

利用nginx和redis提升价格指数网站访问吞吐量的方法及系统

摘要

本公开属于网站服务技术领域,提供了一种利用nginx和redis提升价格指数网站访问吞吐量的方法及系统,包括以下步骤:步骤S01:nginx获取访问请求数据信息,执行步骤S02;步骤S02:基于所获取的访问请求数据信息redis中是否存在页面html,若存在则执行步骤S04,否则执行步骤S03;步骤S02:基于OpenResty技术,nginx向tomcat发送定时并更新访问请求,将更新后的访问请求压缩后存储到redis,更新redis,直到redis中存在页面html,执行步骤S04;步骤S04:基于redis获取页面html,返回访问请求页面。本公开解决了tomcat服务器高并发时的瓶颈问题,提升了单台服务器的承载能力,降低了集群扩展的成本。

著录项

  • 公开/公告号CN113836468A

    专利类型发明专利

  • 公开/公告日2021-12-24

    原文格式PDF

  • 申请/专利权人 山东亿云信息技术有限公司;

    申请/专利号CN202111138298.9

  • 发明设计人 李龙;邵青峰;闫学君;王雷鑫;

    申请日2021-09-27

  • 分类号G06F16/958(20190101);H04L12/26(20060101);H04L29/08(20060101);

  • 代理机构37221 济南圣达知识产权代理有限公司;

  • 代理人董雪

  • 地址 250014 山东省济南市高新区新泺大街2008号银荷大厦B座3层

  • 入库时间 2023-06-19 13:49:36

说明书

技术领域

本公开属于网站服务技术领域,具体涉及一种利用nginx和redis提升价格指数网站访问吞吐量的方法及系统。

背景技术

本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。

基于关系型数据库开发的价格指数网站,一般使用tomcat容器进行部署,定时更新网站中的数据信息;其中,图片数量较多,采用单文件体积小的静态文件。然而tomcat单体应用架构下部署的并发用户峰值为150-200人,当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,行业内通用做法是使用多台服务器构建集群并利用nginx实现负载均衡。但是,这种方法的服务器投入成本过高,以1万人同时访问为例,不考虑高可用的情况,一组服务至少需要部署2台服务器,包括一台应用服务器和一台数据库服务器,保证1万人正常访问则需要2*20=40台服务器支撑。

基于此,通过利用nginx+redis实现高性能缓存的方式提高单台tomcat的容载率,有效减少了服务器的费用支出;这种web访问的架构图如图1所示,http请求经过nginx负载均衡转发到tomcat,tomcat再从redis读取数据,整个链路过程是串行设置,但是,当tomcat挂掉或者tomcat线程数被消耗完,存在着数据无法正常返回的难题。

因此,有必要进行网站访问吞吐量的相关研究,解决tomcat服务器高并发时的瓶颈问题。

发明内容

为了解决上述问题,本公开提出了一种利用nginx和redis提升价格指数网站访问吞吐量的方法及系统,解决了tomcat服务器高并发时的瓶颈问题,提升了单台服务器的承载能力,降低了集群扩展的成本。

根据一些实施例,本公开的第一方案提供了一种利用nginx和redis提升价格指数网站访问吞吐量的方法,采用如下技术方案:

一种利用nginx和redis提升价格指数网站访问吞吐量的方法,包括以下步骤:

步骤S01:nginx获取访问请求数据信息,执行步骤S02;

步骤S02:基于所获取的访问请求数据信息判断redis中是否存在页面标记语言,若存在则执行步骤S04,否则执行步骤S03;

步骤S03:基于OpenResty技术,nginx向tomcat发送定时并更新访问请求,将更新后的访问请求压缩后存储到redis,更新redis,直到redis中存在页面标记语言,执行步骤S04;

步骤S04:基于redis获取页面标记语言,返回访问请求页面。

作为进一步的技术限定,在步骤S02之前,需要进行访问请求数据信息的压缩,具体过程为:

当访问请求获取的数据大于1K时,nginx压缩之后再保存到redis,压缩会消耗cpu时间,小于1K的数据不压缩;

通过lua实现redis连接池,使用lua-zlib库对请求数据进行压缩。

作为进一步的技术限定,在步骤S02中,判断redis中是否存在页面标记语言的过程为:基于nginx所获取访问请求数据信息,在nginx配置文件中嵌入lua代码,将请求url编码之后作为key,利用OpenResty的lua-resty-redis模块连接redis并获取数据,根据返回结果判断是否存在页面标记语言。

进一步的,redis的value值用json格式保存{length:xxx,content:yyy},其中content是压缩后的页面内容,length是content压缩前的大小,length字段是为了在读取redis时,根据length的大小来判断是否要解压缩content的数据。

作为进一步的技术限定,在步骤S03中,nginx通过lua定时器设置常用请求,定时请求tomcat的页面的url,通过lua-zlib库对返回的页面进行压缩并存储到redis中。

进一步的,tomcat经过数据缓存的有效期挂掉后,使用缓存数据返回。

作为进一步的技术限定,在步骤S03中,引入OpenResty技术,使用OpenResty的lua-resty-redis模块使nginx具备直接访问redis的能力,不占用tomcat线程,在tomcat暂时挂掉时能正常处理请求,减少响应时长。

作为进一步的技术限定,所述利用nginx和redis提升价格指数网站访问吞吐量的方法通过管理后台配置需要缓存的url,配置的内容包括配置缓存url、缓存有效期、定时更新时间。

根据一些实施例,本公开的第二方案提供了一种利用nginx和redis提升价格指数网站访问吞吐量的系统,采用如下技术方案:

一种利用nginx和redis提升价格指数网站访问吞吐量的系统,包括:

获取信息模块,用于nginx获取访问请求数据信息;

判断模块,用于基于所获取的访问请求数据信息判断redis中是否存在页面标记语言,若存在则直接进入浏览模块;否则基于OpenResty技术,nginx向tomcat发送定时并更新访问请求,将更新后的访问请求压缩后存储到redis,更新redis,直到redis中存在页面标记语言;

浏览模块,用于基于redis获取页面标记语言,返回访问请求页面。

根据一些实施例,本公开的第三方案提供了一种计算机可读存储介质,采用如下技术方案:

一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开第一方面所述的利用nginx和redis提升价格指数网站访问吞吐量的方法中的步骤。

根据一些实施例,本公开的第四方案提供了一种电子设备,采用如下技术方案:

一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开第一方面所述的利用nginx和redis提升价格指数网站访问吞吐量的方法中的步骤。

与现有技术相比,本公开的有益效果为:

本公开引入OpenResty技术,使用OpenResty的lua-resty-redis模块使nginx具备直接访问redis的能力,不占用tomcat线程,tomcat暂时挂掉仍可正常处理请求,减少响应时长,提高系统并发、容错能力。

附图说明

构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。

图1是现有技术中web访问的架构图;

图2是本公开实施例一中的利用nginx和redis提升价格指数网站访问吞吐量的方法的流程图;

图3是本公开实施例一中的定时更新流程图;

图4是本公开实施例一中的请求转发流程图;

图5是本公开实施例一中的单进程定时更新流程图;

图6是本公开实施例一中的优化后的请求流程图;

图7是本公开实施例二中的利用nginx和redis提升价格指数网站访问吞吐量的系统的结构框图。

具体实施方式:

下面结合附图与实施例对本公开作进一步说明。

应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。

需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。

在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。

为更清楚地理解技术方案,针对专业数据进行详细的解释:

nginx,高性能的http和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务;

redis,远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API;

html,超文本标记语言,是一种标记语言;

OpenResty,被称为ngx_openresty,是基于ngin的核心web应用程序服务器;基于nginx和lua的高性能web平台,OpenResty通过汇聚各种设计精良的nginx模块,从而将nginx有效地变成一个强大的通用web应用平台;

tomcat,是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选;

lua,一种脚本语言;

lua-zlib,基于C语言编写的库;

json,字符串;

url,Uniform Resource Locator,统一资源定位器。

实施例一

本公开实施例一介绍了一种利用nginx和redis提升价格指数网站访问吞吐量的方法。

结合图1所示的现有技术中web访问的架构图进行访问请求的分析,请求的压力主要集中在tomcat和redis,原因如下:

1、tomcat默认配置的最大请求数是150,也就是说同时支持150个并发,当然,tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和cpu数量都有很大关系的。更好的硬件,更多的处理器都会使tomcat支持更多的并发。tomcat默认的http实现是采用阻塞式的Socket通信,每个请求都需要创建一个线程处理,这种模式下的并发量受到线程数的限制。

2、并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算,那并发能力势必会下降。如果每个请求都含有很多的数据库操作,那么对于数据库的性能要求也是非常高的。对于单台数据库服务器来说,允许客户端的连接数量是有限制的。

因此,本实施例引入OpenResty技术,使用OpenResty的lua-resty-redis模块使nginx具备直接访问redis的能力,不占用tomcat线程,tomcat暂时挂掉仍可正常处理请求,减少响应时长,提高系统并发、容错能力;解决现有技术、流程无法解决的tomcat服务器高并发时的瓶颈问题,提升单台服务器的承载能力,降低集群扩展的成本。

如图2所示的一种利用nginx和redis提升价格指数网站访问吞吐量的方法,包括以下步骤:

步骤S01:nginx获取访问请求数据信息,执行步骤S02;

步骤S02:判断redis中是否存在页面html,若存在则执行步骤S04,否则执行步骤S03;

步骤S03:基于OpenResty技术,nginx向tomcat发送定时并更新访问请求,将更新后的访问请求压缩后存储到redis,更新redis,直到redis中存在页面html,执行步骤S04;

步骤S04:基于redis获取页面html,返回访问请求页面。

作为一种或多种实施方式,在步骤S02之前,需要进行访问请求数据信息的压缩,具体过程为:

当访问请求获取的数据大于1K时,nginx压缩之后再保存到redis,压缩会消耗cpu时间,小于1K的数据不压缩;

通过lua实现redis连接池,使用lua-zlib库对请求数据进行压缩。

例如,redis的value值用json格式保存{length:xxx,content:yyy},其中content是压缩后的页面内容,length是content压缩前的大小,length字段是为了在读取redis时,根据length的大小来判断是否要解压缩content的数据。

作为一种或多种实施方式,在步骤S02中,判断redis中是否存在页面标记语言的过程为:基于nginx所获取访问请求数据信息,在nginx配置文件中嵌入lua代码,将请求url编码之后作为key,利用OpenResty的lua-resty-redis模块连接redis并获取数据,根据返回结果判断是否存在页面标记语言。

作为一种或多种实施方式,如图3所示的定时更新流程图,在步骤S03中,nginx通过lua定时器设置常用请求,定时请求tomcat的页面的url,通过lua-zlib库对返回的页面进行压缩并存储到redis中;tomcat经过数据缓存的有效期挂掉后,使用缓存数据返回。

在本实施例中,缓存有效期一般设置为一个小时,可保证一个小时内tomcat挂掉后仍可使用缓存数据返回;已知指数网站的价格指数数据会在整点进行更新,缓存的定时更新时间设置短一些,比如10分钟,保证缓存及时更新。

作为一种或多种实施方式,如图4所示的请求转发流程图,引入OpenResty技术,使用OpenResty的lua-resty-redis模块使nginx具备直接访问redis的能力,不占用tomcat线程,在tomcat暂时挂掉时能正常处理请求,减少响应时长。

具体的,通过浏览器发送访问请求,nginx会先根据请求从redis中获取页面html;如果redis中不存在页面数据,nginx会从tomcat中获取页面数据,同时更新redis,最后将页面html返回给浏览器。

作为一种或多种实施方式,如图5所示的单进程定时更新流程图,nginx的所有worker进程都可以处理前端请求转发到redis,只有nginx worker 0才运行定时任务定时更新redis,lua脚本中通过ngx.worker.id()获取worker进程编号。

作为一种或多种实施方式,所述利用nginx和redis提升价格指数网站访问吞吐量的方法通过管理后台配置需要缓存的url,配置的内容包括配置缓存url、缓存有效期、定时更新时间。例如:modifyurl=index&&expire=3600000&&intervaltime=300000&sign=xxx x,其中,sign的值是管理后台secretkey对modifyurl=index&&expire=3600000&&intervaltime=300000签名运算得到的,nginx端用相同的secretkey对modifyurl=index&&expire=3600000&&intervaltime=300000签名运算,得到的值与sign的值相同则鉴权通过,允许修改nginx的配置。

本实施例采用了如图6所示的优化请求流程图,从应用成效看,采用nginx和redis实现高性能缓存的方式突破传统tomcat服务器的并发请求瓶颈,降低了tomcat并发请求的次数,提高了单台服务器处理企业级应用的效率。单从价格指数网站这一个场景上,经实际测试,一台16C 32G配置的服务器,混合部署tomcat应用和redis可支撑1W用户同时在线访问,cpu占用率不到40%,同时请求延时在100ms以内,相较于原有tomcat负载均衡集群的部署方式,节约服务器节点近千台,直接为企业节省服务器费用支出近百万元,间接为企业运维服务器相关人力投入节省近10余人的运维团队,经济效益显著。

实施例二

本公开实施例二介绍了一种利用nginx和redis提升价格指数网站访问吞吐量的系统。

如图7所示的一种利用nginx和redis提升价格指数网站访问吞吐量的系统,包括:

获取信息模块,用于nginx获取访问请求数据信息;

判断模块,用于基于所获取的访问请求数据信息判断redis中是否存在页面html,若存在则直接进入浏览模块;否则基于OpenResty技术,nginx向tomcat发送定时并更新访问请求,将更新后的访问请求压缩后存储到redis,更新redis,直到redis中存在页面html;

浏览模块,用于基于redis获取页面html,返回访问请求页面。

详细步骤与实施例一提供的利用nginx和redis提升价格指数网站访问吞吐量的方法相同,在此不再赘述。

实施例三

本公开实施例三提供了一种计算机可读存储介质。

一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开实施例一所述的利用nginx和redis提升价格指数网站访问吞吐量的方法中的步骤。

详细步骤与实施例一提供的利用nginx和redis提升价格指数网站访问吞吐量的方法相同,在此不再赘述。

实施例四

本公开实施例四提供了一种电子设备。

一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开实施例一所述的利用nginx和redis提升价格指数网站访问吞吐量的方法中的步骤。

详细步骤与实施例一提供的利用nginx和redis提升价格指数网站访问吞吐量的方法相同,在此不再赘述。

上述虽然结合附图对本公开的具体实施方式进行了描述,但并非对本公开保护范围的限制,所属领域技术人员应该明白,在本公开的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本公开的保护范围以内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号