cncml手绘网

标题: 反向代理与负载均衡扫盲(初识) [打印本页]

作者: admin    时间: 2020-2-25 23:22
标题: 反向代理与负载均衡扫盲(初识)
反向代理
  1. 提到反向代理,就不得不提到正向代理。两者虽然都是代理,但方式却截然不同。所以,在我们介绍反向代理之前,先看一下什么是正向代理
    / G9 \5 G( P7 ~* @+ ?: y7 K, S
复制代码
正向代理介绍
  1. 正向代理(forward proxy):是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。5 V7 t; q( n2 t& X) C
复制代码
有时候,用户想要访问某国外网站,该网站无法在国内直接访问,但是我们可以访问到一个代理服务器,这个代理服务器可以访问到这个国外网站。这样呢,用户对该国外网站的访问就需要通过代理服务器来转发请求,并且该代理服务器也会将请求的响应再返回给用户。这个上网的过程就是用到了正向代理。
8 }6 Y! H( B0 O# {% \* H4 Z$ Y
0 z' |" K$ I1 a$ t  r
) m' {9 q4 [7 {5 J/ D$ m
这个过程其实和租房子很像。

- i% V# @' q1 J# K) b" V# {0 q租房子的时候,一般情况下,我们很难联系到房东,因为有些房东为了图方便,只把自己的房屋信息和钥匙交给中介了。而房客想要租房子,只能通过中介才能联系到房东。而对于房东来说,他可能根本不知道真正要租他的房子的人是谁,他只知道是中介在联系他。这里面一共有三个角色,租客(用户)、中介(代理服务器)和房东(国外网站,目标服务器)。引入中介(代理服务器)的原因是用户无法联系上房东(用户无法访问国外网站)。% |, X3 T5 ^! H: c$ e/ C
8 m7 ~2 C) |) o: U1 A2 [
所以,正向代理,其实是"代理服务器"代理了"客户端",去和"目标服务器"进行交互。通过正向代理服务器访问目标服务器,目标服务器是不知道真正的客户端是谁的,甚至不知道访问自己的是一个代理(有时候中介也直接冒充租客)。
. v9 {: c0 H" N: \
' v! i: p- h% m: s正向代理的用途
# s) |7 s0 v9 s7 ^7 b2 p: f1 V- X  r5 h" W1 Y( W) c& e
反向代理介绍$ c' ?( Y' U% z, U6 Z4 ^# \+ A, y
* |, D; e) ~. }5 F: C3 t
  1. 反向代理(reverse proxy):是指以代理服务器来接收internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就变现为一个反向代理服务器。
    - A" n2 X: M0 L! F
