负载均衡

负载均衡是高可用网络基础架构的的一个关键组成部分,有了负载均衡,我们通常可以将我们的应用服务器部署多台,然后通过负载均衡将用户的请求分发到不同的服务器用来提高网站、应用、数据库或其他服务的性能以及可靠性。

为什么要引入负载均衡

先看一个没有负载均衡机制的web架构:

上图中的架构有什么缺陷了?首先,用户是通过网络直接和web服务器相连,想象一下,如果这个服务器挂了(这种情况随时都可能发生的),那么用户的请求就会得不到响应,将无法访问该网站,这就是著名的单点故障问题,这肯定是不行的,一般而言,商业上的网站其可靠性需要达到至少4个9,也就是99.99&以上。

其次,即使服务器是正常工作的情况,但是如果很多用户在同一时间内访问服务器,超过了服务器的处理能力,那么会出现响应速度慢甚至无法连接的情况,这也是用户无法接受的。

负载均衡的出现可以很好的解决上面两个问题,通过引入一个负载均衡器和至少两个web 服务器,可以有效的解决上面两个问题。注:通常情况下,所有的后端服务器会保证提供相同的内容,以便用户无论哪个服务器响应,都能收到一致的内容。

如上图架构,现在,即使App 01即使挂了,负载均衡会将用户的请求转发到正常工作的App 02上,这解决了上面的第一个问题;其次,根据业务需要,负载均衡后端的App可以很方便的扩展,这样就能解决第上面的第二个问题。但是,现在单点故障问题转移到了负载均衡器,可以通过引入第二个负载均衡器来缓解,后面还会讲到。

负载均衡如何选择要转发的后端服务器

负载均衡器一般根据两个因素来决定要将请求转发到哪个服务器。

1:确保所选择的后端服务器是正常工作的,能给对用户的请求做出响应;

2:根据预先设置的负载均衡算法从健康服务器池中进行选择。

由于负载均衡器只应当选择能正常做出响应的后端服务器,因此就需要有一种机制能判断它所连的后端服务器是否正常工作。为了监视后台服务器的运行状况,运行状态检查服务会定期尝试使用转发规则定义的协议和端口去连接后端服务器。如果某个服务器没有通过健康检查,就会从健康池中剔除,保证流量不会被转发到该服务器,直到其再次通过健康检查为止。

负载均衡算法

负载均衡算法决定了后端的哪些健康服务器会被选中。下面是几个常用的算法,这里只是简单介绍,不具体研究其算法实现了,后面会专门用一篇文章来总结:

轮询:为第一个请求选择健康池中的第一个后端服务器,然后按顺序往后依次选择,直到最后一个,然后循环。

最小连接:优先选择连接数最少,也就是压力最小的后端服务器,在会话较长的情况下可以考虑采取这种方式。

散列:根据请求源的 IP 的散列(hash)来选择要转发的服务器。这种方式可以一定程度上保证特定用户能连接到相同的服务器。如果你的应用需要处理状态而要求用户能连接到和之前相同的服务器,可以考虑采取这种方式。

当主负载均衡器发生了故障,就需要将用户请求转到第二个负载均衡器。由于 DNS 更改通常会在较长的时间才能生效,因此需要有一种能灵活解决 IP 地址重新映射的方法,比如浮动 IP(floating IP)。这样域名可以保持和相同的 IP 相关联,而 IP 本身则能在服务器之间移动。下面就是一个使用浮动 IP 的负载均衡架构动态示意图:

CDN内容分发原理

1) 用户向浏览器提供要访问的域名;

2) 浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的

CNAME记录,为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问;

3) 此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;

4) 缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;

5) 缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程;

6) 客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。

