微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
多级缓存
文章目录
- 微服务框架
- 多级缓存
- 48 多级缓存
- 48.6 Tomcat集群的负载均衡
- 48.6.1 Tomcat集群的负载均衡
48 多级缓存
48.6 Tomcat集群的负载均衡
48.6.1 Tomcat集群的负载均衡
OK,到现在我们已经实现了 由 OpenResty 直接向Tomcat 发起请求,获得数据的流程
【笔者是直接把Tomcat 部署到了 Linux 服务器本身】
实际情况中,Tomcat 可能会有多台,这样的话,请求时就需要实现一个负载均衡
它本身并不难
然后改一下反向代理配置
但是,非常可惜的一个点,进程缓存不能共享
如果硬要实现, 进程缓存就需要在多台 Tomcat 服务器上都 写上那些代码【因为负载均衡 →轮询!!!!!!】
- 消耗额外空间
- 缓存命中率也不高了
现在我想这样一件事,
只要是访问10001 之后,永远都有缓存,我就必须让 /item/ 10001 这个请求,每次都走到同一个Tomcat 服务器,这样才能保证这个缓存一直生效
【这样我们的 JVM 进程缓存才有意义】
但是现在是轮询,肯定是做不到的
【解决办法】
修改负载均衡算法
现在就来实现一下
这样就定义好了
重新加载Nginx
这一次,我踏马直接在Linux 服务器上跑起来俩,一个是我们刚刚的 8888,再跑一个 8889
OK
现在来访问 ,先 10001
OK, 10001 访问成功, 看看是哪台 服务器接收到了请求
OK, 8889 拿到了请求
再来一次【预期效果,如果是轮询,就应该轮到 8888 了,直接看看就完事儿】
查看日志
8888 并没有变,
8889 也没有变, 这说明什么,它绝对走的 是 8889 的进程缓存
现在换个id
OK,查看日志
我淦,还是 8889
再试试,这个算法到底咋算的
OK,10003 是 8888 接到了,再试一个
10004 也是 8888 接到了,总之,现在实现了“能定死找对Tomcat 服务器了”
这就是对于多台Tomcat 服务器的 负载均衡,并且确保 JVM 进程缓存永远生效
黑马,你是我的神!!!!!!!!!!!