web技术之负载均衡与缓存技术

 

WEB系统架构技术

 

 

作    者:阿苏是也

创建日期:2015-09-30

修改日期:2015-10-11

当前版本:1.1v

一、文档控制

文档版本

文档名说明


 

文档主题

本文档用于指导对日上亿基本web访问,web框架技术如何来设计的

二、技术框架

2.1、概念解释

使用节点管

 

2.2、框架

 

三、负载均衡

3.1、概念解释

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行。

建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

 

 

 

从形式上看,负载均衡可以分为软件和硬件:

软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡

它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。

它的缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。

硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。

负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。

一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。

3.2、软件负责均衡

 

3.2.1、HTTP重定向

原理:

HTTP重定向,服务器AP接收到请求后,将修改HTTP响应头中location标识来返回一个新的url,然后浏览器在请求这个url地址。实际上就是页面重新定向。为了解决不同国家和地域下载速度的问题,它会返回一个离我们近的下载地址。重定向的HTTP返回码是302.

 

 

优缺点:

重定向容易实现功能,也可以自定义各种策略,但是在大量并发下,性能表现不佳而且给用户的体验也不好。实际在重定向,增加了网络延时。

实现:

通过PHP代码或JSP代码来实现请求重定向。

<?php

$domains=array(‘a.daphne.com’,’b.daphne.com’,’c.daphne.com’);

 

$domain =array_rand($domains); //随机取域名

