这个城市大得让人到处能一见钟情,却没法重逢。 收藏本站
登陆 / 注册 搜索

阅读: 5.7K   回复: 5

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

仗剑天涯论坛大牛 2017-9-8 23:57 |显示全部楼层

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

主题破百
        1.分布式' R2 A! q9 ^7 V% C6 A* _4 ?" Y+ R
  o: f: m% o6 q* Z
        小明的公司有3个系统: 系统A、系统B和系统C ,这三个系统所做的业务不同,被部署在3个独立的机器上运行, 他们之间互相调用(当然是跨域网络的), 通力合作完成公司的业务流程。6 S9 z" q; k$ e( v9 m/ H

3 N6 ]/ @; S" e
科普贴——什么是集群和分布式 1-服务器.png

' k: _& D4 v+ ^# O2 Q% H        将不同的业务分布在不同的地方, 这就构成了一个分布式的系统,现在问题来了, 系统A是整个分布式系统的“脸面”, 用户直接访问,用户量访问大的时候要么是速度巨慢,要么直接挂掉, 怎么办? 1 X/ ^0 i8 B2 x: X

( H1 y4 n/ q  O' o        由于系统A只有一份, 所以会引起单点失败。; |5 ?8 T! l2 v3 `
! D7 ~4 u2 s' P0 g7 u9 c4 a4 B, w
        2.集群(Cluster)
. w- ^6 a6 t/ X4 V0 c9 k1 ]! F3 G  C' W& i5 Z! r5 T% L
        小明的公司不差钱,就多买几台机器吧, 小明把系统A一下子部署了好几份(例如下图的3个服务器),每一份都是系统A的一个实例, 对外提供同样的服务,这样能睡个安稳觉了,不怕其中一个坏掉了,我还有另外2个呢。  7 O( ?+ ?6 x$ _6 x$ G
3 J3 z) ?# a% C' ~& x
        这3个服务器上的系统就组成了一个集群。
6 y! x/ E6 x/ C# v; }4 c/ U. o, C) d& F  p: Q
科普贴——什么是集群和分布式 2-集群.png
; }6 X! r$ r# ]
        可是对用户来说,一下子出现这么系统A ,每个系统的IP地址都不一样,  到底访问哪一个?
3 s+ i  w4 z* O4 }, R# @& C& d$ [3 }8 x" k- U* y4 ^
        如果所有人都访问服务器1.1 ,那服务器1.1 会被累死, 剩下的三个闲死,成了浪费钱的摆设。& s5 H7 P. B) j$ f: l7 h
  J; \; x9 ?3 ~3 U9 y; q; I
        3.负载均衡(Load Balancer)* r6 S, c  D( M9 U' @' d* R

6 H2 a7 \- A1 t. A7 u        小明要尽可能的让3个机器上的系统A 工作均衡一些, 比如有3万个请求,那就让3个服务器各处理1万个(当然,这是理想状况), 这叫负载均衡。  8 z+ N  `6 U9 x: |3 ]
2 g% c4 _1 O4 ]! C! i( y
        很明显,这个负载均衡的工作最好独立出来, 放到独立的服务器上 (例如Ngnix):! |  ]4 |$ y1 ?9 c8 d6 L
1 z$ ?! I5 h. V% I( Z, G# ]
科普贴——什么是集群和分布式 3-负载均衡.png
! x# B# H. \6 P0 ]; t  w9 k6 J
        后来小明发现, 这个负载均衡的服务器虽然工作内容很简单,就是拿到请求,分发请求,但是它还是有可能挂掉啊, 单点失败还是会出现。  f- D9 h$ q& H# L( L" @

3 Y6 Q7 S4 j' n8 }8 o( G) r        没办法,只好把负载均衡也搞成一个集群, 不过和系统A的集群有两点不同:! o8 W$ d) ?. I. R6 V' F

1 ^1 C  {" t6 X* r1 O2 z& ], D9 j        1.  这个新的集群中虽然有两个机器,但我们可以用某种办法,让这个集群对外只提供一个IP地址, 也就是说用户看到的好像只有一个机器。. c! _, q4 ~4 ^2 b' |4 j  H

5 C2 f) h! ]. a/ f" ^        2. 同一时刻,我们只让一个负载均衡的机器工作, 另外一个原地待命。 如果工作的那个挂掉了,待命的那个就顶上去。
! b+ h5 m* X  F  p4 B" u* J
( c% O; g% X& K1 K1 Z# J- e
科普贴——什么是集群和分布式 4-负载均衡.png
& l8 v' \  G' N2 F( S
        4.弹性
2 ^3 s% h) c" o! N) k1 I7 u7 ]0 V$ ^# m
        如果这3个系统A的实例还是满足不了大量的请求,那就再加服务器! # z! P3 q3 W& Z* Y) l2 S3 j

. l4 M9 k; K  @        双11来了,用户量是平时的10倍, 小明向领导申请费用又买了几十台服务器,一下子把系统A部署了几十份。  可是双11过后, 流量一下子降下来了,那几十个服务器用不上了,也变成了摆设!
7 {: J& m. Q! u: y* n  r3 e7 j* \4 M+ Q; p! c3 D
        被领导批评以后,小明决定尝试一下云计算,  在云端可以轻松的创建、删除虚拟的服务器, 那样就可以轻松地随着用户的请求动态的增减服务器了。  双11来了就创建虚拟服务器,等到双11过去了就把不用的关掉, 省得浪费钱。
" M& N+ S4 c1 M3 d+ I+ e+ C3 b5 v" h  f. c" q; N
        于是小明的系统具备了一定的弹性。+ F  h9 n/ T8 p( b" g

. X4 c" o+ {8 O7 [! n2 A( i        5.失效转移
* D4 V* Y: R" f* C' q' d
# ]: ?" t8 I# S) e, @( r        上面的系统看起来很美好,但是做了一个不切实际的假设: 所有的服务都是无状态的。 换句话说,假设用户的两次请求直接是没有关联的。( |& x) G; g! X

, N2 N; E3 P; R# v; i/ R, f        但是现实是,大部分服务都是有状态的, 例如购物车。* C( V3 ~' g: J; |. }& M

) `5 v. }% B0 U; I6 e$ Z9 R        用户访问系统,在服务器1.1上创建了一个购物车,并向其中加入了几个商品, 然后 服务器1.1 挂掉了, 用户的后续访问就找不到服务器1.1了,这时候就要做失效转移,让另外几个服务器去接管、去处理用户的请求。
" P/ _/ V  [$ t4 n. ^8 n, s. l% j# c. n
        可是问题来了,在服务器1.2,1.3上有用户的购物车吗?  如果没有, 用户就会抱怨,我刚创建的购物车哪里去了?& N7 z6 T/ z  ~7 s/ s8 s  t0 b
