域名到站点的负载均衡技术一览(主要是探讨一台Nginx抵御大并发的解决方案)(转)https://www.cnblogs.com/EasonJim/p/7823410.html
一、问题域
Nginx、LVS、Keepalived、F5、DNS轮询,往往讨论的是接入层的这样几个问题:
1)可用性:任何一台机器挂了,服务受不受影响
2)扩展性:能否通过增加机器,扩充系统的性能
3)反向代理+负载均衡:请求是否均匀分摊到后端的操作单元执行
二、上面那些名词都是什么概念
1)Nginx:一个高性能的Web-Server和实施反向代理的软件
2)LVS:Linux Virtual Server,使用集群技术,实现在Linux操作系统层面的一个高性能、高可用、负载均衡服务器
3)Keepalived:一款用来检测服务状态存活性的软件,常用来做高可用
4)F5:一个高性能、高可用、负载均衡的硬件设备
5)DNS轮询:通过在DNS-Server上对一个域名设置多个IP解析,来扩充Web-Server性能及实施负载均衡的技术
三、接入层技术演进
【裸奔时代单机架构】

裸奔时代的架构图如上:
1)浏览器通过DNS-Server,域名解析到IP
2)浏览器通过IP访问Web-Server
缺点:
1)非高可用,Web-Server挂了整个系统就挂了
2)扩展性差,当吞吐量达到Web-Server上限时,无法扩容
注:单机不涉及负载均衡的问题
【DNS轮询】
假设Tomcat的吞吐量是1000次每秒,当系统总吞吐量达到3000时,如何扩容是首先要解决的问题,DNS轮询是一个很容易想到的方案:

此时的架构图如上:
1)多部署几份Web-Server,1个Tomcat抗1000,部署3个Tomcat就能抗3000
2)在DNS-Server层面,域名每次解析到不同的IP
优点:
1)零成本:在DNS-Server上多配几个IP即可,功能也不收费
2)部署简单:多部署几个Web-Server即可,原系统架构不需要做任何改造
3)负载均衡:变成了多机,但负载基本是均衡的
缺点:
1)非高可用:DNS-Server只负责域名解析IP,这个IP对应的服务是否可用,DNS-Server是不保证的,假设有一个Web-Server挂了,部分服务会受到影响
2)扩容非实时:DNS解析有一个生效周期
3)暴露了太多的外网IP
【Nginx】
Tomcat的性能较差,但Nginx作为反向代理的性能就强多了,假设线上跑到1w,就比Tomcat高了10倍,可以利用这个特性来做扩容:

此时的架构图如上:
1)站点层与浏览器层之间加入了一个反向代理层,利用高性能的Nginx来做反向代理
2)Nginx将Http请求分发给后端多个Web-Server
优点:
1)DNS-Server不需要动
2)负载均衡:通过Nginx来保证
3)只暴露一个外网IP,Nginx->Tomcat之间使用内网访问
4)扩容实时:Nginx内部可控,随时增加Web-Server随时实时扩容
5)能够保证站点层的可用性:任何一台Tomcat挂了,Nginx可以将流量迁移到其他Tomcat
缺点:
1)时延增加+架构更复杂了:中间多加了一个反向代理层
2)反向代理层成了单点,非高可用
【高可用方案Keepalived】
为了解决高可用的问题,Keepalived出场了:

此时:
1)做两台Nginx组成一个集群,分别部署上Keepalived,设置成相同的虚IP,保证Nginx的高可用
2)当一台Nginx挂了,Keepalived能够探测到,并将流量自动迁移到另一台Nginx上,整个过程对调用方透明。
优点:
1)解决了高可用的问题
缺点:
1)资源利用率只有50%
2)Nginx仍然是接入单点,如果接入吞吐量超过的Nginx的性能上限怎么办,例如qps达到了50000呢?
【垂直扩容方案 LVS/F5】
Nginx毕竟是软件,性能比Tomcat好,但总有个上限,超出了上限,还是扛不住。
LVS就不一样了,它实施在操作系统层面;F5的性能又更好了,它实施在硬件层面;它们性能比Nginx好很多,例如每秒可以抗10w,这样可以利用他们来扩容,常见的架构图如下:

此时:
1)如果通过Nginx可以扩展多个Tomcat一样,可以通过LVS来扩展多个Nginx
2)通过Keepalived+VIP的方案可以保证可用性
多数的公司到这一步基本就能解决接入层高可用、扩展性、负载均衡的问题。
好吧,不管是使用LVS还是F5,这些都是scale up(垂直扩展)的方案,根本上,LVS/F5还是会有性能上限,假设每秒能处理10w的请求,一天也只能处理80亿的请求(10w秒吞吐量*8w秒),那万一系统的日PV超过80亿怎么办呢?
【水平扩容方案DNS轮询】
水平扩展,才是解决性能问题的根本方案,能够通过加机器扩充性能的方案才具备最好的扩展性。
facebook,google,baidu的PV是不是超过80亿呢,它们的域名只对应一个IP么,还是得通过DNS轮询来进行扩容:

