diff --git a/notes/分布式问题分析.md b/notes/分布式问题分析.md index ebe10ae4..d7433c3c 100644 --- a/notes/分布式问题分析.md +++ b/notes/分布式问题分析.md @@ -186,7 +186,9 @@ Java 提供了两种内置的锁的实现,一种是由 JVM 实现的 synchroni **(一)基于 MySQL 锁表** -该实现方式完全依靠数据库唯一索引来实现。当想要获得锁时,就向数据库中插入一条记录,释放锁时就删除这条记录。如果记录具有唯一索引,就不会同时插入同一条记录。这种方式存在以下几个问题: +该实现完全依靠数据库的唯一索引。当想要获得锁时,就向数据库中插入一条记录,释放锁时就删除这条记录。如果记录具有唯一索引,就不会同时插入同一条记录。 + +这种方式存在以下几个问题: 1. 锁没有失效时间,解锁失败会导致死锁,其他线程无法再获得锁。 2. 只能是非阻塞锁,插入失败直接就报错了,无法重试。 @@ -245,11 +247,11 @@ Zookeeper 提供了一种树形结构级的命名空间,/app1/p_1 节点表示 **(六)羊群效应** -在步骤二,一个节点未获得锁,需要监听监听自己的前一个子节点,这是因为如果监听所有的子节点,那么任意一个子节点状态改变,其它所有子节点都会收到通知,而我们只希望它的下一个子节点收到通知。 +在步骤二,一个节点未获得锁,需要监听监听自己的前一个子节点,这是因为如果监听所有的子节点,那么任意一个子节点状态改变,其它所有子节点都会收到通知(羊群效应),而我们只希望它的后一个子节点收到通知。 # 五、分布式 Session -在分布式场景下,一个用户的 Session 如果只存储在一个服务器上,那么当负载均衡器把用户的下一个请求转发到另一个服务器上,该服务器没有保存用户的 Session,就可能导致用户需要重新进行登录等操作。 +在分布式场景下,一个用户的 Session 如果只存储在一个服务器上,那么当负载均衡器把用户的下一个请求转发到另一个服务器上,该服务器没有用户的 Session,就可能导致用户需要重新进行登录等操作。

@@ -305,7 +307,7 @@ Zookeeper 提供了一种树形结构级的命名空间,/app1/p_1 节点表示 - [负载均衡算法及手段](https://segmentfault.com/a/1190000004492447) - [Redirection and Load Balancing](http://slideplayer.com/slide/6599069/#) - [Session Management using Spring Session with JDBC DataStore](https://sivalabs.in/2018/02/session-management-using-spring-session-jdbc-datastore/) -- [Apache Wicket User Guide - Reference Documentation](# Apache Wicket User Guide - Reference Documentation) +- [Apache Wicket User Guide - Reference Documentation](https://ci.apache.org/projects/wicket/guide/6.x/) - [集群/分布式环境下 5 种 Session 处理策略](http://blog.csdn.net/u010028869/article/details/50773174?ref=myread) - [浅谈分布式锁](http://www.linkedkeeper.com/detail/blog.action?bid=1023) - [深入理解分布式事务](https://juejin.im/entry/577c6f220a2b5800573492be)