9 ~. |7 m  |& Z2 Q7 N; y0 k# X
        还有更严重的,假设用户是在服务器1.1上登录的, 用户登录过的信息保存到了该服务器的session中, 现在这个服务器挂掉了, 用户的session自然也不见了,当用户被失效转移到其他服务器上的时候,其他服务器发现用户没有登录, 就把用户踢到了登录界面, 让用户再次登录!
2 t$ H. }9 V6 @( Z: ]
# w) H6 A7 W* z; O1 a; i        状态, 状态,状态! 用户的登录信息,购物车等都是状态信息,  处理不好状态的问题,集群的威力就大打折扣,无法完成真正的失效转移, 甚至无法使用。5 |+ ?2 s" k" l' @2 Z' T( C0 z
: l; I3 y! T4 C4 W
        怎么办?  #375:; z# F% K2 s% [7 x

) ~6 \7 X. `4 W, S/ M" I3 H# [        一种办法是把状态信息在集群的各个服务器之间复制,让集群的各个服务器达成一致,  谁来干这个事情? 只能是像Websphere, Weblogic这样的应用服务器了。 0 O4 A9 h! N8 P* o3 S6 a
        1 ~' _+ \. |2 i% V( C0 H+ J9 G9 x
        还有一种办法, 就是把状态信息集中存储在一个地方, 让集群的各个服务器都能访问到:
% p# _; K: c1 x. T3 \8 d# ]$ a. d6 _
3 N/ U, |! N) n$ Y: V/ t; t
科普贴——什么是集群和分布式 5-服务器5.png
& ]4 Y1 |$ _" c( c) B+ y6 h
        小明听说Redis 不错, 那就用Redis来保存吧 !4 i, Z' N- a/ z

3 }* p) c  y2 j0 V' X  `
本文来自微信公众号:码农翻身(有重新排版)
作者:老刘
; F3 i1 @  d( B+ F/ H. P

评分

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

查看全部评分


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

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

灌水也要讲技术保证句句是十五字
! Y7 m- r5 I; f% e

评分

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

查看全部评分

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

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

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

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

总感觉没完呢,还可以继续的吧。% b+ e: p3 u7 ~4 G+ _- V2 e3 r
是不是该写上to be continue
屋顶,数星星 「出类拔萃」 2018-1-21 12:47 来自手机 |显示全部楼层

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

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

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

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

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2020-10-25 02:16 , Processed in 0.029304 second(s), 23 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表