此时:
1)通过DNS轮询来线性扩展入口LVS层的性能
2)通过Keepalived来保证高可用
3)通过LVS来扩展多个Nginx
4)通过Nginx来做负载均衡,业务七层路由
四、总结
稍微做一个简要的总结:
1)接入层架构要考虑的问题域为:高可用、扩展性、反向代理+扩展均衡
2)Nginx、Keepalived、LVS、F5可以很好的解决高可用、扩展性、反向代理+扩展均衡的问题
3)水平扩展scale out是解决扩展性问题的根本方案,DNS轮询是不能完全被Nginx/LVS/F5所替代的
参考:
Https://www.cnblogs.com/wade-luffy/p/6406394.html(以上内容转自此篇文章)
正常情况下,我们只需要启动一个nginx反向代理就行了,后续都可以在不影响业务前提下进行升级的
想太多,不知道什么时候会成为那么大公司的吞吐量呢?
域名到站点的负载均衡技术一览(主要是探讨一台Nginx抵御大并发的解决方案)(转)https://www.cnblogs.com/EasonJim/p/7823410.html的更多相关文章
- 负载均衡技术在CDN中发挥着重要作用
转载地址:http://www.qicaispace.com/gonggao/server/page01/info07.asp CDN是一个经策略性部署的整体系统,能够帮助用户解决分布式存储.负载均衡 ...
- 转载-lvs官方文档-LVS集群中的IP负载均衡技术
章文嵩(wensong@linux-vs.org) 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT.VS/TUN ...
- LVS集群中的IP负载均衡技术
LVS集群中的IP负载均衡技术 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集 ...
- 快速理解高性能HTTP服务端的负载均衡技术原理(转)
1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...
- 亿级PV请求的三种负载均衡技术
在互联网+不断渗透到生活中的今天,各种各样的网络服务存在在我们身边,他们的访问流量也是大得惊人.一个大型网站(百万PV以上)想要正常访问,单单靠一台服务器是不可能提供稳定服务的.这时候就需要用负载均衡 ...
- LVS集群中实现的三种IP负载均衡技术
LVS有三种IP负载均衡技术:VS/NAT,VS/DR,VS/TUN. VS/NAT的体系结构如图所示.在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的.这些服务器 提供相同的网络服 ...
- Lvs IP负载均衡技术
Lvs集群的通用结构 Lvs集群采用IP负载均衡技术,属于IP层的交换(L4),具有很好的吞吐率.调度器分析客户端到服务器的IP报头信息,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器 ...
- 亿级PV请求的三种负载均衡技术(转)
http://www.360doc.com/content/17/1126/23/50145453_707419125.shtml 目录 DNS轮询 LVS负载均衡 DR模式 NAT模式 ...
- 三种LVS负载均衡技术的优缺点----负载均衡调度算法
三种LVS负载均衡技术的优缺点归纳以下表: VS/NATVS/TUNVS/DR 服务器操作系统任意支持隧道多数(支持Non-arp) 服务器网络私有网络局域网/广域网局域网 服务器数目(100M网络) ...
随机推荐
- linux存储管理之交换分区
交换分区管理 Swap ====================================================================================作用: ...
- servlet_filter简介
Filter总结: 1.Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静 ...
- jq demo 点击弹窗,居中,可滚动,可拖动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- linux curl http get 请求中带有中文参数或者特殊字符处理
在使用c++去请求http服务的时候,使用的是著名的curl工具提供的类库 libcurl,但是在使用的过程中发现,如果请求的参数值带了空格或者是参数是中文,会导致响应的回调函数没有被执行,虽然cur ...
- 1. Django概述
1.1 设计模型 Django,但它附带了一个你可以用python代码描述数据库布局的对象关系映射器. 数据模型语法提供了许多丰富的方法来展现你的模型——到目前为止,它解决了多年来数据库模式问题. 简 ...
- MVC5 Api Area 区域
到Area区分不同的模块让项目结构更加的清晰 TODO 步骤如下: 项目 –> 添加 -> 区域 (Area) 添加路由规则 public static class WebApiConfi ...
- [Ajax] 如何使用Ajax传递多个复选框的值
HTML+JavaScript代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- tcl脚本直接执行脚本中中文识别不了的处理
上一篇说tcl中文乱码是因为我写了个bat调用该脚本,但是脚本中的中文路径是乱码.今天刚好有时间进行解决下: 首先看看调用代码 "./bin/base-tcl8.6-thread-win32 ...
- 开始一个django项目的流程
1.明确开发站点的主题,(即此站点的作用), 确定站点的各种功能,需求. 2.优先设计数据库. 数据库的设计要合理,不能想当然的设计,最好能够以表格的形式展现出来,避免以后遗忘,也避免内容的重复. 3 ...
- 如何搭建并使用便携式 4G/LTE 伪基站研究移动安全
此文章PDF文档下载地址:点击下载 0x00 前言 在移动互联网深入普及和物联网开始规模应用的今天,网络安全公司怎能不研究移动安全,要研究移动安全,怎能没有4G/LTE伪基站研究测试环境? 本文介绍如 ...