如何进行业务横向扩展?负载均衡是什么?代理、反向代理是什么

如何进行业务横向扩展?负载均衡是什么?代理、反向代理是什么?

负载均衡(load balancer):

首先举例有个网站起名叫-xxx,用户访问xxx网站发起http请求,打到目标服务器,假设xxx网站目前有两百多个用户量,服务器只有2Core 4GB内存。但是随着网站用户增多,一年以后用户量达到了200万人,显然当200万人同时向一台服务器发出请求,服务器需要超多200万个线程处理这些请求,此时双核四G内存分担不够,此时这种问题这么解决呢:

  • 纵向扩展:简单的来就是扩展机器内存,例如2核4G内存打游戏太卡,你换4核8G,甚至更高,但是要注意纵向扩展的内存&性能比并不是呈线性关系,如图所示:

在这里插入图片描述
也就是说当你投入的内存成本越高带来的回报的性价比会越低,那么有有纵向扩展,就有横向扩展

  • 横向扩展:直接上图理解
    在这里插入图片描述
    以上就是横向扩展,那如何进行横向扩展,这时候就引出负载均衡,要讲负载均衡,首先得讲一下什么是反向代理(reverse proxy),那么还得了解一下什么是代理(proxy)

代理(proxy):

举个栗子:在家妈妈不让你用电脑使用出了qq以外的任何网页,但是你想要查你的高考成绩,由于限制你又访问不了查成绩的网页,于是你在qq上找到了你的老师,要求帮你查你的成绩,你的老师查到了你的成绩并用qq发了你,这个过程中你的老师就充当了代理的角色:
在这里插入图片描述
那么什么是反向代理:

反向代理(reverse proxy):

接着上一个栗子,你的同学想知道你的成绩,但是他没有你的qq,然后他去找到了你的老师,并问你的老师你的成绩,你的老师就问你的成绩并告诉了你的同学:这个过程中你的老师充当了反向代理服务器的角色:
在这里插入图片描述
代理跟反向代理的过程刚好是反的,代理是针对你想上外面的网站,反向代理指的是外面的网站要访问你的服务器
在这里插入图片描述
一般都知道代理用来做什么,那么反向代理这么用呢:
举个栗子:假如我们要帮银行要开发一个资金管理系统,这个系统服务器对安全性能要求非常高,服务器部署成功之后不允许外网直接访问,也不能把服务器的任何端口暴露在外网,那么系统上线之后怎么让用户访问资金管理系统呢,这个时候就用到了反向代理服务器
反向代理服务器一方面有一个外网IP,一方面又有一个内网IP,它能够承载外网直接对它发起的http请求,帮助外网用户连接到真实的资金管理系统服务器上,并将资金管理系统服务器返回的http表单再返回给外界的用户,使用这种方法外面的用户就可以通过反向代理服务器来使用我们构建的的系统了。另外反向代理服务器具有缓存(cache)的功能,例如上面的查高考成绩的栗子,同学向班主任问你的成绩,如果老师之前已经问过/查过你的成绩,同学向问老师你的成绩时,老师不会再次询问你,而是直接将你的成绩返回给了那个同学,这就是反向代理的cache
在这里插入图片描述
另外,使用反向代理还有个特点就是,反向代理服务器跟真实的服务器都在纯内网,它们之间不必使用https通信,完全使用http通信就可以,而且真实服务器还可以限制ip地址,只允许反向代理服务器向它发起请求,这样的话真实服务器就更加安全了,连接也不需要支持https了,省得麻烦,反向代理还是相当有用的。

回到负载均衡(reverse proxy):

说完了反向代理,现在回到负载均衡,说白了负载均衡就是一个反向代理服务器加负载均衡算法,关系如图:
在这里插入图片描述
最典型的算法是轮转法,说的是将请求轮流打到不同的服务器。但是假如我们的业务特殊,并要求一个保证用户一直使用某一台服务器,这个时候就用到hash算法:
举例:假设学校食堂有十个窗口,为保证食堂十个窗口负载均衡,要求每个学生到特定的窗口打饭,设定hash算法,学号余10,即得该学生指定的打饭窗口。用hash算法指定不同的http请求也是一样的 道理,http请求是基于TCP-IP协议,所以很容易拿到ip地址,然后将ip地址hash得该请求要打到的目标服务器,以此来保证负载均衡
在这里插入图片描述

  • 纵向扩展&横向扩展对比
    在这里插入图片描述
    所以平时在采购服务器时,采用三个每月300块的服务器的性能要比采用一个每月1000块的服务器好的多
    但是无论你有多少台服务器,最后都要通过你的负载均衡,如果请求量过大,服务器过多,那么最后这个负载均衡可能会累死(单点故障),所以一定要启动主从负载均衡计划,主负载均衡死掉后从负载均衡接替工作,保证业务连贯。

猜你喜欢

转载自blog.csdn.net/khadijiah/article/details/105920258