世界上没有偶然,有的只是必然。 每日签到 收藏本站
登陆 / 注册 搜索

USERCENTER


查看:4278   回复: 5

[网络基础] 科普贴——什么是集群和分布式

[复制链接]
发新帖
跳转到指定楼层
楼主
仗剑天涯吾是土豪 发表于 2017-9-8 23:57:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

今生相逢便是缘分,何苦去怨恨,何苦去仇视。

        1.分布式- p* R$ e( B4 g$ J5 y% R, t: B* \0 c

1 u6 ?$ q$ \7 r' I6 D6 s! Q        小明的公司有3个系统: 系统A、系统B和系统C ,这三个系统所做的业务不同,被部署在3个独立的机器上运行, 他们之间互相调用(当然是跨域网络的), 通力合作完成公司的业务流程。
4 {' i) |: p6 O! _
1 I% c& {% ^8 i. q6 w6 n
 1-服务器.png 科普贴——什么是集群和分布式

( u% e/ g" u. Y0 l( Y- t6 }* n3 W        将不同的业务分布在不同的地方, 这就构成了一个分布式的系统,现在问题来了, 系统A是整个分布式系统的“脸面”, 用户直接访问,用户量访问大的时候要么是速度巨慢,要么直接挂掉, 怎么办? ' b' u2 v& ?& X% b% T

( T3 M7 Z2 P! Y$ e8 Q2 o& J6 ^        由于系统A只有一份, 所以会引起单点失败。
# m1 h' ]0 V. ]4 k7 `) \+ J, x- ?/ F" Z  s% ]" {) i
        2.集群(Cluster). E( c3 ?5 a- }3 o( k

$ r. r8 G- {# o: l/ k        小明的公司不差钱,就多买几台机器吧, 小明把系统A一下子部署了好几份(例如下图的3个服务器),每一份都是系统A的一个实例, 对外提供同样的服务,这样能睡个安稳觉了,不怕其中一个坏掉了,我还有另外2个呢。  ; _+ m5 N9 D9 A
8 y, y' E7 e+ ?' p- S
        这3个服务器上的系统就组成了一个集群。3 s; f8 Q' y" g) p0 z
& P- {, s( S/ u* J8 R9 Y
 2-集群.png 科普贴——什么是集群和分布式

5 o, W  |: }3 a8 j7 \6 [        可是对用户来说,一下子出现这么系统A ,每个系统的IP地址都不一样,  到底访问哪一个? / d: R" d. M# s( t% W; u

+ R. Q* \- d4 e8 U# a        如果所有人都访问服务器1.1 ,那服务器1.1 会被累死, 剩下的三个闲死,成了浪费钱的摆设。
( [0 g  t( [+ C2 v7 m. F( @2 A: J5 M% P7 z: Z+ s" z$ D: `* J
        3.负载均衡(Load Balancer)
2 R3 i) G: C, H' O7 E, f
* I% b* E' [/ ]) q        小明要尽可能的让3个机器上的系统A 工作均衡一些, 比如有3万个请求,那就让3个服务器各处理1万个(当然,这是理想状况), 这叫负载均衡。  
/ a" l& C7 X; C. X; Z
" F7 S% P- T" C* m, v/ s( b  Q        很明显,这个负载均衡的工作最好独立出来, 放到独立的服务器上 (例如Ngnix):
+ Q  a" ]5 C, v* D, v. p" n. u
: f2 K' L  m& B: C: k- @5 D, S+ H
 3-负载均衡.png 科普贴——什么是集群和分布式
$ C6 k3 U4 {# ?7 N- Q% k3 h* ^( J
        后来小明发现, 这个负载均衡的服务器虽然工作内容很简单,就是拿到请求,分发请求,但是它还是有可能挂掉啊, 单点失败还是会出现。7 x) o) ~* S  D# T4 y: Z5 \; D) \; t
" i( z% X; B6 R2 i( n" {
        没办法,只好把负载均衡也搞成一个集群, 不过和系统A的集群有两点不同:
  T6 S/ u# z- M( i- U1 R7 e: y0 w  O; M; D+ _' _# e, C! T) z+ I
        1.  这个新的集群中虽然有两个机器,但我们可以用某种办法,让这个集群对外只提供一个IP地址, 也就是说用户看到的好像只有一个机器。
; N4 {2 q7 K1 {
- z, \- L6 W3 c3 |        2. 同一时刻,我们只让一个负载均衡的机器工作, 另外一个原地待命。 如果工作的那个挂掉了,待命的那个就顶上去。
; e5 i# G1 X. h+ V
; O# L$ q. A* `9 n
 4-负载均衡.png 科普贴——什么是集群和分布式

4 m0 B5 q/ S+ m% x* t  f9 v        4.弹性* R3 j! @" c5 {( W7 K
( n+ q- K2 B9 g! B+ E
        如果这3个系统A的实例还是满足不了大量的请求,那就再加服务器! ; J9 F0 U# t  n) X, f0 e1 o) d

' o0 i0 A6 ]( u( @        双11来了,用户量是平时的10倍, 小明向领导申请费用又买了几十台服务器,一下子把系统A部署了几十份。  可是双11过后, 流量一下子降下来了,那几十个服务器用不上了,也变成了摆设!1 X& A# s' s/ S! ^* t% h
4 d2 C1 H# M9 ~2 L8 l
        被领导批评以后,小明决定尝试一下云计算,  在云端可以轻松的创建、删除虚拟的服务器, 那样就可以轻松地随着用户的请求动态的增减服务器了。  双11来了就创建虚拟服务器,等到双11过去了就把不用的关掉, 省得浪费钱。
0 n0 M( T) c7 |& W0 |1 _  O- g
, Q( V% o& y6 K: Y8 b/ c* S/ d. ^        于是小明的系统具备了一定的弹性。/ Y# d7 q+ a, S( H& B6 ]  r. I  k
; K3 C" {( f1 \. |
        5.失效转移
+ j& O' y* {* x& O9 S( E
2 T& _( v; r0 c3 r        上面的系统看起来很美好,但是做了一个不切实际的假设: 所有的服务都是无状态的。 换句话说,假设用户的两次请求直接是没有关联的。, ]  x! x- G9 z' `
* ^. ~& K/ ^% a# x9 S7 u1 Z
        但是现实是,大部分服务都是有状态的, 例如购物车。
  W2 ?0 i! G) Y  w3 m* C7 _* u& H& S, x# C
        用户访问系统,在服务器1.1上创建了一个购物车,并向其中加入了几个商品, 然后 服务器1.1 挂掉了, 用户的后续访问就找不到服务器1.1了,这时候就要做失效转移,让另外几个服务器去接管、去处理用户的请求。
' ]2 F( c: d& v8 Y, ]7 ?  Z( H; F' ]' W; T; X
        可是问题来了,在服务器1.2,1.3上有用户的购物车吗?  如果没有, 用户就会抱怨,我刚创建的购物车哪里去了?
+ O& J( o, l- ^- D5 J
3 v) X, w2 o/ S8 H8 Y$ Y        还有更严重的,假设用户是在服务器1.1上登录的, 用户登录过的信息保存到了该服务器的session中, 现在这个服务器挂掉了, 用户的session自然也不见了,当用户被失效转移到其他服务器上的时候,其他服务器发现用户没有登录, 就把用户踢到了登录界面, 让用户再次登录!/ R5 b" A. k7 o' d9 R

% ?( l+ D! }' [( X7 G  i" W. }1 y        状态, 状态,状态! 用户的登录信息,购物车等都是状态信息,  处理不好状态的问题,集群的威力就大打折扣,无法完成真正的失效转移, 甚至无法使用。
+ x3 H# \, P( d/ z4 V! e6 O) p+ C: g* {$ c/ Z8 `
        怎么办?  #375:- X2 N0 h& b' f  U5 S  d5 r

9 w: U/ `/ ~( F) @        一种办法是把状态信息在集群的各个服务器之间复制,让集群的各个服务器达成一致,  谁来干这个事情? 只能是像Websphere, Weblogic这样的应用服务器了。 ' t: u* P) Z3 x! @
        ; c2 b# U  Y$ b( S( E/ O7 m
        还有一种办法, 就是把状态信息集中存储在一个地方, 让集群的各个服务器都能访问到:
6 o+ k! ^! W9 Y+ U( [, b& j
" W1 Q9 b' {0 _# t, ?/ Q
 5-服务器5.png 科普贴——什么是集群和分布式
: m. l: W9 W6 n# z7 }& H
        小明听说Redis 不错, 那就用Redis来保存吧 !  J/ u3 k* |9 ^$ w) a$ G

3 _" \3 I. V7 Q1 u' }9 v1 k. ]
本文来自微信公众号:码农翻身(有重新排版)
作者:老刘
3 {5 h9 H, g7 Q: D) v
上一篇:菜鸟也能可以写“木马 ”,几KB的超强装逼圣器!摘要:教你两行代码写“木马”,几KB的超强装逼神器! 特别 ...
下一篇:科普贴——什么是“服务”摘要:小明的公司向电子商务领域进军,开发了一个电 ...

评分

参与人数 1成长值 +1 金币 +1 收起 理由
Sunglassescat + 1 + 1 佩服!

查看全部评分

推荐
巴黎环抱的花海「出类拔萃」 发表于 2017-9-9 06:32:32 来自手机 | 只看该作者
灌水也要讲技术保证句句是十五字1 [2 ~, E2 x, h/ w& Y: @6 j

评分

参与人数 1成长值 +1 金币 +1 收起 理由
Sunglassescat + 1 + 1 佩服!

查看全部评分

Sunglassescat「出类拔萃」 发表于 2017-9-11 14:57:29 来自手机 | 只看该作者
看小执念写的东西比看书有意思
soarcloud「出类拔萃」 发表于 2017-9-11 16:04:29 | 只看该作者
总感觉没完呢,还可以继续的吧。" m1 r" b/ k* \
是不是该写上to be continue
屋顶,数星星「出类拔萃」 发表于 2018-1-21 12:47:39 来自手机 | 只看该作者
撸主的文章带给我们的是心灵深处的震撼。。。#366:
锁上的光「出类拔萃」 发表于 2018-1-21 14:13:16 来自手机 | 只看该作者
  这篇帖子构思新颖,题材独具匠心,段落清晰,情节诡异,跌宕起伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应当学习之典范。
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

关于我们|小黑屋|手机版|Archiver|古黑论

GMT+8, 2019-7-17 23:24 , Processed in 0.142806 second(s), 56 queries , Redis On.

© 2015-2019 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表