别人恋爱不成功,你连暗恋都不成功! 收藏本站
登陆 / 注册 搜索

阅读: 7.9K   回复: 5

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

[复制链接]
仗剑天涯论坛大牛 2017-9-8 23:57 |显示全部楼层

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

主题破百
        1.分布式+ c- u- i) Y% j9 M' E  A

( p: M3 {% n% Z9 ~. Q. Q5 a' s        小明的公司有3个系统: 系统A、系统B和系统C ,这三个系统所做的业务不同,被部署在3个独立的机器上运行, 他们之间互相调用(当然是跨域网络的), 通力合作完成公司的业务流程。
+ _5 z0 r) ^5 i. b/ y" J8 c3 O+ Y0 r" p
科普贴——什么是集群和分布式 1-服务器.png

. P' p+ ?! u6 ^. l        将不同的业务分布在不同的地方, 这就构成了一个分布式的系统,现在问题来了, 系统A是整个分布式系统的“脸面”, 用户直接访问,用户量访问大的时候要么是速度巨慢,要么直接挂掉, 怎么办? ( ]4 Z3 E9 M0 h6 `

$ @0 x1 b+ F7 u9 r$ p  C% J1 I        由于系统A只有一份, 所以会引起单点失败。+ o) M& q1 f+ w% D1 r% y* Z

/ |' D  ?" ?) W, y9 Q5 o% N        2.集群(Cluster)" r* _# Y) u- ~2 R! c8 ?

