1.正向代理
正向代理比如VPN,安装在客户端的软件,任何可以被该VPN访问的网址就都可以被客户端用户访问,正向代理只对客户端负责。
特点:正向代理的代理对象是用户,服务器不知道自己的服务提供给了哪个客户端,但客户端知道自己要访问的服务器。
举例:正向代理就好像粉丝找明星要签名,但粉丝见不到明星就只能委托经纪人去帮自己要签名。在这个过程中,经纪人就相当于正向代理的角色,明星不知道自己的签名到底给了哪个粉丝,但粉丝知道是哪个明星给了自己签名。
2.反向代理
反向代理作用在服务端,假设该反向代理代理了两个服务,那么当客户端访问这两个服务的时候该反向代理才会工作,也就是说这里的反向代理只对被它代理的两个服务负责。
特点:反向代理的代理对象为服务器,客户端不知道到底是那一台服务器为自己提供了服务,但服务器知道哪个客户端要访问自己。
举例:反向代理就像租房中介,由于房源被中介垄断我们无法直接联系到房东,想租房就得找中介。在这个过程中,中介就相当于反向代理的角色,租客不知道中介给自己找了哪些房东,但房东知道哪个租客有租房的需求。
PS:正向代理与反向代理一般是同时使用的。
3.服务端负载均衡
服务端的负载均衡是一个网络请求先经过一个代理服务器(比如nginx),然后代理服务器通过负载算法(轮询,随机,权重等等)反向代理用户需要访问的服务,来完成负载均衡。
特点:配置写在服务端,比如nginx.conf,同时应用在服务端
图示:
4.客户端负载均衡
如果把上图中的Server1换成springcloud的Ribbnon组件,请求先经Ribbon转发到不同服务的话,就变成了客户端负载均衡。
特点:配置在客户端(@loadBlance注解写在程序里)
图示:
完整图示: