From f39b393a2d43231434c5585f354a0d67ab98f0f2 Mon Sep 17 00:00:00 2001 From: Xiangmingzhe Date: Tue, 3 Apr 2018 09:13:54 +0800 Subject: [PATCH] loadBlance ipHash --- notes/分布式问题分析.md | 7 +++++++ pics/2018040301.jpg | Bin 0 -> 31619 bytes 2 files changed, 7 insertions(+) create mode 100644 pics/2018040301.jpg diff --git a/notes/分布式问题分析.md b/notes/分布式问题分析.md index 9d4ff810..183a40d6 100644 --- a/notes/分布式问题分析.md +++ b/notes/分布式问题分析.md @@ -127,6 +127,13 @@

+### 6.源地址哈希法(ip hash) +源地址哈希通过对客户端IP哈希计算得到的一个数值,用该数值对服务器数量进行取模运算,取模结果便是目标服务器的序号。 +- 优点:保证同一IP的客户端都会被hash到同一台服务器上。 +- 缺点:不利于集群扩展,后台服务器数量变更都会影响hash结果。可以采用一致性Hash改进。 + +

+ ## 实现 ### 1. HTTP 重定向 diff --git a/pics/2018040301.jpg b/pics/2018040301.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07a8c51df1591cabb1142ae7960d33645a86ca78 GIT binary patch literal 31619 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