大型网站的负载均衡器、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

转载于:https://blog.51cto.com/jawsy/633791

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

  1. (转)大型网站的负载均衡器、db proxy和db

    大型网站的负载均衡器.db proxy和db 本文主要分析网站后台架构中的负载均衡器,企业常用的硬件负载均衡器软件负载均衡器.数据库代理服务器和数据库. 1.1 负载均衡 在大型网站部署中,负载均衡至 ...

  2. 大型网站后台架构的演变

    随着用户访问量的不断增加,网站的后台也会不断变化以应对需求.本文主要从一个小型网站到大型网站的过度与变化来陈述. 1.1 网站后台架构 主要指由web server .应用服务器.数据库.存储.监控等 ...

  3. 大型网站服务器的架构

    随着用户访问量的不断增加,网站的后台也会不断变化以应对需求.本文主要从一个小型网站到大型网站的过度与变化来陈述. 1.1 网站后台架构 主要指由web server .应用服务器.数据库.存储.监控等 ...

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

    原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/ 本文链接地址: Mysql在大型网站的应用架构演变 本文已经被多处转载,包括CSDN推荐以及码农周刊等等, ...

  5. 高并发高流量的大型网站架构设计

    Web2.0的兴起,掀起了互联网新一轮的网络创业大潮.以用户为导向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一大批新生的网站,也极大的方便了上网的人们.但Web2.0以用户为导向的理念 ...

  6. 基于Java技术的大型网站架构设计方案

    架构设计漫长路 最佳实践我来数 千万并发没问题 要点首推数据库 SQL语句要优化 索引创建有艺术 三大范式不可废 冗余字段难维护 查询过多怎么办 缓存使用是本固 频繁访问不用怕 每秒数千扛得住 更新插 ...

  7. [转]Mysql在大型网站的应用架构演变

    原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/  本文链接地址: Mysql在大型网站的应用架构演变 写在最前: 本文主要描述在网站的不同的并发访问量级下 ...

  8. 大型网站系统与Java中间件实践 第二章大型网站及其架构演进过程

    2.1什么是大型网站 通过第 1 章我们了解了分布式系统的相关基础知识, 大型网站是一种很常见的分布式系统,而本书重点要介绍的中间件系统也是在大型网站的架构变化中出现并发展的,那么我们很有必要从大型网 ...

  9. 程序员,如何逐步去构建一个大型网站系统,面试必问!!!

    往往程序员在面试的时候,公司的面试任职资格上,总有一个大型系统网站的开发经验,我们先来看看几张面试招聘信息截图....... 大型网站定义 首先我们要思考一个问题,什么样的网站才是大型网站,从网站的技 ...

最新文章

  1. if(window.event) e = window.event
  2. LinkedHashMap分析
  3. 什么是代理模式?代理模式有什么用?通过一个小程序分析静态代理和动态代理。自己简单实现动态代理。JDK动态代理和CGLIB动态代理的区别。
  4. Commit Monitor–svn监控工具
  5. 15张Vim速查表-帮你提高N倍效率
  6. 前端windows下常用的CMD 命令归纳
  7. 0间隔24h采集线报+源码的资源网
  8. volatile 用处
  9. Servlet 生命周期、工作原理(转)
  10. idea 项目启动找不到页面问题和run/debug只能启动一个的问题
  11. 在无锡调试的工作,到了泰安出错了
  12. python 操作psd_python psd
  13. k8s mysql 弹性_k8s 弹性伸缩,基于prometheus自定义指标
  14. 【数据结构与算法】车辆路径问题(Vehicle Routing Problem,VRP)
  15. 虚拟现实技术虚拟校园解决方案
  16. html怎么在文字中加小方框,css之列表数据前加上小方框
  17. SSH Tunneling (SSH隧道)远程连接服务器
  18. Google APAC 2016 University Graduates Test Practice Round APAC test
  19. 小白兔和小灰兔【爱情故事系列暖暖的很贴心】
  20. 高中数学一对一培训高中数学必修一知识点总结

热门文章

  1. 如何让word档在同一页上显示两列或更多列
  2. 74 计算机图形学开源处理库
  3. 笔记-VUE滚动加载更多数据
  4. Django基础核心技术之Model模型的介绍与设计
  5. 栈和队列----用栈求解汉诺塔问题
  6. Oracle Spatial分区应用研究之一:分区与分表查询性能对比
  7. linux驱动(七)gpiolib库详解
  8. http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html
  9. Linux下恢复误删文件:思路+实践
  10. 【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup