大型网站的负载均衡器、db proxy和db

本文主要分析网站后台架构中的负载均衡器,企业常用的硬件负载均衡器软件负载均衡器、数据库代理服务器和数据库。

1.1 负载均衡

在大型网站部署中,负载均衡至少有三层部署。第一层为web server或者缓存代理之上的负载均衡,第二层为数据库之上的负载均衡,第三层为存储设备之上的负载均衡。

在第一层部署中,最常使用的是硬件负载均衡器有F5 BIG-IP、Citrix NetScaler、Radware、Cisco CSS、Foundry等产品。这些产品价格不菲,高达几十万人民币。在中国大陆,采用F5Network公司的BIG-IP负载均衡交换机的网站有新浪网、雅虎、百度、搜狐、凤凰网、央视国际、中华英才网、猫扑、畅游等。之前淘宝采用 NetScaler作为其硬件负载均衡器。后来用软件负载均衡器LVS和HAproxy混合使用来代替硬件负载均衡器。硬件负载均衡器可以提供OSI参考模型的第四/七层进行负载均衡。在第七层实现负载均衡的原理是,通过检查流经的HTTP报头,根据报头内的信息来执行负载均衡任务。在第四层(网络层)实现负载均衡的DR模式的原理是,通过更改请求包的目的MAC地址来进行负载均衡。

在第一层部署中,最常用的软件负载均衡器为LVS(LinuxVirtual Server)和HAproxy。其中LVS采用基于IP负载均衡技术和基于内容请求分发技术。最常用的LVS负载均衡技术为DR负载均衡。

在第二层部署中,最常用的为mysql-proxy(后端部署必须为MySQL数据库),该代理服务器可以监测、分析或改变客户端的通信。最常用途为负载均衡,读写分离等。

在第三层部署中,最常用的存储设备都要做RAID,其中RAID0便为最基本的存储层的负载均衡。RAID0通过分带技术,将数据分割,然后并行的读写于各个磁盘上。这样实现底层存储一级的负载均衡。

1.2 LVS软件负载均衡器

LVS(LinuxVirtual Server)是由章文嵩博士主导开发的一款开源软件,可以实现Linux平台下的基于网络层的负载均衡软件。典型的基本架构图如图6-2-1所示。

图6-2-1

LVS集群采用IP负载均衡技术和基于内容请求分发技术。

如图6-2-1所示,LVS集群采用基于IP负载均衡技术和基于内容请求分发技术。当客户端有请求时,首先将请求包传送到Load Balance,然后Load Balance从后面的Real Servers中按照一定的算法策略选取一台Real Server,比如Real Server1,然后把请求包发送给Real Server1进行处理。对所有用户而言,面向用户的服务器端IP地址,只有一台,称之为VirtualIP Address。

1.2.1 LVS集群中实现的三种IP负载均衡技术

VS/NAT、 VS/TUN 和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。

1.2.1.1 VS/NAT技术

VS/NAT(VirtualServer via Network Address Translation)技术,主要通过网络地址转换,将一组服务器构成一个高性能的、高可用的虚拟服务器。NAT的工作原理是当内部网络中的主机要访问Internet或被Internet访问时,就需要采用网络地址转换NAT,将内部地址转化为Internet上可用的外部地址。NAT的工作原理是报文头(目标地址、源地址和端口等)被正确改写后,客户端相信他们连接到了一个IP地址,而不同的IP地址服务器组也认为他们与客户直接相连的。由此,可以用NAT方法将不同IP地址的并行网络服务变成一个IP地址上的虚拟服务。VS/NAT的体系结构如图6-2-1-1所示。

图6-2-1-1

客户端访问服务器的请求包和响应包变化情况如下所示:

访问Web服务的报文可能有以下的源地址和目标地址:

SOURCE

202.100.1.2:3456

DEST

202.103.106.5:80

调度器从调度列表中选出一台服务器,例如是172.16.0.3:8000。该报文会被改写为如下地址,并将它发送给选出的服务器。

SOURCE

202.100.1.2:3456

DEST

172.16.0.3:8000

从服务器返回到调度器的响应报文如下:

SOURCE

172.16.0.3:8000

DEST

202.100.1.2:3456

响应报文的源地址会被改写为虚拟服务的地址,再将报文发送给客户:

SOURCE

202.103.106.5:80

DEST

202.100.1.2:3456

这样,客户认为是从202.103.106.5:80服务得到正确的响应,而不会知道该请求是服务器172.16.0.2还是服务器172.16.0.3处理的。

