## 一,session共享
首先第
一个要
解决的就是sesison共享的问题,如下图。

通常有两种
解决方案,第1种是配置
Nginx的
负载集群策略为ip_hash,第2种是将session存储到其它地方,一般推荐放到re
dis中。
第1种方案适合于临时
解决或者是为了兼容历史项目,但是从应用服务器无状态的角度考虑,推荐把
用户会话session放到re
dis,如下图。

## 二,本地缓存
如果使用本地缓存,当从单体迁移到集群后,就会面临缓存同步的问题,如下图。

最佳实践是上分布式缓存,既
解决了缓存同步的问题,也释放了应用服务器的内存资源,如下图。

## 三,
文件服务
应用服务器在上集群之前,
文件通常会放在本地,或者单独的
文件服务器上,因为
文件服务需要占用大量的硬盘空间,以上两种方案都无法很好的
解决硬盘扩容的问题,最佳实践是放到云存储上,比如阿里云的OSS,或者
腾讯云的COS上,这样可以做到按需扩容,如下图。

## 四,分布式环境下线程同步问题
在单机环境下,使用lock就可以
解决线程同步的问题,一旦上了集群之后,lock就不管用了,这时需要上分布式锁,分布式锁的
解决方案也有很多,我这里推荐使用re
dis的setnx,需要注意的是,如果re
dis是集群部署的,需要考虑这种情形:假设我们在re
dis的主节点上
添加了一把分布式锁,不幸的是主节点挂掉了,而且主节点上的锁还没有同步到从节点上,如果此时有客户端来请求获得同一把锁,那么它将顺利地获得锁,之前那把锁会被无情地忽视掉,这就是分布式锁在Re
dis集群中遇到的麻烦。
### 最后
很多程序员,整天沉浸在业务
代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。
我把私藏的这套并发体系的笔记和思维脑图
分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以
快速掌握并发编程。
不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞
支持一下
**[Java面试精选题、架构实战文档传送门:点击这里免费领取](https://gitee.com/vip204888/java-p7)**
**整理不易,觉得有帮助的朋友可以帮忙点赞
分享支持一下小编~**
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。