@@ -66,7 +66,7 @@ public static String random() {
6666}
6767```
6868
69- 因为使用了非线程安全的集合,所以在访问操作时操作的是集合的拷贝,下面几种轮训方式中也是这种思想 。
69+ 因为使用了非线程安全的集合,所以在访问操作时操作的是集合的拷贝,下面几种轮询方式中也是这种思想 。
7070
7171写一个模拟请求方法,请求10w次,记录请求结果。
7272
@@ -102,9 +102,9 @@ IP:192.168.1.4,次数:25082
102102
103103每台服务器被访问的次数都趋近于 2.5w,有点负载均衡的意思。但是随机毕竟是随机,是不能保证访问次数绝对均匀的。
104104
105- ## 2. 轮训访问
105+ ## 2. 轮询访问
106106
107- 轮训访问就简单多了 ,拿上面的熊1到熊4来说,我们一个接一个的啪啪 - 打脸,熊1打完打熊2,熊2打完打熊3,熊4打完打熊1,最终也是实现了被打均衡。但是保证均匀总是要付出代价的,随机访问中需要随机,轮训访问中需要什么来保证轮训呢 ?
107+ 轮询访问就简单多了 ,拿上面的熊1到熊4来说,我们一个接一个的啪啪 - 打脸,熊1打完打熊2,熊2打完打熊3,熊4打完打熊1,最终也是实现了被打均衡。但是保证均匀总是要付出代价的,随机访问中需要随机,轮询访问中需要什么来保证轮询呢 ?
108108
109109``` java
110110/* * 服务器列表 */
@@ -136,7 +136,7 @@ public static String randomOneByOne() {
136136}
137137```
138138
139- 由代码里可以看出来,为了保证轮训 ,必须记录上次访问的位置,为了让在并发情况下不出现问题,还必须在使用位置记录时进行加锁,很明显这种互斥锁增加了性能开销。
139+ 由代码里可以看出来,为了保证轮询 ,必须记录上次访问的位置,为了让在并发情况下不出现问题,还必须在使用位置记录时进行加锁,很明显这种互斥锁增加了性能开销。
140140
141141依旧使用上面的测试代码测试10w次请求负载情况。
142142
@@ -147,9 +147,9 @@ IP:192.168.1.5,次数:25000
147147IP : 192.168 . 1.4 ,次数:25000
148148```
149149
150- ## 3. 轮训加权
150+ ## 3. 轮询加权
151151
152- 上面演示了轮训方式 ,还记的一开始提出的熊4比较胖抗击打能力强,可以承受别人2倍的挨打次数嘛?上面两种方式都没有体现出来熊 4 的这个特点,熊 4 窃喜,不痛不痒。但是熊 1 到 熊 3 已经在崩溃的边缘,不行,我们必须要让胖着多打,能者多劳,提高整体性能。
152+ 上面演示了轮询方式 ,还记的一开始提出的熊4比较胖抗击打能力强,可以承受别人2倍的挨打次数嘛?上面两种方式都没有体现出来熊 4 的这个特点,熊 4 窃喜,不痛不痒。但是熊 1 到 熊 3 已经在崩溃的边缘,不行,我们必须要让胖着多打,能者多劳,提高整体性能。
153153
154154``` java
155155/* * 服务器列表 */
@@ -197,7 +197,7 @@ IP:192.168.1.4,次数:20000
197197
198198## 4. 随机加权
199199
200- 随机加权的方式和轮训加权的方式大致相同,只是把使用互斥锁轮训的方式换成了随机访问 ,按照概率论来说,访问量增多时,服务访问也会达到负载均衡。
200+ 随机加权的方式和轮询加权的方式大致相同,只是把使用互斥锁轮询的方式换成了随机访问 ,按照概率论来说,访问量增多时,服务访问也会达到负载均衡。
201201
202202``` java
203203/* * 服务器列表 */
@@ -236,7 +236,7 @@ IP:192.168.1.4,次数:20133
236236
237237## 5. IP-Hash
238238
239- 上面的几种方式要么使用随机数,要么使用轮训 ,最终都达到了请求的负载均衡。但是也有一个很明显的缺点,就是同一个用户的多次请求很有可能不是同一个服务进行处理的,这时问题来了,如果你的服务依赖于 session ,那么因为服务不同, session 也会丢失,不是我们想要的,所以出现了一种根据请求端的 ip 进行哈希计算来决定请求到哪一台服务器的方式。这种方式可以保证同一个用户的请求落在同一个服务上。
239+ 上面的几种方式要么使用随机数,要么使用轮询 ,最终都达到了请求的负载均衡。但是也有一个很明显的缺点,就是同一个用户的多次请求很有可能不是同一个服务进行处理的,这时问题来了,如果你的服务依赖于 session ,那么因为服务不同, session 也会丢失,不是我们想要的,所以出现了一种根据请求端的 ip 进行哈希计算来决定请求到哪一台服务器的方式。这种方式可以保证同一个用户的请求落在同一个服务上。
240240
241241``` java
242242private static List<String > serverList = new ArrayList<> ();
0 commit comments