1.lua解决高并发问题,nginx可直接从redis和mysql拿数据

用户访问页面时 ,要经过广告活动微服务从mysql获取照片等资源,当大量刷网页请求时,会不断请求mysql拿数据,并发量大了,mysql会挂,解决方法加个redis。
但是Java代码是放在tomcat里,tomcat最好的并发量是上千,并发量高了后,tomcat也会挂,因此如果换个可以高并发的服务器nginx(最高并发量5w),openresty(里面包含nginx和lua函数库)可以达到10w以上。nginx和openresty又称http服务器、web服务器,只能处理静态请求,不能处理动态页面,例如nginx不能直接连接mysql获取数据,一般得通过java连接数据库获取数据,但是java要部署到tomcat,tomcat并发量不高,为了解决这个问题使用lua嵌入脚本语言,于是nginx可以直接连redis,直接连mysql获取数据。解决方式:多级缓存

2.nginx限流
nginx提供两种限流的方式:
-
一是控制速率 -漏桶算法实现控制速率限流
-
二是控制并发连接数 -利用连接数限制 某一个用户的ip连接的数量来控制流量
3.Canal实现同步
canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。

master-slave:master数据库将数据的变化记录在Binary log中,slave从Binary log获取变化记录,更新数据。canal模拟slave实现数据同步

canal-server伪装成slave通过binlog与mysql进行数据同步,canal-client监听canal-server,如果canal-server数据变化则将最新的数据存储到redis中(canal-client不需要连数据库,直接通过feign调用相应微服务查就行,因为可能不能微服务连接的是不同的数据库,如果用canal-client连接数据库则可能要连好多个,没必要)
使用Lua和Nginx优化高并发与数据库同步解决方案
本文介绍了如何通过引入Lua和Nginx解决Java应用的高并发问题,以及利用Canal实现数据库同步。在面临大量并发请求时,传统的Java+Tomcat架构可能无法应对,此时可以使用能支持更高并发量的Nginx或OpenResty。通过Lua脚本,Nginx可以直接与Redis和MySQL交互,减轻数据库压力。此外,还讨论了Nginx的两种限流策略:速率控制和并发连接数限制。另外,Canal作为数据库监听工具,可以捕获MySQL的数据变更,实现实时同步到Redis,进一步优化微服务架构。

6334

被折叠的 条评论
为什么被折叠?