复制代码
反向代理(reverse proxy):是指以代理服务器来接收internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就变现为一个反向代理服务器。
3 g9 B& p* Y8 T6 L+ k9 r
  n) j5 k: f3 z' R1 i0 P$ @; {8 W6 Z0 J' {. q/ _) K: o, [
前面提到过了,为了提升网站的各方面能力,我们一般会把多台机器组成一个集群对外提供服务。然而,我们的网站对外提供的访问入口都是一个的,比如www.taobao.com。那么当用户在浏览器输入www.taobao.com的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。
, A' u; j3 C# K
/ A& t% d4 N# J2 }) V7 ^. }
! Y; R. F' h: j- o/ B3 V
在这七层模型种,高层次都是依赖于低层次的。层次越高,使用起来越方便。
# O5 d8 e0 _8 e# `7 G2 Z
8 H1 W; J4 u$ `5 Y' e
# B4 r) T1 n+ G* `$ c

  J& K+ U2 o; d! A8 L/ f- D
, J  g% z& k6 s  L! B6 ~2 v6 y. o( ^ 4 e. a) u  i4 K" [% v; V, }
% L' i0 k$ j. t! q) m9 p
我们经常听到的一些和计算机网络有关的概念中:
  1. telnet、HTTP、FTP、NFS、SMTP、DNS等属于第七层应用层的概念。. w1 z, g3 U2 x6 I3 W, T( Y0 @0 D/ W3 b
  2. 3 F* M$ Z2 k' _1 Q& k
  3. TCP、UDP、SPX等属于第四层传输层的概念。
    5 k2 [. F  o( y0 q  ?/ K& C

  4. 8 ~) p1 {4 y, ]$ V
  5. IP、IPX等属于第三层网络层的概念。
    6 N! c2 M* B$ {: [6 @
  6. " C2 @5 {+ }* E' b
  7. ATM、FDDI等属于第二层数据链路层的概念。" @( M, @- v! x) V/ s% u, G
  8. . j) o5 l. Z9 B+ L
复制代码

0 n& c( r, Y' u- u& T+ t了解了网络协议的七层模型以后,再来看看负载均衡。我们可以很明确的一点是,负载均衡是要在网络传输中做文章的。而要在网络传输过程搞事情,那么这七层模型就势必躲不开。
; k1 n% ^% V" Z- ?+ c
) d: u( a3 d/ [1 k所以,根据负载均衡技术实现在OSI七层模型的不同层次,是可以给负载均衡分类的。. d1 ]& y; |- N

+ o% L3 i3 m# |3 |4 }4 G常见的实现方式中,主要可以在应用层、传输层、网络层和数据传输层做文章。所以,工作在应用层的负载均衡,我们通常称之为七层负载均衡、工作在传输层的我们称之为四层负载均衡。: M0 }2 s% e: w6 l( q' J
9 D7 g  \& d. Z* U) O$ `; K
大致可以分为以下几种,其中最常用的是四层和七层负载均衡:
' }( P! o+ g2 r. Y( S: r$ t
2 P' w$ G: P+ k) P
2 E2 e- l% e' R+ _8 G( H负载均衡工具5 H* [4 {# S' ~% S( M( o
市面上有很多开源的负载均衡的工具或软件,基本都是基于前面提到的方案实现的,大多数是工作在第七层和第四层的。Nginx/LVS/HAProxy 是目前使用最广泛的三种负载均衡软件。2 h! P+ B+ b7 {+ y* b; t

2 l3 i( g5 q( r0 K) ]LVS7 y( E& a! e, @! e) P$ _, j
LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。& h6 |# A! {% `9 [4 |
/ [/ J% m4 o7 a. g( D' w" L
LVS主要用来做四层负载均衡。
; p& H# z; Z* t0 T6 ^7 P3 M% b& |' o. [- C- `
Nginx. |) }' O$ n" B! ~8 @+ |; N6 B3 V  v
Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。
; u6 [% ?' l( _- }
" D. W; I0 G  j9 @4 YNginx主要用来做七层负载均衡。  ^0 c7 l, r, t% F! y7 R1 h6 @3 n
0 F% W2 {7 _/ v' P  C
HAProxy/ N" I1 W8 ]7 T2 \6 Q' t! [
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
  w2 v2 \, B( B" i2 K$ T. z8 e8 X% ]
& G8 d. W, Y  THAProxy主要用来做七层负载均衡。
& Y+ B  E8 C$ u( [3 e
# r+ d/ [/ h9 }0 r# A负载均衡核心:负载均衡算法实现0 X" Z+ H3 d# f" q! l6 C
负载均衡服务器在决定将请求转发到具体哪台真实服务器的时候,是通过负载均衡算法来实现的。负载均衡算法,是一个负载均衡服务器的核心。. Y& `) R% X) }' P; E6 j& F

+ M6 p3 V) x6 v" l% t% E- Z4 R就像电影院门口的引导员一样,他根据什么把排队人员分配到具体的入口呢?是哪个入口人少吗?还是哪个入口速度最快?还是哪个入口最近呢?如果来了一个VIP怎么办呢?
$ {- j0 {5 T) r7 T; T7 ^' B7 Z% S) H2 g7 M  H5 {
负载均衡算法可以分为两类:静态负载均衡算法和动态负载均衡算法。9 u% J. k& p/ a! T: G, i1 ~5 A; g' N

+ W0 l5 }' _9 |3 j# ]4 I: I  d& C静态负载均衡算法包括:轮询,比率,优先权- j, k8 W4 b: N0 M, P

4 N3 `( P/ P' A, }/ t9 f动态负载均衡算法包括: 最少连接数,最快响应速度,观察方法,预测法,动态性能分配,动态服务器补充,服务质量,服务类型,规则模式。; Z& |( q' K# }% B8 B( J: Z

# B! `( ]9 _( z4 n9 m7 f3 @9 X$ m2 B# ]
以上,就是目前实现负载均衡的主流算法。不同的负载均衡服务器会选择不同的算法。就像电影院和火车站可能会选用不同的引导策略一样。火车站可能会把行李少的旅客分配到一个专门的入口,可能给即将发车的旅客分派到特快入口,手持可扫描车票的用户单独分配到特殊入口等。

) N/ \5 g  ?8 K1 V, E2 E: {* f& q* ~3 W
6 L6 t# [1 _8 I, e  j, a0 ]6 R1 z" k$ \& X4 o

4 k( a$ ^3 a! P! T5 z: y0 H4 Z5 R7 S! V( k0 ~! G7 H

- [5 u( ^, S0 O2 g. e9 l# m
4 X. E6 P: K. b6 J+ |$ b* C2 A' j! e; v# Z8 U3 \  f6 g; q0 i





欢迎光临 cncml手绘网 (http://www.cncml.com/) Powered by Discuz! X3.2