Header(‘Location:http//’.$domain);

 

3.2.2、反向代理负载均衡

代理负载均衡也称为7层负载均衡

原理:

http反向代理,利用HTTP转发的功能来实现,由于在http第七层网络协议上实现的,因此也叫7层负载均衡,通过反向代理软件提供服务来实现http转发。比较常见一种Nginx

 

优缺点:

优点功能强大,可以自由定制转发策略。缺点反向代理软件本身需要消耗一定资源,同一个用户请求,无法保证一定分配相同的web服务器上,会导致无法找到session的问题。

实现:

通过http方向代软件来实现。

 

3.2.3、IP负载均衡

原理:

IP负载均衡在第四层的网络传输层,负载均衡器将数据包的包头的IP和端口修改为目标服务器的IP和端口。在目标服务器处理结束后,将数据包的包头修改为负载均衡器的IP和端口。常见负载均衡方式是LVS(linuxVirtual Server Linux虚拟服务)

 

 

优缺点:

IP负载均衡性能要高出Nginx的反向代理很多,它只处理到传输层为止的数据包,可以自由定制转发策略。缺点配置复杂

实现:

通过Linuxvriual server (LVS)来实现

 

3.2.4、DNS

原理:

使用域名解析服务,来实现负载均衡,由于DNS域名可以映射一个或多个IP地址。因此使用DNS可以实现负载均衡。

 

优缺点:

优点配置简单,性能极佳,但是不能配置负载均衡策略,每次修改IP或机器故障时很麻烦,DNS生效延时的问题。

 

实现:

通过DNS域名解析服务来实现。

 

3.2.5、CDN

原理:

CDN(Content Delivery Network)内容分发网络的方式。其实就是在同一个域名映射为多个IP的基础上更进一步,通过GSLB(Global Server Load Balance,全局负载均衡)按照指定的规则映射域名的IP,一般情况都是按地理位置,将离用户比较近的IP返回给用户,减少网络传输中的路由的节点之间跳跃消耗。

CDS在web系统中,一般情况下是用来解决大小较大的静态资源(html、jsp、css、图片等)的加载问题。

 

优缺点:

和前面DNS负载均衡一样,不仅性能极佳,而且还支持多种配置策略。但是搭建和维护成本非常高。

实现:

一些大型互联网公司,会自行搭建CDN,小型企业会使用第三方CDN服务。

 

 

3.3、硬件负责均衡

 

 

四、缓存机制

4.1、概念解释

 

通过负载均衡来解决web系统的外部网络环境,现在通过缓存机制解决系统内部性能的问题。

 

这里我们主要关注数据库和应用服务器的缓存。

 

 

4.2、数据库缓存

这里主要以mysql为例

4.2.1、数据库内部缓存

1、建立恰当的索引

 

2、数据库连接线程池缓存

 

3、Innodb缓存设置

 

4、分库、分表、分区

 

 

4.2.2、多台数据库搭建

 

1、建立Mysql主从,从库作为备份

这种做法主要是为了解决单点故障的问题,在主库出现问题时候,切换到从库。布裹,这种做法实际是有点浪费资源。从库空闲着。

 

2、实现主从的读写分离,主库写,从库读。

主库负责写操作,从库负责读操作,不管哪台机器出现问题。可以将读写切换到一台机器上。需要评估压力问题

 

3、主主互备

两台Mysql之间互为彼此的从库,同时又是主库。这种方案,即可以做到了访问量的压力分流,同时也解决了“单点故障”问题。任何一台故障,都还有另外一台可供使用。

这种方案只能用在两台机器的场景。如果业务扩展很快的话,可以选择将业务分离。建立多个主主互备。

 

4.2.3、多台数据库之间的数据同步

Mysql数据直接是通过binlog来实现多台机器之间数据的同步。但是业务高峰期,两台数据库之间的同步数据有延时的场景,甚至受网络和负载均衡等影响,从库数据需要很长时间才能追上主库的数据。

如何解决呢?

1、       Mysql自带多线程同步

从mysql5.6开始支持主库和从库数据同步,走多线程。限制比较明显,只能以库位单位。由于主库写入binlog日志的操作,是具有顺序的,尤其当SQL操作中含有对于表结构的修改等操作,对于后续SQL语句操作是有影响的。因此从库同步数据,必须走单线程。

2、       自己解析binlog,多线程写入

由于表和表之间存在结构关系或数据依赖的话,则同样存在写入顺序的问题。如果需要多线程操作,则适用一些表比较稳定并且相对独立的数据表。

4.3、应用服务器缓存

在web服务器和数据库之间建立缓存。

实际上在解决大量访问量的问题,不能仅仅着眼数据库层面,根据二八定律,80%的请求只关注在20%的热点数据上。因此我们需要在web服务器和数据库直接建立缓存。这种缓存可以使用磁盘,也可以使用内存作为缓存。通过它大部分热点数据查询,阻挡在数据库之前。

1、       页面静态化

将页面静态化,存在缓存服务器上,可更加CDN来自动查找最近服务器来访问页面。

 

2、       单台内存缓存

将热点数据,存放AP内存中,防止到数据库频繁的查询。可以使用redis或memcache来实现。

 

3、       内存缓存集群

若AP是集群分布,可以使用redis custer来实现

4、       减少数据库写

上面我们解决数据库读的问题,下面我们将对数据库操作缓存到队列中,使用批量的方式来写数据。

5、       NoSQL存储

NoSql数据库是keyvalue关系来存储数据,适用于大规模并发,高吞吐量。

6、       空节点查询

频繁的空节点查询,是非常占用资源的,它会访问每个节点下缓存服务器,在没有查到数据后,还会查询所有数据节点。

建议解决方式:建立一张记录查询的映射表。

 

 

4.4、异地部署

CDN解决了静态资源的访问,但是并没有解决超大并发访问下,后台服务的问题。

解决方式:核心集中部署,其他业务分散部署。

核心集中

向用户验证。权限查询,我们可以集中部署。

节点分散

业务功能,我们可以采用节点分散部署。尽量离用户近的原则。

 

核心和其他节点,通过专线传输数据。

用户访问节点,通过外部网络传输数据。

 

 

4.5、节点容灾和过载保护

节点容灾是指当某一个节点宕机后,我们系统需要一种机制保证能提供正常服务。

一个节点宕机了,可以切换到其他节点。

 

过载保护是指当一台机器请求连接数占用资源超过系统资源了,导致服务宕机,我们需要一种机制保护服务器。下面有两种方式

1、       拒绝连接

可以设置最大连接数,当超过这个连接数后,客户端就不能访问,只能等待后台释放线程。

2、       当连接数超过最大值后,将其他连接转发到其他服务器上。

 

 

 

九、变更记录&常见问题&参考资料

9.1、变更记录

 

9.2、常见问题

 

9.3、参考资料

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值