* l0 D# c6 Y9 R* n+ A$ H; Q# q        小明的公司不差钱,就多买几台机器吧, 小明把系统A一下子部署了好几份(例如下图的3个服务器),每一份都是系统A的一个实例, 对外提供同样的服务,这样能睡个安稳觉了,不怕其中一个坏掉了,我还有另外2个呢。  
" r  H  G  {6 \  `$ l
3 a& t" z; J& X1 y- V        这3个服务器上的系统就组成了一个集群。$ V- r4 z4 s$ Y- W" ]( X0 r$ A
/ b4 ?4 H5 ^( D( N2 e# q. p7 l
科普贴——什么是集群和分布式 2-集群.png
0 x, y+ m, i/ w. e3 C# z. C+ u( T  o
        可是对用户来说,一下子出现这么系统A ,每个系统的IP地址都不一样,  到底访问哪一个? : v) ]5 m# l3 k: m& B
+ G. r* G& r9 h" l% W$ A3 z2 w
        如果所有人都访问服务器1.1 ,那服务器1.1 会被累死, 剩下的三个闲死,成了浪费钱的摆设。( f- n* [2 ?6 l2 a5 S: d
& L' l, a4 V& G- f
        3.负载均衡(Load Balancer)6 _0 b$ e3 a2 B- U; {" e. \3 _

; \4 E" u+ s  |0 Q        小明要尽可能的让3个机器上的系统A 工作均衡一些, 比如有3万个请求,那就让3个服务器各处理1万个(当然,这是理想状况), 这叫负载均衡。  , Z/ R7 i4 [  K$ {- n9 C

- V- j3 x- j' M$ }1 P: N        很明显,这个负载均衡的工作最好独立出来, 放到独立的服务器上 (例如Ngnix):
% g8 I$ N( r7 v0 J& m& {, @( L3 q2 d) K0 a
科普贴——什么是集群和分布式 3-负载均衡.png
3 N0 f- {& z0 K
        后来小明发现, 这个负载均衡的服务器虽然工作内容很简单,就是拿到请求,分发请求,但是它还是有可能挂掉啊, 单点失败还是会出现。
* F( ?! p2 E- r# ]6 K# Y  s- @; ?- H. j" o% Q6 B( g& l4 u
        没办法,只好把负载均衡也搞成一个集群, 不过和系统A的集群有两点不同:
8 ]9 l) o& B! X. K
  y0 k  p6 @% F4 N3 T        1.  这个新的集群中虽然有两个机器,但我们可以用某种办法,让这个集群对外只提供一个IP地址, 也就是说用户看到的好像只有一个机器。  K  J& S8 Z' A9 ^& M
0 J) ~- k7 ]& G" @$ H
        2. 同一时刻,我们只让一个负载均衡的机器工作, 另外一个原地待命。 如果工作的那个挂掉了,待命的那个就顶上去。
, `; j5 [9 ?, Z6 m4 r6 d; h  G. T% [) x& p& _4 @, g8 i$ o1 t1 j
科普贴——什么是集群和分布式 4-负载均衡.png
0 N3 O# ^( g' _
        4.弹性8 N- B" B# a: G
- v2 Q0 r7 W+ y
        如果这3个系统A的实例还是满足不了大量的请求,那就再加服务器! ! g' m- m8 r. }. _- ~
9 `: s8 \% P" n1 W1 V3 D* D8 g, e
        双11来了,用户量是平时的10倍, 小明向领导申请费用又买了几十台服务器,一下子把系统A部署了几十份。  可是双11过后, 流量一下子降下来了,那几十个服务器用不上了,也变成了摆设!$ B5 q8 W7 N) E2 p* N
) O5 `2 D( Z& c3 o
        被领导批评以后,小明决定尝试一下云计算,  在云端可以轻松的创建、删除虚拟的服务器, 那样就可以轻松地随着用户的请求动态的增减服务器了。  双11来了就创建虚拟服务器,等到双11过去了就把不用的关掉, 省得浪费钱。 , M  o9 G( J' k

/ e/ A) C; g. M  Y        于是小明的系统具备了一定的弹性。4 ~+ K$ o" s! N

( {. x$ p: w" ^* n$ V" W4 I: @        5.失效转移" }) p4 G/ S) r  ~! P
' x( h, u8 X8 i+ r" z
        上面的系统看起来很美好,但是做了一个不切实际的假设: 所有的服务都是无状态的。 换句话说,假设用户的两次请求直接是没有关联的。
- I) B7 ?* |- E: ?
+ h; a7 ]# G3 V4 V) m1 s( A  m  R        但是现实是,大部分服务都是有状态的, 例如购物车。% K8 x) Q% \: D

% b3 G' z( ~+ T  ^  J  H/ i5 W        用户访问系统,在服务器1.1上创建了一个购物车,并向其中加入了几个商品, 然后 服务器1.1 挂掉了, 用户的后续访问就找不到服务器1.1了,这时候就要做失效转移,让另外几个服务器去接管、去处理用户的请求。, e( K, V% |4 Q3 \- E

- F# ?  f  R5 m" G- m4 Y7 c        可是问题来了,在服务器1.2,1.3上有用户的购物车吗?  如果没有, 用户就会抱怨,我刚创建的购物车哪里去了?
3 e/ H9 v% J" }; u% F; Z8 w. N; z' y+ @8 u& O( q
        还有更严重的,假设用户是在服务器1.1上登录的, 用户登录过的信息保存到了该服务器的session中, 现在这个服务器挂掉了, 用户的session自然也不见了,当用户被失效转移到其他服务器上的时候,其他服务器发现用户没有登录, 就把用户踢到了登录界面, 让用户再次登录!
! \+ D: ^: }/ Q  k/ C& n+ U
8 B0 g" ^, E+ E) [; n; N- p        状态, 状态,状态! 用户的登录信息,购物车等都是状态信息,  处理不好状态的问题,集群的威力就大打折扣,无法完成真正的失效转移, 甚至无法使用。
' ?7 u( c! D+ h* t* q: l9 X. ?: p- B! ~1 e
        怎么办?  #375:% B1 f8 _7 ?/ S0 M( t
" `5 b- w9 e4 A' w6 W) v' H2 @
        一种办法是把状态信息在集群的各个服务器之间复制,让集群的各个服务器达成一致,  谁来干这个事情? 只能是像Websphere, Weblogic这样的应用服务器了。 % F/ _& F- ]! {- ~; {  j( n4 ~7 f# w0 @! G
        
4 j3 J! x- a$ ^        还有一种办法, 就是把状态信息集中存储在一个地方, 让集群的各个服务器都能访问到:2 M3 N1 T) x4 Y5 N( O

/ y, i# O( p% C# S; o
科普贴——什么是集群和分布式 5-服务器5.png

! Y) A. h# p1 V+ o+ J2 a        小明听说Redis 不错, 那就用Redis来保存吧 !( _6 l& K- u$ |) Y2 _! s

. _& I+ g% K  F9 f. L
本文来自微信公众号:码农翻身(有重新排版)
作者:老刘
) D2 W$ b  K3 d1 @# W1 L% W" b
上一篇
下一篇

评分

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

查看全部评分

帖子热度 7909 ℃
小执念在电影院邂逅美女,请美女吃大餐,花掉2 个 金币.

巴黎环抱的花海 「龙战于野」 2017-9-9 06:32 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

灌水也要讲技术保证句句是十五字
4 p8 O: D1 T1 G9 J0 p! z

评分

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

查看全部评分

Sunglassescat 「龙战于野」 2017-9-11 14:57 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

看小执念写的东西比看书有意思
soarcloud 「龙战于野」 2017-9-11 16:04 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

总感觉没完呢,还可以继续的吧。- h3 n8 w3 b$ P- Y3 J- Y& O1 ?
是不是该写上to be continue
屋顶,数星星 「出类拔萃」 2018-1-21 12:47 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

撸主的文章带给我们的是心灵深处的震撼。。。#366:
锁上的光 「出类拔萃」 2018-1-21 14:13 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

  这篇帖子构思新颖,题材独具匠心,段落清晰,情节诡异,跌宕起伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应当学习之典范。
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

快速回复 返回列表