1.2.1.2 VS/TUN技术

VS/TUN 的工作原理:它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。如图6-2-1-2所示。

图6-2-1-2

1.2.1.3 VS/DR技术

在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。如图6-2-1-3所示。

图6-2-1-3

1.2.1.4 LVS的调度算法

前面几节,介绍了LVS的三种基于IP的负载均衡技术,下面简单介绍一下调度算法。调度算法的目的是解决如何合理有效的从LVS后端的RealServers中,选择一个RealServer来对请求包进行处理。在整个LVS项目中,共给出八种调度算法,主要有:

(1)轮询调度。主要指按顺序从RealServers中选择一台RealServers。

(2) 加权轮叫调度。给Real Servers设置一定权值,进行调度。

(3)最小连接调度。按照RealServers的连接情况进行调度。

(4)加权最小连接。根据设置的权值和现有的连接数进行调度。

(5)基于局部性的最小连接。主要用于增大Cache命中。

(6)代复制的基于局部性的最小连接。

(7)目标地址散列调度。

(8)源地址散列调度。

在上述八种调度算法中,最常用的调度算法是轮询调度。

1.3 db proxy

在大型互联网站的数据库部署中,部署最多的数据库为MySQL。随着MySQL中Innodb存储引擎对事物的支持,MySQL在互联网公司部署中,应用量越来越多。典型应用MySQL的公司有Google、Baidu、Taobao等大型互联网公司。MySQL的优势在于其高扩展性和价格优势等。实际上,MySQL可以免费应用于企业级的部署中。

在MySQL复制方式部署中,有两种部署方式:同步复制和异步复制。同步复制采用NDB 存储引擎,异步复制需要使用mysql-proxy结合master-slave实现。

异步复制主要为了解决读写分离的问题。因为用户对网站的访问有读操作多,写操作少的特点。甚至像taobao.com这样的网站读写比例高达10:1,所以采用MySQL-Proxy结合主从异步复制实现读写分离是非常重要的增快访问速度的方法。这样如果有更高的用户访问需求,通过增加slave机器,不会对现有系统提供的服务产生影响而实现很好的、很灵活的业务扩展。

1.3.1 mysql-proxy

mysql-proxy是一个MySQL的代理服务器,用户的请求先发向mysql-proxy,然后mysql-proxy对用户的数据包进行分析,从下一层的mysql 数据库中选择一台数据库,将用户的请求包交给mysql处理。

首先MySQL Proxy 以服务器的身份接受客户端的请求,根据相应配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,然后返回给客户端。所以MySQL Proxy需要同时实现客户端和服务器的协议。由于要对客户端发送过来的SQL语句进行分析,还需要包含一个SQL解析器。MySQL Proxy通过使用lua脚本,来实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。所以部署MySQL-Proxy需要安装运行Lua语言的环境。典型的MySQL-Proxy应用为实现读写分离,如图6-3-1所示。

图6-3-1

1.3.2 MySQL主从复制(Master-Slave Replication)

MySQL主从复制(Master-Slave Replication)是通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了数据库的复制功能。原理如图6-3-2所示:

图6-3-2

MySQL主从复制的作用如下:

(1)    可以作为一种备份机制。

(2)    可以用来做读写分离。

1.3.3 MySQL主从复制结合MySQL Proxy实现读写分离

通过使用MySQL-Proxy来作为代理服务器,配置MySQL Proxy,将所有的写操作,分流到master MySQL上,所有的读操作分流到slave MySQLs。

这样就实现了读写分离。如果有新的访问需求,只需添加slave MySQL机器来解决问题。所以这样的结构扩展能力非常好。如图6-3-3所示。

图6-3-3

1.4 本文小结

本文主要论述了负载均衡在大型网站后台架构中的应用。主要分析了应用层的软件负载均衡器LVS的三种负载均衡算法,简单介绍了LVS的八种调度算法。详细分析了MySQL的主从复制和读写分离的实现机制。给出了高可用网站后台的部署中解决负载均衡的方案。

声明:本文档可以随意更改,但必须署名原作者

作者:凤凰舞者 qq:578989855

大型网站的负载均衡器、db proxy和db,布布扣,bubuko.com

时间: 2024-10-10 15:26:54

大型网站的负载均衡器、db proxy和db的相关文章

Mysql在大型网站的应用架构演变

原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文链接地址: Mysql在大型网站的应用架构演变 写在最前: 本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变 可扩展性 架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段有以下两种Scale-up :  纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力Scale-out : 横向扩展,  通过加节

大型网站技术架构介绍--squid

