来了!Java小程序开发实例!聊聊集群中会出现的问题

一个项目最开始可能都是通过一个war包开始萌芽,把这个war包放到tomcat里面运行起来,整个项目就ok了;

But,随着并发量,用户量达到一定数目,一个tomcat就搞不定了,这个时候会用到Nginx,使用Nginx来做分流;

如果是一些查询页面没什么问题,可一旦项目要用到登陆,这就捅娄子了,用户登陆的Session是存放在服务器上,而当用户访问另外一个服务器就会出现没有登陆的情况;

不过在解决这问题之前,先讲下Nginx的基本使用

1. Nginx多tomcat负载配置 Nginx可以提供当有多个服务器的时候可以提供负载均衡的功能,如果有某个服务器宕机可以提供故障转移,当出现网络波动的时候可以提供失败重试机制,不管是什么样的机制,首先需要配置多个服务,这里的服务使用Upstream进行配置

1.1. Upstream Server配置 upstream 主要配置如下:

IP地址和端口号:配置上游服务器的IP地址和端口

1.2. 负载均衡算法 1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。

2、weight(轮询权值)

weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

3、ip_hash

每个请求按客户端P的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。俗称IP绑定。

2. Session一致性解决方案 可以看到前面讲负载均衡算法的时候可以使用ip_hash来实现session一致性的问题,因为当有多个tomcat的时候,对于某个客户端的登陆请求,由于其ip是固定的,所以最终一

还是会路由的固定的tomcat上;

实际除开上面的这种解决方案以外,还有另外一种SESSION一致性的解决方案,使用Redis来存放SESSION的内容,使用Spring Session框架,其底层其实就是重写了HttpSession的获取方式

2.1. pom文件修改

image.png 2.2. 新增properties文件

application.properties文件内容如下,增加redis相关配置

image.png 2.3. 新增启动类

image.png 2.4. 启动Redis

启动 /redis-serve redis.conf

2.5. 测试

用户登陆后

image.png 这样相应的登陆的session信息就存放到了Redis中

总目录展示

该笔记共八个节点(由浅入深),分为三大模块。

高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。该笔记将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。

一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。因此,将用一个节点来专门讲解如何设计秒杀减库存方案。

高可用。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。

おすすめ

転載: blog.csdn.net/huang9604/article/details/118030605