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连接数据库则可能要连好多个,没必要)