负载均衡与CDN简介的更多相关文章

  1. 【转】《从入门到精通云服务器》第七讲—负载均衡和CDN技术

    在IDC知识中,我们常常会遇上负载均衡与CDN的概念而不知所云.第一讲[什么是云计算], 我们提到过负载均衡,仅给大家留下了印象.这次我们将深入浅出的讲讲到底什么是负载均衡与CDN技术.---互联网数 ...

  2. 主要从架构上来做优化,负载均衡、CDN、静态化、数据库的水平切割和纵向切割、读写分离、分布式缓存着手

    语言知识一种工具,甚至技术本身也只是一种工具,本身并不值钱,关键在于用于何种行业,产生了什么价值. 但从语言来看,我个人更喜欢php,然后是C#,然后是java从框架而言,先是java,然后C#,再次 ...

  3. 全局负载均衡与CDN内容分发

    CDN简介 CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发. ...

  4. Linux负载均衡软件LVS简介

    Linux负载均衡软件LVS LVS集群的体系结构以及特点 1. LVS简介        LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起 ...

  5. [转]简述负载均衡和CDN技术

    http://blog.jobbole.com/86066/ 曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系 ...

  6. 简述负载均衡和CDN技术

    曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文 ...

  7. 简述负载均衡和 CDN 技术

    曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文 ...

  8. LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

    一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现 ...

  9. 关于 CDN 负载均衡 网页请求过程等

    链接 1 [转]浅谈一个网页打开的全过程(涉及DNS.CDN.Nginx负载均衡等)  https://www.cnblogs.com/xuan52rock/p/6845637.html 2 闲话 C ...

随机推荐

  1. Xcode Edit Schemes

    关于本文:有关“Xcode Edit Schemes”的设置,还是有很大的学问的.由于时间关系,我一点一点的补充. 1.在开发的时候,至少将Run的Build Configuration设置为Debu ...

  2. exec函数的执行对用户ID的影响

    exec不会创建新进程,只是分析加载程序文件或者shell执行文件,替换父进程的代码段.数据段.栈段,一个进程可以执行多个exec来执行多个程序,但进程只有一个 父进程经常是waitpid,获取子进程 ...

  3. java并发:初探用户线程和守护线程

    用户线程和守护线程 用户线程 用户线程执行完,jvm退出.守护线程还是可以跑的 /** * A <i>thread</i> is a thread of execution i ...

  4. jqueery easyui tree把已选中的节点数据拼成json或者数组(非常重要)

    jqueery easyui tree把已选中的节点数据拼成json或者数组 pqxhk10级分类:其他被浏览14次2018.01.19  https://wenda.so.com/q/1535702 ...

  5. 在网页中JS函数自动执行常用三种方法

    在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   function ...

  6. 「SP1716」GSS3 - Can you answer these queries III

    传送门 Luogu 解题思路 区间最大子段和板子题. 考虑用线段树来做. 对于一个线段树节点所包含区间,它的最大子段和有两种情况,包含中点与不包含. 不包含的情况直接从左右子树转移. 对于包含的情况: ...

  7. 如何借助 Python 俘获女孩子芳心?

    责编 | 刘静 天气降温,感情却升温了? 上午刚到公司,就收到小Q发来的灵魂拷问: ​ ​ “Q仔!要不然下午请个假!我带你去精神科看看!?”我实在忍不了,脱口而出. 话音未落,前排的运营小花回头看向 ...

  8. 前端学习笔记系列一:2 Vue的单文件组件

    (1)非单文件vue组件和单文件vue组件的一般写法 一个完整的vue组件会包括三个部分:一是template模板部分,二是js程序逻辑部分,三是css样式部分.每个组件都有属于自己的模板,js和样式 ...

  9. Ubuntu 16.04非编译安装Zabbix 3.2----服务端和客户端win的配置

    控服务器 - 什么是Zabbix Zabbix是企业级开源分布式监控服务器解决方案. 该软件监控网络的不同参数和服务器的完整性,还允许为任何事件配置基于电子邮件的警报. Zabbix根据存储在数据库( ...

  10. chromedriver版本问题

    最新的chromedriver 66.0.3359.117 的对应chromedriver版本为2.38 http://npm.taobao.org/mirrors/chromedriver/ Web ...