一.大型网站技术架构介绍 1.pv高  ip高 并发量 2.大型网站架构重点 1. 高性能:响应时间,TPS,系统性能计数器.缓存,消息队列等. 高可用性High Availability   99.99% 7*24 2.衡量标准:假设环境中一台或者多台服务器宕机,服务是否依然可用.解决关键办法:冗余.资源定位,健康检查.负载均衡,关键服务器冗余:web DB ,及时有效的监控和报警 3.高伸缩性[高可维护性] 是否可以用多台服务器构建集群,是否容易向集群添加新的服务器,新服务是否可提供相同的服

我也谈大型网站架构(一)

原文:http://www.cnblogs.com/chenlulouis/archive/2009/07/19/1526498.html 话说大型高并发高负载网站的系统架构 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件.编程

Mysql在大型网站的应用架构演变(转)

原文: Mysql在大型网站的应用架构演变 本文已经被多处转载,包括CSDN推荐以及码农周刊等等,阅读数超过5w+,回流到我博客流量的还是比较少,不过这不重要, 后续会分享更多技术,尽量试图把自己理解的东西描述出来(很多时候自己的理解是90分,可是描述出来就只有60分了) CSDN的转载 :http://www.csdn.net/article/2014-06-10/2820160 伯乐在线的转载: http://blog.jobbole.com/70844/ 当然还有大量转载没有写明出处的..

大型网站技术

大型网站开发 网站架构 缓存和数据一致性 分布式事务 负载均衡和高可用 微服务 消息队列 秒杀系统 大型网站特点 海量数据 高并用 高可用 需求多 容量的估算 常见容量估算:数据量 并发量 带宽 CPU|MEM|DISK 容量评估步骤 1.评估总访问量 2.评估平均访问量 QPS 3.评估高峰 QPS 4.评估系统 单机极限 5.计算容量 常见性能测试方案 ab JMeter LoadRunner 系统负载 System Load :系统CPU繁忙程度的度量 有多少进程在等待被CPU调用 (进程

大型网站架构演变

1.简介 大型网站架构的演进最开始都是由小及大慢慢演变过来的,任何一个好的架构都不是设计出来了,是经过业务发展迭代而来的,这个观点我是赞同的.对于网站架构技术非常有兴趣,一直持续关注学习架构技术,本次想通过大型网站技术发展历程,剖析大型网站技术架构模式,深入分析大型互联网架构设计.这篇文章我们只关注架构的演变历程.通过电商业务为例,该系统的功能有用户模块[用户注册和管理].商品模块[商品展示和管理].交易模块[创建交易和管理].通过图例分析一个最初从单台LAMP怎么发展到庞大的分布架构体系. 线

3月1日 大型网站系统与Java中间件实践 读后感

第二章:大型网站以及架构演进过程 db和应用服务器在一台机器上 数据库与应用分离 服务器走向集群,负载均衡,session问题 读写分离:数据复制,数据源的选择,搜索引擎其实就是一个读库,缓存(数据缓存,页面缓存) 分布式存储系统 专库专用,数据垂直拆分 水平拆分 拆分应用,服务化 中间件 第三章:构建Java中间件 JVM 垃圾回收与内存堆布局 java并发类,接口和方法 动态代理 反射 网络通信实现选择

大型网站MySQL深度优化揭秘 2

学无止境,老男孩教育成就你人生的起点! 相信自己相信老男孩!!! 老男孩-51cto-公开课-大型网站MySQL深度优化揭秘 部分整理有没跟上的抱歉 ? 目 录 大型网站MySQL深度优化揭秘????2 第1章 优化的思路和线路????2 1.1 网站优化的思路????2 1.2 MySQL优化,nginx这样的东西怎么优化?????2 第2章 硬件层面优化????3 2.1 数据库物理机????3 2.1.1 CPU????3 2.1.2 Memory????3 2.1.3 disk(磁盘IO

大型网站都是用什么语言

大型网站都是用什么语言写的(转)  小凡 2015-10-09 15:23:14 看看现在大型网站都是用什么语言写的? 不排除一个网站用多种技术!如淘宝是Java+php,底层是java,表现层是php.新浪,网易,腾讯应该也是用了多种技术. 据说是这样的:php,新浪,雅虎等用php较多.淘宝,腾讯用java较多.一般的部署是这样的:php,.net做前端视图的调用,和简单逻辑应用.像雅虎前cto说的那样,能用php的地方我们尽量用php.对性能要求稍高,逻辑复杂,维护量大,更改频繁的地方一般